일단 아이템코드는 그대로 들고오도록 하겠다.
코드의 가독성을 위해 이번에는 class를 통해 만들어진 아이템을 dictionary에 집어 넣는 방식으로 하겠다.
이렇게하면 장점은
KEY(코드) | 이름 | 성능 | 묘사 | 가격 |
과 같이 Key하나에 모든 아이템의 정보를 쑤셔넣을 수 있게 된다.
모든 키는 중복 되지 않으므로 키를 통해 모든 정보에 접근할 수 있게되는 장점이 있다.
그리고 아이템 클래스에 정보 출력을 넣어주면 인벤토리에서 일일히 열고 상점에서 일일히 열 필요가 없을 것이다.
과감하게 상점이랑 플레이어 클래스의 일부분을 삭제하고
다시 작성해보자.
public Dictionary<int, Item> ItemCode()
{
Dictionary<int, Item> itemcode = new Dictionary<int, Item>();
Item woodenSword = new Item();
woodenSword.name = "목검";
woodenSword.damage = 5;
woodenSword.price = 300;
woodenSword.description = "오래된 목검이다. 없는 것보단 낫다.";
itemcode.Add(101, woodenSword);
Item axe = new Item();
axe.name = "벌목도끼";
axe.damage = 10;
axe.price = 500;
axe.description = "날이 잘 서있는 도끼다.";
itemcode.Add(102, axe);
.
.
.
itemcode.Add(112, goldRing);
return itemcode;
}
ItemCode라는 이름의 Dictionary를 생성해주고 만들어진 item들을 키와 함께 저장해서 바깥으로 돌려주겠다.
게임 실행 시 한 번 불러와주는 것만으로도 게임내에서 해당 itemcode에 접근하는 효과를 낼 것이다.
테스트 해보자.
Item item = new Item();
Dictionary<int, Item> ItemCode = item.ItemCode();
foreach (KeyValuePair<int,Item> pair in ItemCode)
{
Console.WriteLine(pair.Key + pair.Value.name);
}
메인 함수에 다음과 같이 입력하고 실행해보면?
108번이 비어있다.
왜지
Item letherHelmet = new Item();
leatherArmor.name = "가죽 투구";
leatherArmor.defense = 3;
leatherArmor.price = 400;
leatherArmor.description = "통풍이 되지 않아 쓰고 있으면 덥다.";
itemcode.Add(108, letherHelmet);
정작 108번은 잘 작성되어있다.
해당 Item의 다른 부분에 접근해도 같은 현상이 발생 중이다.
다른 item과 키 값을 바꿔봤는데도 가죽투구만 문제가 발생 중이다.
아 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
108번은 잘 작성되어있지 않다!!!!!!
이름은 leatherHelmet인데 왜 아래에는 leatherArmor로 작성되어있지...
바꿔주자.
이제 잘 작동한다.
게임진행은 일단
인트로 (캐릭터 이름과 직업 Get) > 마을진입 (이동(여관,상점,던전)) > 각 장소의 상호작용
status와 Inventory의 접근은 항상 가능
status는 1회 표시 후 추가 접근 내용 없음
Inventory 접근 시 장착 관리로 접근하여 아이템의 장착 및 해제
순으로 진행될 것 같다.
상점을 구현해보자.
public class Shop
{
public Dictionary<int,Item> SellList = new Dictionary<int,Item>();
public Shop(Dictionary<int,Item> ItemList)
{
Dictionary<int,Item> SellList = ItemList;
}
}
상점은 우선 게임에 올라온 아이템코드를 받아와서 시작하자.
public void Info(Item i)
{
Console.Write($"{i.name} | ");
if(i.damage > 0)
{
Console.Write($"{i.damage} | ");
}
if(i.defense > 0)
{
Console.Write($"{i.defense} | ");
}
Console.Write($"{i.description} | ");
if (i.isSold == false)
{
Console.WriteLine($"{i.price}");
}
else Console.WriteLine("이미 구매한 상품입니다.");
}
Item 클래스 내부에서 Info함수를 통해 실행 시 내용을 실행해주는 함수를 만들고
실행해보면?
잘 실행 되는 것을 볼 수 있다.
한 번에 여러기능을 생각하다보니까 머리가 너무 어지럽다... 오늘은 여기까지만 하고 내일 이어서 해보자..
0924 TIL - Re: C#으로 Text RPG 만들기 3 (0) | 2024.09.24 |
---|---|
0923 TIL - Re: C#으로 Text RPG 만들기 2 (1) | 2024.09.24 |
0920 TIL - C#으로 텍스트 게임 만들기 1 (0) | 2024.09.20 |
0919 TIL - C# 기초 문법 심화2 (4) | 2024.09.19 |
0913 TIL - C# 기초 문법 심화 (2) | 2024.09.13 |