Unit <- AttackUnit <- Marin, Firebat, Medic
1) 생성: 마린, 파이어뱃, 매딕
2) 공격: 마린 > 파이어뱃
공격: 파이어뱃 > 마린
3) 치료: 매딕 > 파이어뱃
이름 | 속성 | 능력치 |
Marin | 체력 | 40 |
Marin | 방어력 | 0 |
Marin | 공격력 | 6 |
Firebat | 체력 | 50 |
Firebat | 방어력 | 0 |
Firebat | 공격력 | 6 |
Medic | 체력 | 60 |
Medic | 방어력 | 0 |
Medic | 에너지 | 200(생성 시 /2) |
- Main
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace D_0816
{
internal class Program
{
static void Main(string[] args)
{
new App();
}
}
}
- App
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace D_0816
{
public class App
{
//생성자
public App()
{
Console.WriteLine("App 생성자 실행");
// 마린
MarinData marindata = new MarinData(40, 0, 6);
Marin marin = new Marin("마린", marindata);
// 파이어뱃
FirebatData firebatData = new FirebatData(50, 0, 6);
Firebat firebat = new Firebat("파이어뱃", firebatData);
marin.Attack(firebat);
firebat.Attack(marin);
// 매딕
MedicData medicData = new MedicData(60, 0, 200);
Medic medic = new Medic("메딕", medicData);
medic.Heal(firebat);
}
}
}
- Unit
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace D_0816
{// 체력, 방어력
public class Unit
{
//맴버 변수
public string name;
public int hp;
public int maxHp;
public int armor;
public int energe;
//생성자
public Unit()
{
Console.WriteLine("Unit 생성자 실행");
}
public void Move()
{
}
public void HitDamage(int damage)
{
this.hp -= damage;
Console.WriteLine($"피해:{this.name}이 {damage}를 받았습니다. {this.hp}/{this.maxHp}\n");
}
public void IncreseHP(int addHp)
{
this.hp += addHp;
if (this.hp >= this.maxHp)
{
this.hp = this.maxHp;
}
Console.WriteLine($"{this.name}의 체력이 {addHp}만큼 회복되었습니다.{this.hp}/{this.maxHp}");
}
}
}
- AttackUnit
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace D_0816
{//공격력
public class AttackUnit : Unit
{
public int damage;
//생성자
public AttackUnit()
{
Console.WriteLine("AttackUnit 생성자 실행");
}
public virtual void Attack(Unit unit) // 타입 매서드 사용
{
}
}
}
- Marin
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace D_0816
{
public class Marin : AttackUnit
{
public int energe;
MarinData data;
public Marin(string name, MarinData data)
{
Console.WriteLine("Marin 유닛이 생성되었습니다.");
this.name = name;
this.data = data;
this.hp = data.maxHp;
this.armor = data.armor;
this.damage = data.damage;
this.maxHp = data.maxHp;
Console.WriteLine($"체력: {this.hp}/{data.maxHp}");
Console.WriteLine($"방어력: {this.armor}");
Console.WriteLine($"공격력: {this.damage}\n");
}
// 베이스 클래스에서 정의된 매서드를 재정의
public override void Attack(Unit unit)
{
Console.WriteLine($"{this.name}이 {unit.name}을 총으로 공격합니다.");
unit.HitDamage(this.damage);
}
}
}
- Firebat
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace D_0816
{
public class Firebat : AttackUnit
{
//맴버 변수
FirebatData data;
//생성자
public Firebat(string name, FirebatData data)
{
Console.WriteLine("Firebat이 생성되었습니다.");
this.name = name;
this.data = data;
this.hp = data.maxHp;
this.armor = data.armor;
this.damage = data.damage;
this.maxHp = data.maxHp;
Console.WriteLine($"체력:{this.hp}/{data.maxHp}");
Console.WriteLine($"방어력:{this.armor}");
Console.WriteLine($"공격력:{this.damage}\n");
}
// 베이스 클래스에서 정의된 매서드를 재정의
public override void Attack(Unit unit)
{
Console.WriteLine($"{this.name}이 {unit.name}을 화염방사기로 공격합니다.");
unit.HitDamage(this.damage);
}
}
}
- Medic
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace D_0816
{
public class Medic : Unit
{
//맴버 변수
public int energe;
public MedicData data;
public Medic(string name, MedicData data)
{
Console.WriteLine("Medic이 생성되었습니다.");
this.name = name;
this.data = data;
this.hp =data.maxHp;
this.maxHp =data.maxHp;
this.armor =data.armor;
this.energe = data.energe / 2;
Console.WriteLine($"체력:{this.hp}/{this.maxHp}");
Console.WriteLine($"방어력:{this.armor}");
Console.WriteLine($"에너지:{this.energe}/{data.energe}\n");
}
public void Heal(Unit unit)
{
Console.WriteLine($"{this.name}이 {unit.name}을 치료합니다.");
bool isSuccess = this.DecraseEnerge(1);
if (isSuccess)
{
unit.IncreseHP(1);
}
}
public bool DecraseEnerge(int val)
{
if (this.energe <= 0)
{
Console.WriteLine($"{this.name}의 에너지가 부족합니다. {this.energe}/{data.energe}");
return false;
}
else
{
this.energe -= val;
Console.WriteLine($"{this.name}의 에너지가 {val}만큼 감소하였습니다.{this.energe}/{data.energe}");
return true;
}
}
}
}
'게임 알고리즘' 카테고리의 다른 글
Delegate_대리자_이름은 하나인데 사용은 서너 개~ (0) | 2024.08.18 |
---|---|
Dictionary_소원이 이루어질까? 타로 점 보기 (0) | 2024.08.17 |
enum으로 과일 관리 배열 만들기 (2) | 2024.08.15 |
List로 인벤토리 생성 (2) | 2024.08.15 |
고블린이 홍길동에게 피해(1)을 받았습니다. (1) | 2024.08.12 |