public void GetItem()
{
if (itemType == ItemType.Potion)
Count++;
}
// 포션 아이템 소비
public void ConsumeItem()
{
if(itemType == ItemType.Potion)
Count--;
if (Count < 0)
Count = 0;
}
public void UsePotion(Item item)
{
if (item.Count == 0)
{
Console.WriteLine("사용할 포션이 없습니다.");
}
else
{
item.ConsumeItem();
switch (item.Name)
{
case "체력 포션":
player.UseHpPotion(item.Value);
Console.WriteLine($"HP를 {item.Value} 회복하였습니다.");
break;
case "마나 포션":
player.UseMpPotion(item.Value);
Console.WriteLine($"MP를 {item.Value} 회복하였습니다.");
break;
}
}
Thread.Sleep(1000);
}
Potion타입은 여러개를 가질 수 있도록 하고, 포션을 사용하는 메서드를 만들었다.
BattleScene에서 아이템 선택을 하는 부분을 추가로 만들어 사용하도록 하였다.
// 아이템 선택
void ChooseItem()
{
while (true)
{
Console.Clear();
Console.WriteLine($"{sceneName} - 현재 층수 {floor}층" + "\n");
Console.WriteLine("아이템 사용");
// 플레이어 정보 표시
printInfo.PrintPlayerInfo(player);
Console.WriteLine("\n[아이템 목록]");
for (int i = 0; i < potions.Count; i++)
{
Console.WriteLine($"{i + 1}. {potions[i].Name} x {potions[i].Count}");
}
int choice = InputHandler.ChooseAction(0, potions.Count, "\n0. 취소", "원하는 행동을 입력해주세요.");
if (choice == 0) return;
else if (choice != -1 && choice <= potions.Count)
{
sceneManager.ItemManager.UsePotion(potions[choice - 1]);
}
}
}



public void QuestReward(Quest quest)//퀘스트 보상받기,돌아가기
{
Console.WriteLine($"{sceneName}\n{sceneDescription}\n");
int select = InputHandler.ChooseAction(0, 2, "1. 완료" +
"\n2. 포기", "원하시는 행동을 입력해주세요.");
switch (select)
{
case 1:
if (quest.isComplete)
{
Console.WriteLine("보상을 드렸습니다.");
quest.RewardGet();//보상완료 체크
questManager.ApplyReward(quest.questReward);
// 반복 퀘스트면 완료 후 재갱신
if (quest.questType == QuestType.Repeat)
{
// 몬스터 처치 퀘스트면 새로운 몬스터로 세팅
if (quest.QuestID == 10001)
{
monsterName = Monster.GetRandomMonsterName();
quest.ChangeMonsterQuestInfo(monsterName);
}
quest.ResetQuest();
}
}
else
Console.WriteLine("조건을 충족하지 못했습니다.");
Thread.Sleep(1000);
break;
case 2:
// 퀘스트 포기
quest.ResetQuest();
Console.WriteLine("퀘스트를 포기하셨습니다.");
Thread.Sleep(1000);
break;
}
}
public void ChangeMonsterQuestInfo(string monsterName)
{
questTitle = $"마을을 위협하는 {monsterName} 처치";
questContent = $"이봐! 마을 근처에 {monsterName}들이 너무 많아졌다고 생각하지 않나?\r\n마을주민들의 안전을 위해서라도 저것들 수를 좀 줄여야 한다고!\r\n모험가인 자네가 좀 처치해주게!";
questTarget = monsterName;
}
클리어 하고 나면 또 다른 랜덤한 이름의 몬스터를 뽑아, 퀘스트를 갱신한다.
Random.Next를 활용하여 피해를 입을 때 10% 확률로 회피하고, 15% 확률로 치명타 공격을 구현하였다.간단하니 코드는 생략...
이렇게 팀프로젝트 주차도 마무리되었다!!
마지막으로 부단히 노력하여 포션 기능과 퀘스트 기능 다듬기 및 디테일 추가, 치명타 & 회피 기능을 추가하였다. 내가 짠 코드를 수정하는 것은 쉽지않았지만 팀원분이 기초 로직이 잘 되어있어서 빠르게 구조를 파악하고 기능들을 추가할 수 있었던거 같다.
이번 팀원 분들과 정들었지만 또 다시 조가 바뀐다는 사실이 조금 슬프다...
하지만 남은 날들도 화이팅