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

장민제·2025년 4월 22일

내일배움캠프

목록 보기
12/41

✅ 오늘의 요약

  • 팀프로젝트 TextRpg 전투 시스템 작업을 진행하였다.
  • 프로그래머스에서 Day 12일차, 13일차 기초 트레이닝 문제를 풀었다.

🔍 코딩테스트 문제 풀기

프로그래머스에서 제공해주는 기초 트레이닝 문제를 풀었다.
천천히 풀어가며 감을 계속해서 잡아가야겠다.

Programmers - 2의 영역
Programmers - 배열 조각하기
Programmers - 왼쪽 오른쪽

💪 TextRpg 팀 프로젝트 전투 부분 구현

TextRpg에서 전투 부분 구현을 시작하였다.

처음에 화면을 출력할 부분을 잡아가는데 머리로만 생각하려니 헷갈려서 흐름도를 작성해보았다.

그래도 이렇게 흐름도를 그려놓고 작업을 시작하니 조금 나았다.

우선 전투에 들어가면 몬스터를 랜덤하게 생성해주어야 하니

public class MonsterSpawner
{
    Random rand = new Random();
    string[] monsterNames = {"고릴라", "고블린", "골렘", "오크"};
    public List<Unit> SpawnMonsters(int floor)
    {
        List<Unit> monsters = new List<Unit>();

        int repeat = rand.Next(1, 4);  // 랜덤 생성

        for (int i = 0; i < repeat; i++)
        {
            monsters.Add(SetMonster(floor));
        }

        return monsters;
    }

    // 스탯 설정
    Unit SetMonster(int floor)
    {
        Unit monster = new Unit();

        int rand_Value = rand.Next(5) * floor;

        monster.state = new Unit.UnitState()
        {
            Name = monsterNames[rand.Next(monsterNames.Length)],
            Level = 1 + rand_Value,
            MaxHp = 20 + rand_Value,
            Damage = 5 + rand_Value
        };

        monster.state.CurHp = monster.state.MaxHp;

        return monster;
    }
}

몬스터를 층수에 따라 능력치가 더 강해지도록 생성해주는 메서드를 작성했다.

몬스터의 정보플레이어의 정보는 자주 출력해줘야 해서 메서드로 만들어줬다.

// 플레이어 정보 출력   
void PrintPlayerInfo()
{
    Console.WriteLine("[내정보]");
    Console.WriteLine($"Lv. {player.state.Level} {player.state.Name} (직업)");
    Console.WriteLine($"{player.state.CurHp}/{player.state.MaxHp}");
}

// 몬스터 정보 출력
void PrintMonsterInfo(bool useNum)
{
    if (useNum)
    {
        int num = 1;

        for (int i = 0; i < monsters.Count; i++)
        {
            if (monsters[i].state.CurHp != 0)
                Console.WriteLine($"[{num}] Lv. {monsters[i].state.Level} {monsters[i].state.Name} HP {monsters[i].state.CurHp}");
            else
                Console.WriteLine($"[{num}] Lv. {monsters[i].state.Level} {monsters[i].state.Name} Dead");
            num++;
        }
    }

    else
    {
        foreach (var monster in monsters)
        {
            if (monster.state.CurHp != 0)
                Console.WriteLine($"Lv. {monster.state.Level} {monster.state.Name} HP {monster.state.CurHp}");
            else
                Console.WriteLine($"Lv. {monster.state.Level} {monster.state.Name} Dead");
        }
    }
}

전투하며 선택한 상황에 따라 달라지도록 나머지 메서드들도 구현해주었다.

💻 실행 화면





필수 기능은 이제 전투가 종료되었을 때의 구현만 남았다.


🧠 느낀점

이제 다른 팀원분들이 다른 부분을 작성해주시고 그 부분을 활용해서 구현을 하다보니 처음에는 코드를 이해하느라 조금 시간이 걸렸지만 잘 모르겠는 부분은 구현한 팀원분께 어떤 식으로 동작하는지 여쭤보고 하다보니 그래도 곧 잘 개발을 진행한 것 같다.

이제 남은 부분 더 구현하고, 다른 기능들을 좀 더 추가해보는 시간을 가지면 좋을 것 같다.

오전에는 코딩테스트 문제 풀기.

profile
Unity, C#

0개의 댓글