https://record5555.tistory.com/19
Day14 - Class 1,2,3단계
과제 1) 클래스 생성 실습새로운 cs파일을 하나 생성 합니다. 그 속에 Car라는 클래스를 만든 후,필드로 문자열 차이름,정수형 자동차 넘버,정수형 자동차 체력internal class Car{ //다른 class에서 참조
record5555.tistory.com
심화 과제
- 위 몬스터 클래스를 지우지 말고 추가로 별도의 cs를 새로 만들고 Item이라는 클래스를 따로 제작.
- 필드형으로는 ???형 아이템 이름
- ??형 아이템타입
- ??? 형 가격
internal class Item
{
public string ItemName;
public string ItemType;
public int ItemPrice;
}
- 이어서 Inventory라는 클래스를 새로운 cs 시트에 제작,
- 필드로 아이템 배열을 가지게 함
- 추가적인 필드가 필요하면 생성
- 이 클래스 내에 네가지 메소드 제작.
- 첫번째 메서드명은 CreateInvenBySize에 인자값은 정수형 하나. 넘어온 인자값에 따라 아이템 배열을 할당해주고, 인자값만큼 인벤토리가 만들어졌다고 출력하는 기능 제작.
- 두번째 메서드로는 반환값으로는 bool형, 함수명은 isInvenCreated, 함수 내용은 아이템배열이 0보다 작거나 null일 경우 false, 존재한다면 true반환
- 세번째 함수는 GetItemByIndex, 리턴값은 아이템. 함수 구현사항으로는 아이템 배열 중, 해당 인자값 위치의 아이템 반환하거나 비어있을 경우, null을 반환함과 동시에 비어있음 출력, 인자값은 정수형 인덱스,
- 마지막 함수 이름은 SetItemByIndex, 반환형은 없고 인자값은 인트형 인덱스와 Item형 하나를 받는 함수 제작. 인자값으로 받은 숫자의 인덱스에 인자값으로 받은 아이템을 집어 넣는 코드 작성
internal class Inventory
{
public Item item;
public Item[] ItemInventory;
//배열의 크기 입력
public void CreateInvenBySize(int ArrSize)
{
ItemInventory = new Item[ArrSize];
Console.WriteLine("{0}만큼 인벤토리 만들어짐", ArrSize);
}
//배열 생성 여부 확인
public bool isInvenCreated(Item[] ItemInventory)
{
if (ItemInventory == null|| ItemInventory.Length < 0)
{
return false;
}
return true;
}
//배열 반환
public Item GetItemByIndex(int index)
{
if (ItemInventory[index] == null)
{
Console.WriteLine("비어있음");
return null;
}
return ItemInventory[index];
}
//배열 값에 item 대입
public void SetItemByIndex(int index, Item item)
{
ItemInventory[index] = item;
}
}
- Player라는 클래스를 새로운 cs에 만듭니다
- 필드로 문자열형 이름, 정수형 HP, 정수형 공격력, 구조체 좌표(short형 x와 short형 y 두가지를 보유한 구조체), Inventory클래스로 만든 객체 하나를 보유하게 만듦.
- MakeInven의 이름으로 인벤토리를 뉴할당시키는 함수 하나 제작, 프로퍼티를 통해 인벤토리를 get하는 기능 제작
internal class Player
{
public string PlayerName;
int PlayerHp;
int PlayerPower;
Inventory inventory;
//new 할당
public void MakeInven()
{
inventory = new Inventory();
}
//프로퍼티
public Inventory inven
{
get
{
return inventory;
}
}
}
다른 class에서 참조 하기 힘들게 프로퍼티를 통해 만들었다.
- main에서 플레이어 객체를 하나 만든 후, 플레이어의 함수를 통해 인벤토리를 활성화 하자. 다음엔 플레이어 속의 프로퍼티 인벤을 통해 인벤토리 클래스 속의 CreateInvenBySize함수를 통해 원하는 만큼의 아이템배열을 만든 후, 본인이 원하는 특정 위치에 아이템을 하나 만들어 넣도록 하자. 플레이어 속 혹은 인벤토리 속 다양한 함수를 직접 확인해 볼 수 있는 코드들을 메인에 적도록 하자.
static void Main(string[] args)
{
//item 값 대입
Item item = new Item();
item.ItemName = "집행검";
item.ItemPrice = 2500;
item.ItemType = "양손검";
Item item1 = new Item();
item.ItemName = "앨리스";
item.ItemPrice = 2000;
item.ItemType = "양손검";
Player player = new Player();
//new 할당
player.MakeInven();
//5칸 크기의 배열 생성
player.inven.CreateInvenBySize(5);
//ItemInventory[3] = item
player.inven.SetItemByIndex(3, item);
//ItemInventory[2] = item
player.inven.SetItemByIndex(2, item);
}
}
위에서 만든 Player 클래스 속의 hp와 데미지를 프로퍼티로 바꾸자. 메인을 싹 비우고, 플레이어 객체 하나와 몬스터 객체를 하나 만든 후, 몬스터에는 체력 100, 공격력 10을 넣어주자. 플레이어는 체력200, 공격력 20을 주어준 후, 각각의 HP와 공격을 get과 set을 활용하여 플레이어가 본인의 공격력을 활용해 몹을 한대 때려서 체력을 깎는 것을 출력하여보자. 객체를 만든 후 모든 공격과 체력이 닳는 과정은 메인서 콘솔로 출력해도 좋다
static void Main(string[] args)
{
Player player = new Player();
Monster monster = new Monster();
monster.MonsterPowerPro = 10;
monster.MonsterHpPro = 100;
player.PlayerHpPro = 200;
player.PlayerPowerPro = 20;
monster.AttackPlayer(player);
}
}
internal class Monster
{
~
~
~
//기존에 있던 함수
public void AttackCar(Car car)
{
car.CarHp = car.CarHp - MonsterPower;
Console.WriteLine("{0}만큼의 데미지를 {1}에 주었습니다", MonsterPower,car.CarName);
}
//기존에 있던 함수를 변수만 바꿔서 만듦
public void AttackPlayer(Player player)
{
MonsterHpPro = MonsterHpPro - player.PlayerPowerPro;
Console.WriteLine("몬스터에게 {0}만큼의 데미지를 줘서 몬스터의 hp가 {1}되었씁니다", player.PlayerPowerPro, MonsterHpPro);
}
}
'과제' 카테고리의 다른 글
Day15 - 오버로딩 심화 (1) | 2024.12.10 |
---|---|
Day15 - 오버로딩 1,2,3단계 (0) | 2024.12.10 |
Day14 - Class 1,2,3단계 (0) | 2024.12.09 |
콘솔 섯다 만들기(C#) 12/3~12/5 (1) | 2024.12.05 |
Day8 - 함수, 피보나치 수열 (0) | 2024.11.29 |