게임 알고리즘
2일차 과제 (Siege Tank)
park-gom
2024. 8. 13. 17:37
namespace hw
{
internal class Program
{
static void Main(string[] args)
{
new App();
}
}
}
using System;
namespace hw
{
internal class App
{
public App()
{
SiegeTank tank = new SiegeTank(30, 70); //기본공격력, 체력
tank.Move(3, 4, this.MoveComplete);
tank.onChangeMode = this.ChangeModeCompleteHandler;
tank.ChangeMode(); //시즈모드면 탱크모드로, 탱크모드면 시즈모드로
tank.Move(3, 4, this.MoveComplete);
}
void MoveComplete()
{
Console.WriteLine("탱크가 이동을 완료 했습니다.");
Console.WriteLine();
}
void ChangeModeCompleteHandler()
{
Console.WriteLine("시즈모드로 변경했습니다.");
}
}
}
using System;
namespace hw
{
internal class SiegeTank
{
public delegate void Callback();
public Callback onChangeMode;
private string mode;
private int damage;
private int maxHp;
public SiegeTank(int damage, int maxHp)
{
this.mode = "Tank";
this.damage = damage;
this.maxHp = maxHp;
Console.WriteLine("시즈탱크가 생성되었습니다.");
Console.WriteLine($"모드 : {this.mode}");
Console.WriteLine($"공격력 : {this.damage}");
Console.WriteLine($"체력 : {this.maxHp}/{this.maxHp}");
Console.WriteLine();
}
//tank.Move(3, 4, this.MoveComplete);
public void Move(int x, int y, Callback callback)
{
if (this.mode == "Tank")
{
Console.WriteLine($"탱크가({x}, {y})로 이동을 시작했습니다.");
Console.WriteLine("이동중...");
Console.WriteLine("이동중...");
Console.WriteLine("이동중...");
callback();
}
else
{
Console.WriteLine("시즈모드일때는 이동할 수 없습니다.");
}
}
public void ChangeMode()
{
onChangeMode();
if (this.mode == "Tank")
{
this.mode = "Siege";
this.damage = 50;
Console.WriteLine($"모드 : {this.mode}");
Console.WriteLine($"공격력 : {this.damage}");
Console.WriteLine($"체력 : {this.maxHp}/{this.maxHp}");
Console.WriteLine();
}
else
{
this.mode = "Tank";
this.damage = 30;
Console.WriteLine($"모드 : {this.mode}");
Console.WriteLine($"공격력 : {this.damage}");
Console.WriteLine($"체력 : {this.maxHp}/{this.maxHp}");
Console.WriteLine();
}
}
}
}