내일배움캠프 6일차 TIL - C#을 이용한 텍스트 RPG 게임 개발: 아이템 장착, 아이템 상점, 휴식 구현
페이지 정보
작성자 HELLO 작성일25-06-24 08:31 조회2회 댓글0건관련링크
본문
곧.. 골드 드레곤 구매 주말이다!!!
오늘 텍스트 RPG 진행사항
1. 아이템 장착
2. 상점
3. 휴식
시작하겠다.
1. 아이템 장착
요구 사항은 이러하다
여기서 추가로
이게 최종 장착 로직 요구사항이다.
// 인벤토리에 뭔가가 있을때 1 선택시
{
Console.Clear();
Dialogue.Print("인벤토리 - 장착 관리");
Dialogue.Print("보유 중인 아이템을 관리할 수 있습니다.\n");
Dialogue.Print("[아이템 목록]\n");
int i = 1;
foreach (Item item in GameInfo.inventory)
{
string equippedMark = item.IsEquipped ? "[E]" : " ";
Dialogue.Print($"-{i}{equippedMark}{item.Item_name} | {item.Getstat()} | {item.Item_info}");
i++;
}
Dialogue.Print($"장착을 원하거나 장착 해제를 원하는 장비의 번호를 입력해주세요. (1 ~ {i - 1})\n");
Dialogue.Print("0. 나가기\n");
Dialogue.Print(">>원하는 행동을 입력해주세요");
string Equip_Item = Console.ReadLine();
이렇게 일단 내가 보유중인 장비를 띄워주는 코드를 짯고
이렇게 아이템이 장착이 됐는지 아이템 클래스에 IsEquipped bool 값을 지정해주었다.
string equippedMark = item.IsEquipped ? "[E]" : " ";
이 부분은 IsEquipped 값이 참일경우 equippedMark에 [E]를 집어넣고 아니면 공백을 집어넣는다.
처음에는 if문을 써야하나 했는데 저렇게 삼항연산자 ?를 활용하여 비슷하게 구현이 가능했다.
else if (int.TryParse(Equip_Item, out int selectnum)) // 아이템 장착/해제 로직
{
if (selectnum >= 1 &&selectnum item.Item_name == Sold_Item.Item_name)) // 인벤토리에 구입한 아이템이 있는지 확인하는 함수 있으면 true반환
{
Dialogue.Print($"정말로 {Sold_Item}을 판매하시겠습니까? (Y/N)");
string check_sell = Console.ReadLine();
{
switch (check_sell)
{
case "Y":
case "y":
{
if(Sold_Item.IsEquipped == true) //장착하고있다면 해제
{
Sold_Item.IsEquipped = false;
}
GameInfo.PlayerGold += 0.85 * Sold_Item.Item_gold;
GameInfo.inventory.Remove(Sold_Item);
Dialogue.Print($"{Sold_Item.Item_name}을(를) 판매했습니다!");
Thread.Sleep(2000);
GameInfo.shop.Add(Sold_Item);
Sell_Item();
break;
}
장착한 아이템이라면 장착 해제를 해야하기 때문에 중간에 false로 바꿔주는 작업을 했고
아이템 구매와 비슷하게 인벤토리에서 해당 아이템을 remove 시켜주었다.
아 그리고 지금 TIL를 작성하면서 깨달은 사실인데
사실 문제가 하나 있었다.
아이템을 제거하고
GameInfo.shop.Add(Sold_Item)상점에 다시 추가하는게 맞다고 생각했는데
이러면 기본으로 주어진 아이템을 판매한다면 기본템이 상점에 뜨는 현상이 발생해서 어떻게 해결할지 고민만하다가
내일 생각해봐야겠다... 골드 드레곤 구매 했다가
음?
아이템을 구매할때 내가 딱히 구매하고 shop 리스트에서 구매한 아이템을 제거하지 않았으니까
아이템을 팔아도 다시 추가 안해도 상관없는 거잖아??
그냥 겁나 멍청했었던 것이었다..
상점에 아이템을 다시 추가하는 코드를 주석처리하고 돌려보니
기본템을 팔아도 상점에 더이상 나타나지 않았다 머쓱
3. 휴식
보자마자 체력이 100이 넘으면 회복을 할 수 없게 해야겠다고 바로 생각했다.
일단 추가적인 탭이 필요해서 메인 화면에 늘려주었다.
switch (rest_choice)
{
case "1":
if (GameInfo.PlayerGold <500)
{
Dialogue.Print("Gold가 부족합니다.");
Thread.Sleep(2000);
Rest();
}
else
{
if (GameInfo.Health <100)
{
GameInfo.PlayerGold -= 500;
GameInfo.Health = 100;
Dialogue.Print($"휴식을 완료했습니다.\n남은 골드 : {GameInfo.PlayerGold}");
Thread.Sleep(2000);
Rest();
}
else
{
Dialogue.Print("체력이 충분하기 때문에 휴식을 할 수 없습니다.");
Thread.Sleep(2000);
Rest();
}
}
break;
case "0":
Display();
break;
default:
Dialogue.Print("잘못된 입력입니다. 다시 선택해주세요.");
Thread.Sleep(2000);
Rest();
break;
}
일단 보유중인 골드 부터 체크를 했다.
골드가 부족하지 않다면 다음으로 체력을 확인했고
체력이 100 미만이라면 골드를 소모하고 100으로 설정시켰다.
상점을 구현하는데 좀 시간을 많이 잡아먹었다..
완성하고 TIL쓰면서 보면 뭔가 쉬운 거 같긴한데 생각할때는 도통 계속 막힌단 말이지..
내일은 던전 기능과 세이브 기능을 구현해보려고한다
내일이 프로젝트 마감일이기 때문에 빡쌔게 해보자!
그리고 이번주에 정처기 시험도 있다...
공부 언제하지..
댓글목록
등록된 댓글이 없습니다.