void, 메서드 매개변수, 생성자 연습
2023. 7. 21.

void - 메서드가 값을 반환하지 않도록 지정

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

namespace Starcraft
{
    internal class BreadMachine
    {
        private string serialNumber;

        //생성자
        public BreadMachine(string serialNumber) //매개변수는 지역변수다.->
            //메서드 호출이 끝나면 사라진다.
        {
            this.serialNumber = serialNumber;//this - >멤버에 접근할 수 있다.
            Console.WriteLine("빵기계가 생성되었습니다. {0}", serialNumber);

        }

        //멤버 메서드
        public Bread MakeBread(string ingredientName)
        {
            Console.WriteLine("{0}로 빵을 만듭니다~.", ingredientName);
           return new Bread(); //값 (Bread 클래스의 인스턴스)
        }


        //반환값만 있는 메서드
        //시리얼 넘버만 반환
        public string GetSerialNumber()
        {
            //반환값
            return this.serialNumber;
        }

    }
}

BreadMachine.cs

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

namespace Starcraft
{
    internal class App
    {
        public App()
        {
            BreadMachine machine1 = new BreadMachine("6a199236-c5bb-478b-9946-6db75ee75cd3");
            Console.WriteLine("machine1.serialNumber: {0}", machine1.GetSerialNumber());
            //machine1.MakeBread("밀가루");
            Bread bread = machine1.MakeBread("쌀가루");
            Console.WriteLine(bread); //Bread 클래스의 인스턴스 출력
            //machine1.MakeBread("쌀가루");
            //BreadMachine machine2 = new BreadMachine("5bcbb381-19f2-4d48-84f8-6340bc35e49e");
            //Console.WriteLine("machine2.serialNumber: {0}", machine2.serialNumber);}

        }
    }

 }

App.cs

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

namespace Starcraft
{
    internal class Bread
    {
        //생성자
        public Bread()
        {
            Console.WriteLine("빵이 생성 되었습니다요");
        }
    }
}

Bread.cs

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

namespace Starcraft
{
    internal class Player
    {
        //멤버 변수
        public string playerName;
        int playerAttackDamage = 100;//플레이어의 기본 공격력은 100.
        Weapon weapon;
        Monster monster;
        int gold = 500;

        //생성자
        public Player(string playerName)
        {
            this.playerName = playerName;//this로 private로 저장된 멤버변수에 접근     
            Console.WriteLine("플레이어 ({0})가 생성되었습니다.(공격력: {1})\n", playerName, playerAttackDamage);
        }

        //멤버 메서드
        //   Monster가 대상으로 들어가야함: Monster클래스 사용
        //   (타입 변수)꼴.
        public void Attack(Monster monster)
        {
            this.monster = monster;
            //대상을 공격한다.
            //monster.hitDamage += playerAttackDamage;
            monster.HitDamage(this.playerAttackDamage);

            Console.WriteLine("{0}이 {1}을 공격했습니다.", playerName, monster.monsterName);
            Console.WriteLine("데미지: {0}, 몬스터 체력: {1}/{2}\n", playerAttackDamage, monster.hp, monster.maxHp);
        }

        public void Equip(Weapon weapon)//weapon을 착용하기위해 Weapon 클래스 사용.
        {
            this.weapon = weapon; //멤버 변수에 저장
            playerAttackDamage += weapon.weaponAttackDamage;
            gold -= weapon.price;
            Console.WriteLine("{0}이 {1}를 착용했습니다.(공격력 +{2},현재 공격력: {3}, 골드 -{4})\n", playerName, weapon.weaponType,weapon.weaponAttackDamage,playerAttackDamage,weapon.price);
        }

        public void UnEquip()
        {
            playerAttackDamage -= weapon.weaponAttackDamage;           
            Console.WriteLine("{0}이 장비를 제거했습니다.(공격력 -{1})\n", playerName, weapon.weaponAttackDamage);
            this.weapon = null;
            
        }
        public void showState()
        {   
            Console.WriteLine("{0}의 공격력: {1}, 소지 골드: {2}\n",playerName, playerAttackDamage,gold);
        }

    }
}

Player.cs

 

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

namespace Starcraft
{
    internal class Weapon
    {
       public enum eWeaponType
        {
            AXE = 200,
            SWORD = 300
        }
        //멤버 변수
        public eWeaponType weaponType;
        public int weaponAttackDamage;
        public int price;
       // eWeaponType weaponType = eWeaponType.AXE;
       
        
        //생성자
        public Weapon(eWeaponType weaponType,int weaponAttackDamage) {
            this.weaponAttackDamage = weaponAttackDamage;
            this.weaponType = weaponType;
            //damage = 50;
            // price = 200;
            price = (int)weaponType; //가격을 저장.
            Console.WriteLine("무기({0})가 생성되었습니다.\n",weaponType);
        }
    }
}

Weapon.cs

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

namespace Starcraft
{
    internal class Monster
    {
        //멤버 변수
        public string monsterName;

        public int hp;
        public int maxHp;

        //생성자
        public Monster(string monsterName, int maxHp)
        {
            this.monsterName = monsterName;
            
            this.maxHp = maxHp;
            this.hp = this.maxHp;


            Console.WriteLine("몬스터({0})가 생성되었습니다.\n", this.monsterName);
        }

        public void HitDamage(int damage) {
            this.hp -= damage;

        }

    }
}

Monster.cs

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

namespace Starcraft
{
    internal class App
    {
        public App()
        {
            //    BreadMachine machine1 = new BreadMachine("6a199236-c5bb-478b-9946-6db75ee75cd3");
            //    Console.WriteLine("machine1.serialNumber: {0}", machine1.GetSerialNumber());
            //machine1.MakeBread("밀가루");
            //    Bread bread = machine1.MakeBread("쌀가루");
            //    Console.WriteLine(bread); //Bread 클래스의 인스턴스 출력
            Weapon weapon = new Weapon(Weapon.eWeaponType.AXE,50);//공격력을 50추가시켜주는 무기 weapon 생성
            Weapon weapon2 = new Weapon(Weapon.eWeaponType.SWORD, 100);
            Player player1 = new Player("홍길동");//이름이 홍길동인 player 생성
            //player1.showState();
            Monster monster1 = new Monster("고블린", 300);//이름이 고블린, 체력이 300인 monster 생성
            player1.Equip(weapon);
            //  Console.WriteLine("{0}이 {1}를 착용했습니다.",player1.playerName,weapon.);
            player1.showState();//장비 착용 후 player1 상태 확인
            player1.Attack(monster1);
            //  Console.WriteLine("{0}이 {1}을 공격했습니다.",player1.playerName,monster1.monsterName);
            player1.UnEquip();
            player1.showState();
            player1.Equip(weapon2);
            player1.showState();

        }
    }

 }

App.cs

myoskin