게임 알고리즘

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();
            }
        }
    }
}