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

장민제·2025년 4월 23일

내일배움캠프

목록 보기
13/41
post-thumbnail

✅ 오늘의 요약

  • 코딩 테스트 문제 풀이
  • 팀프로젝트 작업을 진행

🔍 코딩테스트 문제 풀기

오늘도 코딩테스트 문제를 풀었다.
이제는 기초와 입문은 뇌를 깨우는 용도로 풀고, Lv. 1 문제를 풀려고 한다.

조건에 맞게 수열 반환하기 2
콜라 문제

💪 TextRpg 팀 프로젝트 진행

팀원분과 같이 Skill 클래스를 구현하고, 전투 부분에서 플레이어의 Skill 리스트를 가져와 출력하여 사용하는 방식으로 구현해주었다.

📃 Skill.cs 중 UsingSkill()

public void UsingSkill(Player player, Unit other)
{
    int result = player.state.Damage * AttackRank;
    if (player.state.CurMp >= UseMp)
    {
        Console.WriteLine($"{player.state.Name} 의 {SkillName}!!");
        Console.WriteLine($"Mp {player.state.CurMp} -> {player.state.CurMp - UseMp}\n");
        player.state.CurMp -= UseMp;
    }
    else
    {
        Console.WriteLine($"MP가 부족합니다");
    }
    other.SetDamage(result);
}

Skill 클래스에는 공격력 계수, 스킬 이름, 스킬 설명, 소모 MP를 변수값으로 가지고있다.

📃 BattleScene.cs 중 ChooseSkill()

// 스킬 선택
void ChooseSkill()
{
    while (true)
    {
        Console.Clear();
        Console.WriteLine($"{sceneName} - 현재 층수 {floor}층" + "\n");

        // 번호 없이 몬스터 출력
        PrintMonsterInfo(false);

        Console.WriteLine();

        // 플레이어 정보 표시
        PrintPlayerInfo();

        // 스킬 목록 출력
        Console.WriteLine("\n[스킬 목록]");
        for (int i = 0; i < player.SkillList.Count; i++)
        {
            Console.WriteLine($"{i + 1}. {player.SkillList[i].SkillName} - MP {player.SkillList[i].UseMp}");
            player.SkillList[i].SkillInfo();
        }

        int choice = InputHandler.ChooseAction(0, player.SkillList.Count, "\n0. 다음", "원하는 행동을 입력해주세요.");

        if (choice == 0) return;

        else if (choice != -1 && choice <= player.SkillList.Count)
        {
            // 스킬 선택 후 공격 몬스터 선택
            selectSkill = player.SkillList[choice - 1];
            ChooseMonster();
            return;
        }
    }
}

그러고 전투화면에서 Skill 리스트를 가져와 목록을 번호와 함께 출력해주고, 플레이어의 입력값을 받아 선택한 스킬을 Skill? selectSkill Nullable 변수에 저장해주고,

BattleScene.cs 중 ChooseMonster()

void ChooseMonster()
{
    while (true)
    {
        Console.Clear();
        Console.WriteLine($"{sceneName} - 현재 층수 {floor}층" + "\n");
        
		// 선택된 스킬이 있다면 현재 선택중인 스킬 표시
        if(selectSkill != null) Console.WriteLine($"현재 선택된 스킬 [{selectSkill.SkillName}]\n");
        
        // 몬스터 번호와 함께 출력
        PrintMonsterInfo(true);

        Console.WriteLine();

        // 플레이어 정보 표시
        PrintPlayerInfo();

        int choice = InputHandler.ChooseAction(0, monsters.Count, "\n0. 취소", "공격할 대상을 선택하세요.\n");

        if (choice == 0) return;

        else if (choice != -1 && choice <= monsters.Count)
        {
            // 몬스터가 살아있다면 공격
            if (monsters[choice - 1].state.CurHp != 0)
            {
                Console.Clear();
                Console.WriteLine($"{sceneName}" + "\n");

                if (selectSkill != null)
                    selectSkill.UsingSkill(player, monsters[choice - 1]);
                else
                    player.Attack(monsters[choice - 1]);

                BattleProgress(); // 전투 과정 출력 대기

                MonstersPhase(); // 몬스터 턴
                return;
            }
            else
            {
                Console.WriteLine("잘못된 대상입니다.");
                Thread.Sleep(500);
            }
        }
    }
}

몬스터가 살아있다면 공격을 진행하고, 선택된 스킬이 있다면 스킬 사용, 아니면 일반 공격을 하도록 구현하였다.

💻 실행 화면




🧠 느낀점

다른 팀원 분들도 많이 작업을 하셔서 이제 거의 완성이 되가고있는 참이다.
매번 오후 5시 스크럼 시간때마다 깃에서 코드 병합을 하면서 착실하게 진행되고 있어 기분이 좋다!

이제 몬스터가 사망 시 랜덤한 보상을 생성하고 전투가 종료되었을 때, 보상을 지급하는걸 구현해야하는데 뭔가 작성해보았지만 아직은 제대로 구조가 잡히지 않는 것 같아서 내일 다시 말끔한 정신으로 구현해보아야겠다.

profile
Unity, C#

0개의 댓글