내일배움캠프 15일차

박나연·2025년 4월 25일

내배캠

목록 보기
15/69

프로젝트 막바지, ppt와 발표준비

오늘의 키워드 : 마무리

기능은 이제 구현을 마쳤고 혹시모를 오류만 잡아내고 있다. 그리고 콘솔창 꾸미기!
참고할 수 있는 사이트를 올려놓겠다.

  1. 이미지를 아스키코드로 변환해주는 사이트
    https://wepplication.github.io/tools/asciiArtGen/

  2. 텍스트를 3d로
    https://patorjk.com/software/taag/#p=display&f=3D%20Diagonal&t=%0A

오늘의 TIL은 StageManager.cs만 리뷰하고 끝내보도록 하겠다

StageManager.cs

public class StageConfig
{
    public int StageNumber     { get; }
    public int[] MonsterLv     { get; }
    public (int Min, int Max) SpawnRange { get; }

    public StageConfig(int stageNumber, int[] monsterLv, (int Min, int Max) spawnRange)
    {
        StageNumber = stageNumber;
        MonsterLv   = monsterLv;
        SpawnRange  = spawnRange;
    }
}
  • StageNumber는 현재 configs배열의 인덱스로 쓰이고 있다.
  • MonsterLv은 해당 스테이지에서 등장 가능한 몬스터 레벨 목록이다. new[]{1,2}이렇게 하면 1과 2레벨 몬스터만 출현 시킨다는 의미가 된다.

스테이지 관련 설정을 한 곳에 모아둬서 관리가 편하다는 장점이 있다.

public class StageManager
{
    private static readonly Random random = new Random();

    private static readonly StageConfig[] configs =
    {
        null,
        new StageConfig(1, new[]{1,2}, (1,4)),
        //1스테이지는 1,2렙 몬스터가 1~4마리 랜덤 등장
        ....
    };
        public void SetStage(int stage)
        {
            CurrentStage = stage;

        }
        public int CurrentStage { get;  set; } = 1; //초기 스테이지는 1

        public void NextStage()//배틀에서 승리할때만 다음 스테이지로
        {
            CurrentStage++;
        }

        public List<Monster> SpawnWave()
        {
            int idx = Math.Min(CurrentStage, configs.Length - 1);
            var cfg = configs[idx];

            //몇 마리 뽑을지
            int count = random.Next(cfg.SpawnRange.Min, cfg.SpawnRange.Max + 1);

            var wave = new List<Monster>(count);

            for (int i = 0; i < count; i++)
            {
                //레벨 배열에서 랜덤 인덱스
                int levelIndex = random.Next(cfg.MonsterLv.Length);
                int level = cfg.MonsterLv[levelIndex];

                //해당 레벨 몬스터 생성
                wave.Add(Monster.CreateRandomByLevel(level));
            }

            return wave;
        }
}
  • CurrentStage 프로퍼티로 현재 스테이지를 저장해 NextStage() 호출하면 스테이지 번호를 자동으로 증가하게 한다.
  • SpawnWave()에서 웨이브를 생성한다. CurrentStage에 맞는 StageConfig를 꺼내 랜덤 갯수를 뽑은 뒤 허용된 레벨 배열 중 하나를 랜덤으로 골라 몬스터 인스턴스를 생성해 리스트에 추가한다.

이렇게 하면 GameManagerStageManager를 한 번 생성해 두고 전투 시작할 때 var monsters = GameManager.Stage.SpawnWave();등으로 선언하고, 승리하면 GameManager.Stage.NextStage()같은 방식으로 호출하면 전투를 재시작 할 때 스테이지가 올라간 상태로 새 웨이브를 맞이할 수 있게된다.

마무리하며

다음주는 발표하는 날! 내가 발표자는 아니지만 그래도 떨리는건 마찬가지다. 다른 팀은 어떻게 했을까?? 우리팀도 꽤 괜찮게 했다고 생각하는데 좋은 평가를 받았으면 좋겠다. 주말에 시간을 내서 콘솔창을 더 이쁘게 꾸며봐도 좋을 것 같다.

0개의 댓글