내일배움캠프 15일차 [TIL]

장민제·2025년 4월 25일

내일배움캠프

목록 보기
15/41

✅ 오늘의 요약

  • 팀프로젝트 작업 마무리!!

💪 TextRpg 팀 프로젝트 마무리

  • 오늘까지 추가 기능들을 작업 후 마지막으로 모든 코드들을 병합하여 팀원분들과 같이 확인하며 기능에 문제는 없는지 테스트하며 마무리 하는 작업을 진행했다.

💊 Potion기능 추가

  • 기존 ItemType에 Potion을 추가하고 관련 메서드들을 추가하였다.

📃 Item 클래스

public void GetItem()
{
    if (itemType == ItemType.Potion)
        Count++;
}

    // 포션 아이템 소비
public void ConsumeItem()
{
    if(itemType == ItemType.Potion)
    	Count--;

    if (Count < 0)
        Count = 0;
}

📃 ItemManager 클래스

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에서 아이템 선택을 하는 부분을 추가로 만들어 사용하도록 하였다.

📃 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% 확률로 치명타 공격을 구현하였다.

    간단하니 코드는 생략...


🧠 느낀점

이렇게 팀프로젝트 주차도 마무리되었다!!
마지막으로 부단히 노력하여 포션 기능과 퀘스트 기능 다듬기 및 디테일 추가, 치명타 & 회피 기능을 추가하였다. 내가 짠 코드를 수정하는 것은 쉽지않았지만 팀원분이 기초 로직이 잘 되어있어서 빠르게 구조를 파악하고 기능들을 추가할 수 있었던거 같다.

이번 팀원 분들과 정들었지만 또 다시 조가 바뀐다는 사실이 조금 슬프다...

하지만 남은 날들도 화이팅

profile
Unity, C#

0개의 댓글