게임 알고리즘

2일차 과제2 (Luker)

park-gom 2024. 8. 13. 18:10

namespace hw2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}
using System;

namespace hw2
{
    internal class App
    {
        public App()
        {
            Lurker lurker = new Lurker(10, 20);
            lurker.onBurrow = this.BurrowCompleteHandler;
            lurker.Burrow(lurker);
            lurker.Attack("Marine");
            lurker.Move(3, 4, this.MoveComplete);
            lurker.UnBurrow(lurker);
            lurker.Move(2, 1, this.MoveComplete);
            lurker.Attack("SCV");

        }

        void BurrowCompleteHandler(Lurker lurker)
        {
            if (lurker.burrow)
            {
                Console.WriteLine("버로우 했습니다.");
            }
            else
            {
                Console.WriteLine("언버로우 했습니다.");
            }
        }

        void MoveComplete()
        {
            Console.WriteLine("이동을 완료했습니다");
        }
    }
}
using System;

namespace hw2
{
    internal class Lurker
    {
        public delegate void Callback(Lurker lurker);
        public delegate void Callback2();
        public Callback onBurrow;


        public bool burrow;
        private int damage;
        private int hp;

        public Lurker(int damage, int maxHp)
        {
            this.damage = damage;
            this.hp = maxHp;
            this.burrow = false;
            Console.WriteLine("럴커가 생성되었습니다.");
            Console.WriteLine($"공격력 : {this.damage}");
            Console.WriteLine($"체력 : {this.hp}/{this.hp}");
            Console.WriteLine();
        }

        public void Burrow(Lurker lurker)
        {
            this.burrow = true;
            onBurrow(lurker);
        }

        public void UnBurrow(Lurker lurker)
        {
            this.burrow = false;
            onBurrow(lurker);
        }

        public void Attack(string target)
        {
            if (this.burrow)
            {
                Console.WriteLine($"{target}을 공격 했습니다.");
            }
            else
            {
                Console.WriteLine($"대상({target})을 공격 할 수 없습니다");
            }
        }

        public void Move(int x, int y, Callback2 callback)
        {
            if (this.burrow)
            {
                Console.WriteLine("버로우 상태에서는 이동할 수 없습니다.");
            }
            else
            {
                Console.WriteLine($"{x},{y}로 이동을 시작합니다.");
                Console.WriteLine("이동중...");
                Console.WriteLine("이동중...");
                Console.WriteLine("이동중...");
                callback();
            }
        }
    }
}