EasyCastleUNITY

스타크래프트 테란 커맨드센터/SCV/SiezeTank(OOP 및 클래스 연습) 본문

C#프로그래밍

스타크래프트 테란 커맨드센터/SCV/SiezeTank(OOP 및 클래스 연습)

EasyCastleT 2023. 7. 21. 13:20

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 maxHp = 1500;
        int hp;
        eState state; //상태 
        //생성자 메서드
        public TerranCommandCenter()
        {
            state = eState.Land;
            hp = maxHp;
            Console.WriteLine("커맨드 센터가 생성되었습니다.({0}/{1})",this.hp,this.maxHp);
            Console.WriteLine("state: {0}", state);
            Console.WriteLine("--------------");
        }

        //멤버 메서드(기능)
        public void Liftoff()
        {
            if (state == eState.Land)
            {
                Console.WriteLine("커맨드 센터가 올라갑니다.");
                state = eState.Liftoff;
            }
            else
            {
                Console.WriteLine("커맨드 센터가 올라갈수 없습니다.");
            }
        }

        public void Land()
        {
            if (state == eState.Liftoff)
            {
                Console.WriteLine("커맨드 센터가 내려왔습니다.");
                state = eState.Land;
            }
            else
            {
                Console.WriteLine("커맨드 센터가 내려갈수 없습니다.");
            }
           
        }
    }
}

TerranSCV

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

namespace LearnDotnet
{
    internal class TerranSCV
    {
        //멤버 변수(데이터)
        int maxHp = 60;
        int hp;
        int damage ;
        int armor ;
        //생성자 메서드
        public TerranSCV()
        {
            hp = maxHp;
            damage = 6;
            armor = 0;
            Console.WriteLine("SCV가 생성되었습니다.");
            Console.WriteLine("체력: {0}/{1}", hp, maxHp);
            Console.WriteLine("공격력:{0}",damage);
            Console.WriteLine("방어력:{0}",armor);
            Console.WriteLine("--------------");
        }

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

TerranSiegeTank

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

namespace LearnDotnet
{
    internal class TerranSiegeTank
    {
        enum eState
        {
            TankMode,SiezeMode
        }
        //멤버 변수(데이터)
        int maxHp = 150;
        int hp;
        int siezeAttack = 70;
        int tankAttack = 30;
        int tankDamage;
        eState state;
        //생성자
        public TerranSiegeTank()
        {
            state= eState.TankMode;
            hp = maxHp;
            tankDamage = tankAttack;
            Console.WriteLine("시즈탱크가 생성되었습니다 ({0}/{1}) 현재 공격력:{2}",hp,maxHp,tankDamage);
            Console.WriteLine("현재 {0} 입니다.",state);
            Console.WriteLine("--------------");
        }
        //멤버 메서드
        public void Move()
        {
            if (state == eState.TankMode)
            {
                Console.WriteLine("시즈 탱크가 이동했습니다.");
            }
            else
            {
                Console.WriteLine("{0}에서는 이동할 수 없습니다.",eState.SiezeMode);
            }
           
        }
        public void ChangeToSeizeMode()
        {
            state = eState.SiezeMode;
            tankDamage = siezeAttack;
            Console.WriteLine("모드를 변경했습니다. {0} -> {1}", eState.TankMode, eState.SiezeMode);
            Console.WriteLine("공격력 {0} -> {1} 변경되었습니다.", tankAttack, siezeAttack);
            Console.WriteLine("현재 {0} 입니다.", state);
        }

        public void ChangeToTankMode()
        {
            state = eState.TankMode;
            tankDamage = tankAttack;
            Console.WriteLine("모드를 변경했습니다. {1} -> {0}", eState.TankMode, eState.SiezeMode);
            Console.WriteLine("공격력 {1} -> {0} 변경되었습니다.", tankAttack, siezeAttack);
            Console.WriteLine("현재 {0} 입니다.", state);
        }
    }
}

App

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

namespace LearnDotnet
{
    internal class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("================커맨드센터 출력====================");
            TerranCommandCenter terranCommandCenter = new TerranCommandCenter();
            terranCommandCenter.Liftoff();
            terranCommandCenter.Liftoff();
            terranCommandCenter.Land();
            terranCommandCenter.Land();
            terranCommandCenter.Land();
            Console.WriteLine("================SCV 출력====================");
            TerranSCV terranSCV = new TerranSCV();
            terranSCV.Move();
            Console.WriteLine("================SiegeTank 출력====================");
            TerranSiegeTank terranSiegeTank = new TerranSiegeTank();
            terranSiegeTank.ChangeToSeizeMode();
            terranSiegeTank.Move();
            terranSiegeTank.ChangeToTankMode();
            terranSiegeTank.Move();
            Console.WriteLine("--------------");
        }
    }
}

Program

using System;

namespace LearnDotnet
{
 
    internal class Program
    {
        static void Main(string[] args)
        {
            new App(); //new: 클래스의 인스턴스를 생성하고 생성자를 호출
            
        }
       
        //매개변수를 받는 메서드

        //매개변수를 받고 값을 반환하는 메서드

        //매개변수가 없지만 값을 반환하는 메서드
    }
}

결과