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() → 하나라도 조건을 만족하는 요소가 있는지 확인 |
'C#' 카테고리의 다른 글
[TIL] C# 프로그래머스_ 더 크게 합치기, 홀짝에 따라 다른 값 반환하기 (0) | 2025.02.07 |
---|---|
[TIL] C# 프로그래머스_ 대소문자 바꿔서 출력, 문자열 겹쳐쓰기 (1) | 2025.02.06 |
[TIL] C# 텍스트 Rpg 구현하기(1) (1) | 2025.02.04 |
[TIL] C# 인터페이스 (0) | 2025.02.03 |
[TIL] C# 메서드 (0) | 2025.01.31 |