C#프로그래밍

스타크래프트 유닛, 건물

다모아 2023. 7. 21. 12:30

Main 메서드 [공통]

using System;

namespace LearnDotnet
{
    internal class Program
    { 
        static void Main(string[] args)
        {
            new App(); //new: 인스턴스 호출[값이라 변수에 넣을 수 있음]
        }
    }
}

 

1. App 클래스 [TerranCommandCenter]

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

namespace LearnDotnet
{
    internal class App
    {
        //데이터

        //생성자
        public App()
        {
            TerranCommandCenter terranCommandCenter = new TerranCommandCenter();
            terranCommandCenter.Liftoff();
            terranCommandCenter.Land();
        }
        //기능
    }
}

 

1. TerranCommandCenter 클래스

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

namespace LearnDotnet
{
    internal class TerranCommandCenter
    {
        //열거형식 정의
        enum eState
        {
            Land,
            Liftoff
        }

        //멤버 변수(데이터)
        int hp; // 멤버 변수는 TerranCommandCenter인스턴스가 끝날 때까지 안사라짐 [힙에 저장]
        int maxHp = 1500;

        //상태 (Land, Liftoff)
        //int state; // 0 , 1
        //bool state; // true, false
        //eState state = eState.Land;
        eState state; // 상태

        
        //생성자 메서드
        public TerranCommandCenter()
        {
            state = eState.Land;
            hp = maxHp;
            //int hp = 1500; 지역 변수는 메서드의 호출이 끝나면 사라짐
            Console.WriteLine("커맨드 센터가 생성되었습니다. ({0}/{1})", hp, maxHp);
            Console.WriteLine("State: {0}", state);
        }

        //멤버 메서드 (기능)
        public void Liftoff()
        {
            if (state == eState.Land)
            {
                Console.WriteLine("올라갑니다.");
                state = eState.Liftoff;
            }
        }

        public void Land()
        {
            if (state == eState.Liftoff)
            {
                Console.WriteLine("내려갑니다.");
                state = eState.Land;
            }
        }
    }
}

2. App 클래스 [TerranSCV]

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

namespace LearnDotnet
{
    internal class App
    {
        //데이터

        //생성자
        public App()
        {
            TerranSCV scv = new TerranSCV();
            scv.Move();
        }
        //기능
    }
}

 

2. TerranSCV 클래스

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

namespace LearnDotnet
{
    internal class TerranSCV
    {
        //멤버변수(데이터)
        int hp;
        int maxHp = 60;
        int damage = 6;
        int armor = 0;

        //생성자 메서드
        public TerranSCV() 
        {
            hp = maxHp;
            Console.WriteLine("SCV가 생성되었습니다.");
            Console.WriteLine("체력 : {0}/{1}", hp, maxHp);
            Console.WriteLine("공격력 : {0}", damage);
            Console.WriteLine("방어력 : {0}", armor);
        }

        //멤버 메서드(기능)
        public void Move()
        {
            Console.WriteLine("SCV가 이동합니다.");
        }
    }
}

3. App 클래스 [TerranTank]

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

namespace LearnDotnet
{
    internal class App
    {
        //데이터

        //생성자
        public App()
        {
            TerranTank tank = new TerranTank();
            tank.SiegeMode();
            tank.Move();
            tank.TankMode();
            tank.Move();
        }
        //기능
    }
}

3. TerranTank 클래스

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

namespace LearnDotnet
{
    //열거형식
    enum eState
    {
        TankMode,
        SiegeMode
    }
    internal class TerranTank
    {
        //멤버변수 (데이터)
        int hp;
        int maxHp = 150;
        int tankDamage = 30;
        int siegeDamage = 70;
        int armor = 1;
        eState state;

        //생성자 메서드
        public TerranTank()
        {
            state = eState.TankMode;
            hp = maxHp;
            Console.WriteLine("시즈탱크가 생성되었습니다.");
            Console.WriteLine("체력 : {0}/{1}", hp, maxHp);
            Console.WriteLine("공격력 : {0} / {1}", tankDamage, siegeDamage);
            Console.WriteLine("방어력 : {0}", armor);
            Console.WriteLine("현재 TankMode 입니다.\n");
        }
        //멤버 메서드 (기능)
        public void Move()
        {
            if (state == eState.SiegeMode)
            {
                Console.WriteLine("SiegeMode에서는 이동할 수 없습니다.\n");
            }

            if(state == eState.TankMode)
            {
                Console.WriteLine("이동했습니다.\n");
            }
        }
        public void TankMode()
        {
            Console.WriteLine("모드를 변경했습니다 SiegeMode > TankMode ");
            Console.WriteLine("공격력 {0} > {1} 변경되었습니다", siegeDamage, tankDamage);
            Console.WriteLine("현재 TankMode 입니다.");
            state = eState.TankMode;
        }
        public void SiegeMode()
        {
            Console.WriteLine("모드를 변경했습니다 TankMode > SiegeMode");
            Console.WriteLine("공격력 {0} > {1} 변경되었습니다", tankDamage, siegeDamage);
            Console.WriteLine("현재 SiegeMode 입니다.");
            state = eState.SiegeMode;
        }
    }
}