C#

[TIL] C# 텍스트 Rpg 구현하기(2)

unihee1 2025. 2. 5. 20:53

1. 인벤토리 구현

전체 코드

플레이어가 보유한 아이템 목록을 확인할 수 있는 인벤토리 UI 역할을 한다. 지난번 상점을 구현하면서 만든 purchasedItems 리스트에 저장된 아이템을 불러온다.  

for (int i = 0; i < purchasedItems.Count; i++)
{
    bool isEquipped = equippedItems.Any(item => item.ItemName == purchasedItems[i].ItemName);  
    string equippedMark = isEquipped ? "[E] " : "";
    Console.WriteLine($"{i + 1}. {equippedMark}{purchasedItems[i].ItemName} | {purchasedItems[i].ItemExplanation}");
}
  • Any() 메서드를 사용하여 equippedItems 리스트에 현재 아이템이 있는지 확인 ※ 아래 LINQ 설명 글 참고
  • isEquipped가 true면 아이템이 장착된 상태로 equippedMark 변수는 아이템이 장착되었을 경우 [E] 마크를 추가

 

2. 아이템 장착 구현

전체코드

플레이어가 아이템을 장착하고 해제하는 기능을 담당하도록 구현한다.

Item selectedItem = purchasedItems[choice - 1];

bool isEquipped = equippedItems.Any(item => item.ItemName == selectedItem.ItemName);
  • 플레이어가 선택한 아이템(choice - 1)을 selectedItem 변수에 저장
  • 해당 아이템이 현재 장착 상태인지 확인
if (isEquipped)
{
    equippedItems.RemoveAll(item => item.ItemName == selectedItem.ItemName); // 이미 장착된 아이템이면 equippedItems에서 제거
    player.Attack -= selectedItem.Attack; // 능력 감소
    player.Defense -= selectedItem.Defense;
    Console.WriteLine($"{selectedItem.ItemName}을(를) 장착 해제했습니다.");
}
  • equippedItems.RemoveAll(...) : equippedItems 리스트에서 해당 아이템 제거
  • player.Attack -= selectedItem.Attack, player.Defense -= selectedItem.Defense: 플레이어의 능력치 감소

 

3. 휴식 기능 구현

전체 코드

플레이어가 500골드를 지불하면 체력을 회복하는 기능을 구현해 보았다. 체력은 100까지 회복되고 이미 체력이 100일 경우엔 아무런 기능을 하지 않는다.

    if (num == 1)
    {
        if (player.Gold >= 500) // 플레이어의 골드가 500 이상인지 확인
        {
            if (player.Health < 100)
            {
                player.Gold -= 500;
                player.Health = 100;
                Console.WriteLine("체력을 회복했습니다.");
            }
            else // 체력이 100이면 휴식할 수 없음
            {
                Console.WriteLine("이미 체력이 100입니다.");
            }

        }
        else
        {
            Console.WriteLine("골드가 부족합니다.");
        }
        Rest(player);
    }
    else 
    {
        ChoiceNumber(player);
    }
}
  •  if (player.Health < 100) : 플레이어의 체력이 100미만인지 확인하고 미만일 경우 골드를 차감하고 체력을 100으로 초기화

 

4. LINQ

  • LINQ란?: SQL과 유사한 방식으로 쉽게 조회, 필터링, 변환, 정렬 등을 수행할 수 있도록 제공하는 기능
  • 장점: 가독성이 좋아지며 한 줄로 데이터 조작이 가능해져 코드가 간결해진다.
  • LINQ의 기본 문법
  Query 문법 (SQL 스타일) Method 체이닝 문법 (람다 스타일)
가독성 SQL과 비슷하여 친숙 짧고 간결한 코드 가능
복잡한 쿼리 다중 조건, 그룹화, 조인이 필요할 때 유용 단순한 필터링, 변환에 적함
속도차이 성능 차이 거의 없음

 

  • LINQ 주요 기능
  설명
Where 조건에 맞는 데이터 필터링
Select 데이터 변환
OrderBy, OrderBy Descending 정렬(좌: 오름차순, 우: 내림차순)
First, FirstOrDefault, Last, LastOrDefault First() → 조건에 맞는 첫 번째 요소 찾기 (없으면 예외 발생) FirstOrDefault() → 요소가 없으면 default 값 반환
GroupBy 그룹화
All, Any All() → 모든 요소가 조건을 만족하는지 확인 Any() → 하나라도 조건을 만족하는 요소가 있는지 확인