프로젝트 막바지, ppt와 발표준비
기능은 이제 구현을 마쳤고 혹시모를 오류만 잡아내고 있다. 그리고 콘솔창 꾸미기!
참고할 수 있는 사이트를 올려놓겠다.
이미지를 아스키코드로 변환해주는 사이트
https://wepplication.github.io/tools/asciiArtGen/
텍스트를 3d로
https://patorjk.com/software/taag/#p=display&f=3D%20Diagonal&t=%0A
오늘의 TIL은 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를 꺼내 랜덤 갯수를 뽑은 뒤 허용된 레벨 배열 중 하나를 랜덤으로 골라 몬스터 인스턴스를 생성해 리스트에 추가한다.이렇게 하면 GameManager에 StageManager를 한 번 생성해 두고 전투 시작할 때 var monsters = GameManager.Stage.SpawnWave();등으로 선언하고, 승리하면 GameManager.Stage.NextStage()같은 방식으로 호출하면 전투를 재시작 할 때 스테이지가 올라간 상태로 새 웨이브를 맞이할 수 있게된다.
다음주는 발표하는 날! 내가 발표자는 아니지만 그래도 떨리는건 마찬가지다. 다른 팀은 어떻게 했을까?? 우리팀도 꽤 괜찮게 했다고 생각하는데 좋은 평가를 받았으면 좋겠다. 주말에 시간을 내서 콘솔창을 더 이쁘게 꾸며봐도 좋을 것 같다.