오늘은 스테이지 구현을 담당했다.
스테이지 별 난이도 설정
// 몬스터 확률
int[] percent = { 0, 50 };
Random random = new Random();
if (stageNum == 1)
{
// 1층 - 3마리, 미니언 & 공허충
monsterCount = 3;
}
else if (stageNum == 2)
{
// 2층 - 3~4마리, 미니언 & 공허충 & 대포미니언
monsterCount = random.Next(3, 5);
percent[0] = 40;
percent[1] = 80;
}
else if (stageNum == 3)
{
// 3층 - 4~5마리, 공허충, 대포 미니언 나올 확률 up
monsterCount = random.Next(4, 6);
percent[0] = 50;
percent[1] = 90;
}
- 1층, 2층, 3층 각각에 대해 난이도를 설정하였다.
- random 사용하여 몬스터 마리 수 설정
- percent는 미니언, 공허충, 대포 미니언 스폰 확률 배열이다.
for (int i = 0; i < monsterCount; i++)
{
int randomMonsterNum = random.Next(0, 100);
// percent[0] 확률로 대포미니언
if (randomMonsterNum < percent[0])
{
monsters.Add(new Monster("대포미니언 ", 5, 8, 20, false));
}
// percent[1] - percent[0] 확률로 공허충
else if (randomMonsterNum < percent[1])
{
monsters.Add(new Monster("공허충", 3, 6, 10, false));
}
// 100 - percent[1] - percent[0] 확률로 미니언
else
{
monsters.Add(new Monster("미니언", 2, 5, 15, false));
}
}
- 설정된 몬스터 마리 수 만큼 for문을 돌며 0~99 사이의 난수를 뽑는다.
- 1층에선 대포미니언이 스폰되지 않는다.
-> percent[0] = 0, percent[1] = 50
-> 즉 미니언과 공허충이 반반의 확률로 스폰
- 2층에선 대포미니언도 스폰될 수 있다.
-> percent[0] = 40, percent[1] = 80
-> 즉 미니언 20%, 공허충 40%, 대포미니언 40% 확률로 스폰되는 코드
- 3층은 공허충과 대포미니언의 스폰 확률이 올라간다. 구현은 위와 같다
보스 스테이지
public static void BossInit()
{
BattleManager.monsters.Clear();
BattleManager.monsters.Add(new Monster("세나몬", 10, 10, 100, false));
BossStage();
}
- 4층이면 BossInit() 함수 실행
- BossStage() 함수에선 세나몬이 콘솔에 등장한다
public static void BossPhase()
{
Console.Clear();
Console.WriteLine("보스 턴\n");
// 광폭화 - 한 번만 발생
if (BattleManager.monsters[0].HP < 30)
{
BossBerserk(isFirst);
isFirst = false;
}
BossAttack();
}
- 플레이어의 턴이 끝나고 보스의 턴이 되면 실행
- 보스의 Hp가 30 이하면 광폭화한다.
-> 보스 Hp가 풀로 차고 공격력이 오른다.
public static void BossAttack()
{
// 보스 패턴 2개
Random random = new Random();
int attackType = random.Next(0, 2);
float monsterDamage = BattleManager.monsters[0].AttackDamage(BattleManager.monsters[0].AttackPower);
Console.WriteLine($"{BattleManager.monsters[0].Name}의 공격!");
switch(attackType)
{
case 0:
// 기본 공격
Console.WriteLine($"LV.{BattleManager.monsters[0].Level} {BattleManager.monsters[0].Name}의 펀치!\n");
break;
case 1:
// 스킬 공격 데미지 1.5배
Console.WriteLine($"LV.{BattleManager.monsters[0].Level} {BattleManager.monsters[0].Name}의 파이어볼!\n");
monsterDamage *= 1.5f;
break;
default:
break;
}
Console.WriteLine($"{GameManager.user.Name}을(를) 맞췄습니다. [데미지 : {monsterDamage}]\n");
Console.WriteLine($"LV.{GameManager.user.Level} {GameManager.user.Name}");
float nowHp = GameManager.user.HP;
GameManager.user.TakeDamage(monsterDamage);
Console.WriteLine($"HP {nowHp} -> {GameManager.user.HP}\n");
if (GameManager.user.IsDead)
{
Console.WriteLine($"당신은 {BattleManager.monsters[0].Name}에게 패배했습니다..");
Thread.Sleep(2000);
}
Console.WriteLine("0. 다음\n");
BattleInput.EnemyPhaseInput();
// 전투 종료 조건
if (BattleManager.BattleEnd())
{
Thread.Sleep(1000);
Village.ShowVillage();
}
else
{
//플레이어 턴 실행
Battle.ShowBattle(false);
}
}
- 지금까지 구현한 내용으로는 보스 패턴이 2개이다.
- 보스 HP가 한 번에 0이되어 광폭화가 발생하지 않는 경우나
세부적인 보스 패턴에 대한 고민 등이 필요한 상태이다.
내일은 개인 프로젝트 때 진행했던 상점 기능, 게임 저장 기능을 추가하고
팀원들과 함께 코드 리팩토링 및 우리 팀만의 추가 기능에 대해 논의해보아야겠다!
'게임 개발' 카테고리의 다른 글
Text Dungeon - 세나몬 잡기 (4) (0) | 2024.05.03 |
---|---|
Text Dungeon - 세나몬 잡기 (3) (0) | 2024.05.02 |
Text Dungeon - 세나몬 잡기 (0) | 2024.04.30 |
[Unity] 게임 개발 - Galaga 만들어보기 (2) (0) | 2024.04.09 |
[Unity] 게임 개발 - Galaga 만들어보기 (1) (0) | 2024.04.02 |