티스토리 뷰

C#/복습

클래스 연습

Game Client Lee Hwanguk 2023. 1. 14. 03:57

#1 벌쳐와 마인. 벌쳐 인스턴스와 마인 인스턴스를 만들고 마인이설치되면 수가 줄어든다

#mine이 null이 아니라면 설치 후 null로 바꿔준다

#vulture에 있는 mine은 메서드가 실행될때마다 null로 바뀐다, 모두 null이면 else문 실행

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

namespace Practice02
{
    class App //#클래스연습1 Vulture 와 SpiderMine 
    {
        //맴버변수
        


        public App()
        {
            Vulture vulture=new Vulture("벌쳐 1호기"); //벌처는 마인을 심을수있다(메서드 InstallMine) 
            SpiderMine mine0 = new SpiderMine();
            SpiderMine mine1 = new SpiderMine();
            SpiderMine mine2 = new SpiderMine();
            vulture.mine0 = mine0;
            vulture.mine1 = mine1;
            vulture.mine2 = mine2;
            vulture.InstallMine(); //2/3
            vulture.InstallMine(); //1/3
            vulture.InstallMine(); //0/3
            vulture.InstallMine(); //-1/3 -> x

        }





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

namespace Practice02
{
    internal class Vulture
    {
        public SpiderMine mine0;
        public SpiderMine mine1;
        public SpiderMine mine2;

        public int mineCount; //null check
        public int mineMaxCount = 3;
        public Vulture(string name) 
        {
            mineCount = mineMaxCount; //벌쳐는 마인을 최대 갯수를 가지고 태어난다
            Console.WriteLine("{0}이(가) 생성되었습니다.",name);
            Console.WriteLine("마인을 {0}/{0} 가지고있습니다",mineMaxCount);

            
        }

        public void InstallMine()
        {
            
                if (mine0 != null)
                {
                    mine0 = null;
                    this.mineCount--;
                Console.WriteLine("마인을 설치했다. {0}/{1}", mineCount, mineMaxCount);

                }
                else if (mine1 != null)
                {
                    mine1 = null;
                    this.mineCount--;

                Console.WriteLine("마인을 설치했다. {0}/{1}", mineCount, mineMaxCount);
                }
                else if (mine2 != null)
                {
                    mine2= null;
                    this.mineCount--;
                    
                    Console.WriteLine("마인을 설치했다. {0}/{1}", mineCount, mineMaxCount);
                }
            else { Console.WriteLine("마인이 없습니다."); }
            
            
            
        }
    }
}

#2 마린 두마리의 전투

#메서드 안에 메서드(this. 과 target, 을 잘봐야한다)

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

namespace Practice02
{
    class App //#클래스연습2 매개변수가 있는 클래스(마린 두마리의 전투) 
    {
        //맴버변수
        


        public App()
        {
            Marine marine0=new Marine("이환국",50,6); //마린0 생성(name: "이환국" hp:50 damage:6)
            Marine marine1=new Marine("김동준",55,5); //마린1 생성(name: "김동준" hp:55 damage:5)

            marine0.Attack(marine1);
            marine1.Attack(marine0);
        }





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

namespace Practice02
{
    internal class Marine
    {
        public string name;
        public int hp;
        public int damage;
        public int maxHp;
        public Marine(string name,int hp,int damage) 
        {
            this.maxHp = hp;
            this.name = name;
            this.hp = hp;
            this.damage = damage;
            Console.WriteLine("name:{0} hp:{1}/{2} damage:{3}",name,hp,maxHp,damage);
        }
        public void Attack(Marine target)
        {
            Console.WriteLine("{0}이 {1}에게 {2}의 공격을 했다",this.name,target.name,this.damage);
            
            target.Hit(this.damage);
        }
        void Hit(int damage)
        {
            this.hp = hp - damage;
            Console.WriteLine("{0}의 체력 {1}/{2}",this.name,this.hp,maxHp);
            Console.WriteLine();
            
        }
        
    }
}

#Medic을 추가해서 Heal 메서드를 사용해보자 (Heal 을하면 medicMp가 감소한다)

#예외사항 처리 , healTarget의 hp가 maxHp보다 많으면 치료불가

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

namespace Practice02
{
    class App //#클래스연습2_1 매개변수가 있는 클래스(마린 두마리의 전투) , 메딕이 치료한다
    {
        //맴버변수
        


        public App()
        {
            Marine marine0=new Marine("이환국",50,6); //마린0 생성(name: "이환국" hp:50 damage:6)
            Marine marine1=new Marine("김동준",55,5); //마린1 생성(name: "김동준" hp:55 damage:5)

            marine0.Attack(marine1);
            marine1.Attack(marine0);

            Medic medic0 = new Medic("메딕",4.21f,50);
            medic0.Heal(marine1); //김동준 치료
            medic0.Heal(marine0); //이환국 치료
            medic0.Heal(marine0);
            medic0.Heal(marine0); //치료 불가
            medic0.Heal(marine0); //치료 불가
        }





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

namespace Practice02
{
    internal class Medic
    {
        public string name;
        public float medicHeal;
        public int medicMp;
        public int medicMaxMp=150;
        public Medic(string name, float medicHeal, int medicMp)
        {
            this.name = name;
            this.medicHeal = medicHeal;
            this.medicMp = medicMp;
            Console.WriteLine("{0}이 생성되었습니다. {1}/{2}",this.name,this.medicMp,this.medicMaxMp);
        }

        //예외사항 처리 , 1. 마린의 체력이 꽉차면 치료불가 
        public void Heal(Marine healTarget)
        {
            healTarget.hp=healTarget.hp+(int)this.medicHeal; //int와 float은 산술연산이 안된다 float을 (int) 명시적 변환필요
            if(healTarget.maxHp>= healTarget.hp) 
            {
                Console.WriteLine("{0}을 치료했습니다.{1}/{2}", healTarget.name, healTarget.hp, healTarget.maxHp);
                Console.WriteLine();
                MedicMp();
            }
            else
            {
                Console.WriteLine("더이상 치료할수 없다.");
            }

        }

        public void MedicMp()
        {
            this.medicMp = medicMp - 5; //메딕이 치료할때마다 5의 mp가 소모된다
            Console.WriteLine("{0}은 치료를하고 에너지가 {1}/{2}남았다",this.name,this.medicMp,this.medicMaxMp);
        }
    }
}

#처음 맴버변수, 지역변수 에 무엇을 넣을지가 중요하다

#어떤 변수를 변하게 하고 어떤 변수를 변하지않게할지

 

#3 시즈탱크의 공성모드,탱크모드(열거형식에 seigetankMode)를 넣고 활용해보자

# 공성모드(seigemode)일때 공격력 70, 이동 불가

#탱크모드(tank)일때 공격력 30,이동 가능

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

namespace Practice02
{
    internal class SeigeTank
    {
        enum ModeType
        {
            SEIGEMODE,
            TANKMODE
        }
        ModeType mode;
        public int damage = 30;
        public SeigeTank()
        {
            this.mode = ModeType.TANKMODE; //TANKMODE로 태어난다
            Console.WriteLine("시즈탱크 생성 Mode:{0}.damage:{1}",this.mode ,this.damage);
        }

        public void ChangeMode() //TANKMODE ->SEIGEMODE로 바꿔본다 (damage변경)
        {
            if (this.mode == ModeType.TANKMODE)
            {
                this.mode = ModeType.SEIGEMODE;
                this.damage = 70;
            }
            else
            {
                this.mode = ModeType.TANKMODE;
                this.damage = 30;
                
            }
            Console.WriteLine("Mode:{0} damage{1}", mode, damage);
        }

        public void Move()
        {
            if (this.mode == ModeType.TANKMODE)
            {
                Console.WriteLine("이동합니다");
            }
            else
            {
                Console.WriteLine("이동 불가");
            }

        }

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

namespace Practice02
{
    class App //#클래스연습3 seigeTank의 공성모드(seigeMode), 탱크모드(tankMode) enum 사용 
    {
        public App()
        {
            SeigeTank seigeTank=new SeigeTank();
            seigeTank.ChangeMode(); //TANK ->SEIGEMODE
            seigeTank.Move(); //이동불가
            seigeTank.ChangeMode(); //SEIGEMODE->TANK
            seigeTank.Move(); //이동가능
            

        }

    }
}

 

'C# > 복습' 카테고리의 다른 글

배열  (0) 2023.01.15
switch, while반복문,상속  (0) 2023.01.14
메서드 연습(맴버변수와 지역변수)  (0) 2023.01.14
1.13,14,15일 2주차 복습  (0) 2023.01.14
직렬화/역직렬화 연습  (0) 2023.01.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함