C#/수업 내용

클래스를 활용한 시즈탱크 구현

HSH12345 2023. 1. 5. 13:03
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study04
{
    class App
    {        
        //생성자
        public App()
        {
            SiegeTank siegeTank0 = new SiegeTank("시즈탱크0", 150, 30, 1);
            SiegeTank siegeTank1 = new SiegeTank("시즈탱크1", 150, 30, 1);

            siegeTank0.Move();
            siegeTank0.Att(siegeTank1);

            Console.WriteLine();

            siegeTank0.ChangeMode();
            siegeTank0.Move();
            siegeTank0.Att(siegeTank1);

            Console.WriteLine();

            siegeTank0.ChangeMode();
            siegeTank0.Att(siegeTank1);

        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study04
{
    class SiegeTank
    {
        public enum ModeType
        {
            Tank,
            Siege
        }

        public ModeType modeType;

        public string name;
        public int maxHp;
        public int hp;
        public int dmg;
        public int def;

        //생성자
        public SiegeTank(string name, int hp, int dmg, int def)
        {
            this.modeType = ModeType.Tank;
            this.name = name;
            this.maxHp = hp;
            this.hp = this.maxHp;
            this.dmg = dmg;
            this.def = def;
        }

        public void Move()
        {
            if (this.modeType == ModeType.Tank)
            {
                Console.WriteLine("{0}가 이동하였습니다.", this.name);
            }
            else
            {
                Console.WriteLine("시즈 모드에서는 이동할 수 없습니다.");
            }
        }

        public void ChangeMode()
        {
            if(this.modeType == ModeType.Tank)
            {
                this.modeType = ModeType.Siege;
                Console.WriteLine("시즈모드가 되었습니다.");
                this.dmg = 70;
            }
            else
            {
                this.modeType = ModeType.Tank;
                Console.WriteLine("일반모드가 되었습니다.");
                this.dmg = 30;
            }
        }

        public void Att(SiegeTank target)
        {
            if (this.modeType == ModeType.Tank)
            {
                Console.WriteLine("기본 모드로 {0}을 공격({1})하였습니다.", target.name, this.dmg - (this.def * 5));
            }
            else
            {
                Console.WriteLine("시즈 모드로 {0}을 공격({1})하였습니다.", target.name, this.dmg - (this.def * 5));
            }
            target.Hit(this);
        }

        void Hit(SiegeTank attacker)
        {
            this.hp = this.hp - attacker.dmg;
            Console.WriteLine("{0}이 {1}에게 피해(-{2})를 입었습니다. ({3}/{4})", this.name, attacker.name, attacker.dmg - (this.def * 5), this.hp, this.maxHp);
        }
    }
}