void, 메서드 매개변수, 생성자 연습
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
'C# 기초' 카테고리의 다른 글
구조체, 추상 클래스, 인터페이스, 1차원 배열 (0) | 2023.07.24 |
---|---|
상속, virtual, override, overload, 연결(chaining), casting (0) | 2023.07.24 |
switch문, 생성자 연습+예제 (0) | 2023.07.21 |
for문 연습문제 나머지(5~14)+도전문제 (0) | 2023.07.20 |
비교 연산자, if문, for문 (0) | 2023.07.20 |