오늘 내가 담당한 기능은 전투 스킬 구현이다.
회피 & 치명타 기능
public static bool IsEvasion()
{
Random random = new Random();
int percentage = random.Next(1, 101);
if (percentage <= 10)
{
return true;
}
else
{
return false;
}
}
- Random 함수 사용
- 1~100 사이의 숫자를 뽑아 그 숫자가 확률보다 작거나 같으면 회피
- 치명타 함수도 위와 같은 구조로 구현 (치명타 확률만 15%로 조정)
스킬 구현
public static void PlayerSkill(List<int> monsterNum, int skillNum)
{
Console.Clear();
Console.WriteLine("Battle!! - 나의 턴\n");
Console.WriteLine($"{GameManager.user.Name}의 스킬 공격!\n");
float damage = 0.0f;
// 알파 스트라이크
if (skillNum == 1)
{
GameManager.user.MP -= 10;
damage += GameManager.user.AttackPower * 2;
}
// 더블 스트라이크
else if (skillNum == 2)
{
GameManager.user.MP -= 15;
damage += GameManager.user.AttackPower * 1.5f;
}
foreach(int i in monsterNum)
{
float skillDamage = damage;
// 치명타
if (IsCritical())
{
skillDamage = (float)Math.Round(damage * 1.6f);
Console.WriteLine($"LV.{monsters[i].Level} {monsters[i].Name} 을(를) 맞췄습니다. [스킬 데미지 : {skillDamage}] - 치명타 공격!!\n");
}
else
{
Console.WriteLine($"LV.{monsters[i].Level} {monsters[i].Name} 을(를) 맞췄습니다. [스킬 데미지 : {skillDamage}]\n");
}
AttackMonster(monsters[i], skillDamage);
}
Console.WriteLine("0. 다음\n");
BattleInput.PlayerAttackInput();
}
- monsterNum은 플레이어가 공격할 몬스터 인덱스들의 리스트
- skillNum은 현재 플레이어가 사용하는 스킬 번호
- 스킬 공격은 회피할 수 없으므로 치명타 공격만 구현하였다.
👍
어제는 팀원들과 같이 전투 부분을 구현하다보니
각자의 코드 스타일이 달라 코드 Merge 과정에서 많은 시간을 썼었다.
반면 오늘은 선택 구현 사항 각 기능에 따라 역할을 분담하여 작업하여 충돌이 적었다.
충돌이 나도, 겹치는 스크립트 내용이 적다 보니 금방 수정이 가능했다.
오늘 아쉬웠던건, Battle.cs에 담겨있는 내용이 너무 많아졌다는 것이다.
(전투 화면, 플레이어 턴, 플레이어 공격, 몬스터 턴, 몬스터 공격, 기타 구현에 필요한 함수들 등등)
혼자 기능을 구현하는 데에도 코드를 찾는 데에 시간이 많이 걸려,
팀원분들이 이해하기 쉬운 코드인가? 라는 고민이 들었다.
-> 함수마다 어떤 기능을 구현하고 있는지 간단한 주석 적기
-> 코드 리뷰 시간에 열심히 설명
-> Battle.cs (Scene 보여주는 스크립트), BattleManager.cs (직접적인 전투 구현)로 파일 나누기
위와 같은 과정을 통해 해결하였다.
'게임 개발' 카테고리의 다른 글
Text Dungeon - 세나몬 잡기 (4) (0) | 2024.05.03 |
---|---|
Text Dungeon - 세나몬 잡기 (3) (0) | 2024.05.02 |
Text Dungeon - 세나몬 잡기 (2) (0) | 2024.05.01 |
[Unity] 게임 개발 - Galaga 만들어보기 (2) (0) | 2024.04.09 |
[Unity] 게임 개발 - Galaga 만들어보기 (1) (0) | 2024.04.02 |