
이제 팀 과제를 진행 중인데 던전 보상 기능을 맡아서 구현하려고 하고 있다.
몬스터를 잡았을 때 보상을 추가하라고 한다.
조건을 보니 몬스터 당 골드 보상 및 아이템, 경험치 등을 습득하는 것인데,
경험치 부분은 레벨 업 기능을 담당하는 동기 분이 계셔서 그 분과 정하며 작업해야 충돌을 방지 할 수 있을 듯 해서 일단 건드리지 않았다.

상점, 아이템을 만드는 분이 계셔서 임시로 활용 할 Item 클래스도 만들어주었음.


3. 드랍 테이블이라는 메서드를 만들어 아이템 정보를 넣어주었다.
그리고 게임 시작 메서드에 삽입하여 초기화

승리 결과를 출력하는 메서드인데,
GetRewards(); 라는 메서드를 새로 만들어 아이템 보상을 계산하여 출력하게 할 것.
void GetRewards() // 던전 보상 메서드
{
Random r = new Random(); // 랜덤 객체 생성, 랜덤 숫자를 생성하려고
Dictionary<string, int> itemCounts = new Dictionary<string, int>();
// 딕셔너리? => string(아이템 이름), int(아이템 수량)을 가진 객체 생성, 아이템 이름으로 수량 추적
int totalGold = 0; //획득 골드 표시하려고, 일단 초기화
for (int i = 0; i < monsters.Count; i++) // 몬스터 리스트 수 만큼 반복
{
if (monsters[i].Hp <= 0) // 죽었으면
{
totalGold += monsters[i].Gold; // 몬스터의 골드를 획득 골드에 추가
}
if (items.Count > 0) // 아이템 리스트에 아이템이 있는지 확인
{
int itemIdx = r.Next(items.Count); // 아이템 리스트 내에서 랜덤한 인덱스 선택
Item dropItem = items[itemIdx]; // 선택한 인덱스에 해당하는 아이템 가져 옴
if (itemCounts.ContainsKey(dropItem.Name)) // 이미 획득한 아이템이면
// ContainsKey -> 딕셔너리랑 같이 씀 아이템 이름 - 번호
// dropItem.Name = 아이템 이름 문자열
{
itemCounts[dropItem.Name]++; // 이미 있는 템이면 수량 1 +
}
else
{
itemCounts.Add(dropItem.Name, 1); // 없으면 새로 만들고 1개
}
}
}
Console.WriteLine("[획득 아이템]");
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write(" " + totalGold);
Console.ResetColor();
Console.Write(" Gold");
Console.WriteLine("");
foreach (var item in itemCounts) // 획득한 아이템의 이름과 수량을 순회
{
Console.WriteLine("");
Console.Write(item.Key + " - "); // item.Key = 아이템 이름
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write(item.Value); // item.Value = 아이템 수량
Console.ResetColor();
Console.Write(" 개");
Console.WriteLine("");
}
}
딕셔너리 활용과 foreach문을 새로 배웠는데,
내가 원하는 속성의 출력을 딕셔너리로, ( 아이템 이름 - 번호 )
for문을 통해 여러 번 타이핑 하는 것보다 foreach문을 사용 할 수 있다면 사용하는게 순회에서는 꽤나 유용하다는 것을 알았다.
그리고 몬스터를 잡았음에도 골드가 출력 0에서 오르지 않는 현상이 발생하여 온갖 메서드에서 중단 점을 설정하고 디버깅을 했는데..
획득 골드인 {totalGold} 라는 녀석을 Console.WriteLine("Gold" + {totalGold});
라고만 넣어놔서 실제 텍스트로 출력이 안되는 건지 시도 해봤으나 이 문제도 아니었다.

몬스터의 체력이 0이하면, 골드를 획득 골드에 추가하라는 if문이 존재 했었는데
if (monsters[i].Hp <= 0) 조건문을 제거함으로써 문제가 해결되었다.
이는 다른 메서드에서 이미 HP가 0 이하인 몬스터에 대한 처리를 하는 로직이 존재하고 있었다.
즉, 이 조건문이 실행될 때 이미 모든 몬스터가 죽었거나 전투가 종료된 상태였고. 그래서 해당 조건문이 실제로 시행되지 않았다.
일단 그렇게 당장의 문제는 해결.

그리고 깃 데스크탑에서 코드 병합 시기를 정하고, 팀원들과 순서대로 병합하며 메인 코드를 수정하는 과정이 아주 재미있었다.