박민혁의 개발
우당탕쿵탕 text rpg 마무리 본문
겪은 문제
- enum 사용해보기
public enum ItemPlace
{
inventory = 1,
shop,
}
// 소유를구별하기 위해 아이템위치를 만들어줌 그러나 enum선언위치를 프로그램 네에 하여
//메인 제외에선 1 2 로 사용 오히려 도움이안된 케이스
아이템 구현과 배열
public void SellBuy(Item Item, int number, List<Item> inventorylist) //판매/구매
{
if (Item.checkE) //아이템의장착 여부 확인
{
Console.WriteLine("장착중입니다");
Console.WriteLine("");
Console.Write(">>확인");
Console.Read();
}
else//보유시 판매를 미보유시 구매를
{
if (ItemPlace == 1)//보유
{ //무한으로 판매되는 버그가 있었으나 고쳐짐 아마 리스트로 옮겨보려는 시도중 발생한것으로 추정되며 포기했다
inventory.Remove(Item.Code);// 딕셔너리로 만들어져있기에 키값으로 제거해줌 키값을 코드로 넣어서 코드 값으로 지운다
// 허나 리스트 였다면 밸류에서 코드값으로 바꿀수 있었겠지.
//inventorylist.Remove(Item);
player.Gold += Item.Gold / 2;
Console.WriteLine($"{Item.Name}을 판매하여 {Item.Gold / 2}원을 획득하였습니다. ");
Console.WriteLine($"{player.Gold}을 보유중 입니다.");
//Console.WriteLine("{0}",Item.ItemPlace);
Console.WriteLine("");
Console.Write(">>확인");
Console.Read();
Item.ItemPlace = 2;
//Console.WriteLine("{0}", Item.ItemPlace);
}
아이템 배열 본문편
//내가 아이템 배열 관리를 어떻게 했는가?
Item item1 = new Item("낡은 검 ", 2, 0, 0, (int)ItemType.weapon, "Atk +2", "칼이라기 보단 몽둥이에 가까운 검", (int)ItemPlace.inventory, 10,1);
Item item2 = new Item("무쇠 갑옷 ", 0, 5, 0, (int)ItemType.body, "Def +5", "무쇠로 만들어져 튼튼한 갑옷", (int)ItemPlace.inventory, 10,2);
Item item3 = new Item("투구", 0, 0, 0, (int)ItemType.head, "Def +5", "그냥 흔한 투구", (int)ItemPlace.shop, 50,3);
Item item4 = new Item("버거운 중갑 ", 0, 30, -30, (int)ItemType.body, "Def +50 Hp-30", "그 갑옷은 갑옷이라기엔 너무 커다랬다", (int)ItemPlace.shop, 50,4);
//기본 아이템은 인벤토리에만 넣어주고 상점에선팔기를 위해 소유중인 아이템도 넣어준다
inventory.Add(1, item1);
inventory.Add(2, item2);
shop.Add(1, item1);
shop.Add(2, item2);
shop.Add(3, item3);
shop.Add(4, item4);
숫자 입력받기 -재귀 함수
상당히 맘에듬 허나 버그가 발생해서 그만
static int CheckNumber(int big)
{
string input = Console.ReadLine();
int number;
while (!int.TryParse(input, out number))
{
Console.WriteLine("범위에 맞는 '숫자'를 입력해주세요.");
input = Console.ReadLine();
}
// 위에 까지는 흔히 문자 제외 받는 구성 이였으나
//그렇다면 1까지 선택지가 있으면 어떻게 하지? 란생각에 아래가 추가됨
//while (number >= big)
//{
// Console.WriteLine("범위 외의 숫자");
// number = CheckNumber(big); // 범위 외에 숫자일시 재귀를 통해 다시한번 입력 받을수 있음
//}
return number;
}
딕셔너리와 for foreach문
private static void ShopShow(Dictionary<int, Item> shop, List<Item> inventorylist)
{
//for (int i = 1; i < inventory.Count+1; i++)
//{
// Console.WriteLine( "이름{0} 효과 {1} 설명{2}", item[i].Name, item[i].Effect , item[i].Speedweagun);
//}
Console.Clear();
Console.WriteLine("아이템목록입니다. ");
Console.WriteLine("판매시 구매 가격의 50%로 구매해드립니다. ");
Console.WriteLine();
Console.WriteLine("0. 나가기");
//for (int i = 1; i < shop.Count + 1; i++) // 깨달음의 흔적 딕셔너리는 키값으로 받기에 for문 사용시 키값 1 키값 3은 존재하나 키값2는 존재하지 않을시 버그 발생
//{
// Console.WriteLine("{0}. {1} 구매 / 판매", i, shop[i].Name);
// }
foreach (KeyValuePair<int, Item> item2 in shop)
{
if (item2.Value.ItemPlace == 1)//보유체크
{
Console.Write("[보유]");
}
else
{
Console.Write("[미보유]");
}
Console.WriteLine("{0}. {1} {2} {3} {4}G 구매 / 판매",item2.Value.Code, item2.Value.Name.PadRight(20 - item2.Value.Name.Length), item2.Value.Effect.PadRight(30 - item2.Value.Effect.Length), item2.Value.Speedweagun.PadRight(60 - item2.Value.Speedweagun.Length),item2.Value.Gold);
}
정렬 실패
foreach (KeyValuePair<int, Item> item2 in item)
{
Console.WriteLine("{0}. {1} {2} {3} 장착/해제", item2.Value.Code, item2.Value.Name.PadRight(20- item2.Value.Name.Length), item2.Value.Effect.PadRight(30- item2.Value.Effect.Length), item2.Value.Speedweagun.PadRight(40-item2.Value.Speedweagun.Length));
// 결국 스페이스바 와 일반 글자의 크기 조절을 못해 반쪽짜리 정렬이 구현됨
}
후기
구현 목표
1. 게임 시작 화면
2. 상태보기
3. 인벤토리
4. 아이템 정보를 클래스 / 구조체로 활용해 보기
5. 아이템 정보를 배열로 관리하기
6. 아이템 추가하기
7. 콘솔 꾸미기
8. 인벤토리 크기 맞춤
9. 인벤토리 정렬하기
10. 상점 - 아이템 구매
10. - 1. 상점 - 아이템 판매
11. 장착 개선 - 중복장착 불가
12. 던전입장 -필수 요소
12 - 1. 휴식 기능
12 - 2. 레벨업 기능
13. end - 개인적으로 싱글 게임은 엔딩이 있어야 한다고 생각함
완성도 만족: ● 불만족 : ▲
1. 게임 시작 화면 ●
2. 상태보기 ●
3. 인벤토리 ● 클래스로 만든 아이템을 딕셔너리를 이용해 관리함
4. 아이템 정보를 클래스 / 구조체로 활용해 보기 ● 아이템을 클래스로 만들음
5. 아이템 정보를 배열로 관리하기 ● 3번과 같음
6. 아이템 추가하기 ●
7. 콘솔 꾸미기 ● 상점, 인벤토리,상태창 입장시 색을 조금 넣어줌
8. 인벤토리 크기 맞춤 ▲ 크기 맞춤을 글자length로 판별했는데 스페이스바와 글자 크기가 달라 길이가 반정도만 맞춰짐
9. 인벤토리 정렬하기 ▲ 딕셔너리로 관리를 시도한건 큰 실수 였음 키값,밸류 기준으로는 정렬할수 있었으나 밸류값안의 name값 기준 정렬을 실패함
10. 상점 - 아이템 구매 ●
10. - 1. 상점 - 아이템 판매 ● bool변수를 하나 만들어 소유중인지 아닌지를 판별하여 관리
11. 장착 개선 - 중복장착 불가 ● 플레이어에 무기 헬멧 갑옷 별로 bool 값을 체크 및 아이템에 타입값을 만들어 체크
12. 던전입장 -필수 요소 ●
12 - 1. 휴식 기능 ●
12 - 2. 레벨업 기능 ●
13. end ●
ui나 텍스트 문자를 좀 더 게임 스럽게 꾸며 보려 했으나 생각보다 기능 구현에 시간이 많이들어 꾸미지 못한점이 아쉽게 느껴진다.
E의 약자는 Equip 뜻 장비하다 라는뜻이였다 E 약자 뜻 그런걸로 검색해도 못찾았었는데 찾음 ㅋㅋ
'TIL' 카테고리의 다른 글
후 .. (0) | 2023.08.28 |
---|---|
알고리즘 시간 복잡도 정렬 조금 (0) | 2023.08.25 |
textrpg 만들기 2일차 (3일차) (0) | 2023.08.22 |
textrpg 만들기 1일차 겪은 문제 (0) | 2023.08.21 |
한 주 마무리 과제 정리 (0) | 2023.08.18 |