오늘도 코딩테스트 문제를 풀었다.
이제는 기초와 입문은 뇌를 깨우는 용도로 풀고, Lv. 1 문제를 풀려고 한다.
팀원분과 같이 Skill 클래스를 구현하고, 전투 부분에서 플레이어의 Skill 리스트를 가져와 출력하여 사용하는 방식으로 구현해주었다.
public void UsingSkill(Player player, Unit other)
{
int result = player.state.Damage * AttackRank;
if (player.state.CurMp >= UseMp)
{
Console.WriteLine($"{player.state.Name} 의 {SkillName}!!");
Console.WriteLine($"Mp {player.state.CurMp} -> {player.state.CurMp - UseMp}\n");
player.state.CurMp -= UseMp;
}
else
{
Console.WriteLine($"MP가 부족합니다");
}
other.SetDamage(result);
}
Skill 클래스에는 공격력 계수, 스킬 이름, 스킬 설명, 소모 MP를 변수값으로 가지고있다.
// 스킬 선택
void ChooseSkill()
{
while (true)
{
Console.Clear();
Console.WriteLine($"{sceneName} - 현재 층수 {floor}층" + "\n");
// 번호 없이 몬스터 출력
PrintMonsterInfo(false);
Console.WriteLine();
// 플레이어 정보 표시
PrintPlayerInfo();
// 스킬 목록 출력
Console.WriteLine("\n[스킬 목록]");
for (int i = 0; i < player.SkillList.Count; i++)
{
Console.WriteLine($"{i + 1}. {player.SkillList[i].SkillName} - MP {player.SkillList[i].UseMp}");
player.SkillList[i].SkillInfo();
}
int choice = InputHandler.ChooseAction(0, player.SkillList.Count, "\n0. 다음", "원하는 행동을 입력해주세요.");
if (choice == 0) return;
else if (choice != -1 && choice <= player.SkillList.Count)
{
// 스킬 선택 후 공격 몬스터 선택
selectSkill = player.SkillList[choice - 1];
ChooseMonster();
return;
}
}
}
그러고 전투화면에서 Skill 리스트를 가져와 목록을 번호와 함께 출력해주고, 플레이어의 입력값을 받아 선택한 스킬을 Skill? selectSkill Nullable 변수에 저장해주고,
void ChooseMonster()
{
while (true)
{
Console.Clear();
Console.WriteLine($"{sceneName} - 현재 층수 {floor}층" + "\n");
// 선택된 스킬이 있다면 현재 선택중인 스킬 표시
if(selectSkill != null) Console.WriteLine($"현재 선택된 스킬 [{selectSkill.SkillName}]\n");
// 몬스터 번호와 함께 출력
PrintMonsterInfo(true);
Console.WriteLine();
// 플레이어 정보 표시
PrintPlayerInfo();
int choice = InputHandler.ChooseAction(0, monsters.Count, "\n0. 취소", "공격할 대상을 선택하세요.\n");
if (choice == 0) return;
else if (choice != -1 && choice <= monsters.Count)
{
// 몬스터가 살아있다면 공격
if (monsters[choice - 1].state.CurHp != 0)
{
Console.Clear();
Console.WriteLine($"{sceneName}" + "\n");
if (selectSkill != null)
selectSkill.UsingSkill(player, monsters[choice - 1]);
else
player.Attack(monsters[choice - 1]);
BattleProgress(); // 전투 과정 출력 대기
MonstersPhase(); // 몬스터 턴
return;
}
else
{
Console.WriteLine("잘못된 대상입니다.");
Thread.Sleep(500);
}
}
}
}
몬스터가 살아있다면 공격을 진행하고, 선택된 스킬이 있다면 스킬 사용, 아니면 일반 공격을 하도록 구현하였다.



다른 팀원 분들도 많이 작업을 하셔서 이제 거의 완성이 되가고있는 참이다.
매번 오후 5시 스크럼 시간때마다 깃에서 코드 병합을 하면서 착실하게 진행되고 있어 기분이 좋다!
이제 몬스터가 사망 시 랜덤한 보상을 생성하고 전투가 종료되었을 때, 보상을 지급하는걸 구현해야하는데 뭔가 작성해보았지만 아직은 제대로 구조가 잡히지 않는 것 같아서 내일 다시 말끔한 정신으로 구현해보아야겠다.