2023. 10. 20. 16:03ㆍGame Develop/C# Console Text RPG
저번 시간에 스토리와, 몬스터마다 개별 등장 문구가 출력되도록 하였으니 그 이후 진행될 전투 시스템을 구성하려 한다.
전투 시스템은 최상단에 턴 수가 나오고, 플레이어와 몬스터의 각각의 최대 체력, 현재 체력, 공격력이 나오도록 설정해 줄 것이다.
플레이어가 행동을 선택하면 그 행동을 한 직후 몬스터도 행동하는 식으로 턴이 진행된다.
가장 먼저 플레이어와 몬스터의 상태를 보여주는 메서드를 작성해보자.

매개변수로는 player, monster, mob, turn 이렇게 받아서 턴수를 표시하고 플레이어와 몬스터의 상태를 출력해 준다. mob을 매개변수로 받는 이유는 어떤 몬스터의 상태를 나타내는지 표시해주기 위해서 넣어주었다. 다음은 출력화면이다.

이제 Battle 메서드를 만들어 주어서 본격적으로 시스템을 구축하려고 한다.
일단 뱀파이어의 스킬은 4~5개로 구현할 것이나 스킬은 스토리가 진행되가면서 얻도록할 것이기 때문에, 오늘은 기본공격만 작성해줄 것이다.
하지만, 스킬이 무엇이있는지 출력해 주어야하기 때문에 스킬창에 기본공격 칸을 넣고 사용하도록 하자.
이는 플레이어가 생성될때 기본적으로 가지고 있어야한다.

Player 클래스에 skillSet string 배열과 skillCount int 변수를 모든 캐릭터 들이 다 가지고 있지만 구현은 각 캐릭터 클래스에서 다룰 수 있도록 하기 위해서 protected로 선언해주었다.

Vampire가 사용할 스킬을 enum으로 만들어 줄 것인데 오늘은 기본공격만 할 것이니 Bat_Fire만 추가했다.

뱀파이어 클래스에 SetSkill 메서드를 만들고 매개변수는 VampireSkill enum이다. 이렇게 스킬셋을 만들어 주고

이렇게 추가해주면 Vampire 객체가 생성될때 Bat_Fire 스킬이 가장 처음에 추가된다.

위 코드의 while문 부터 본격적인 전투시스템이다. player와 monster의 상태를 보여주고 player가 가지고 있는 스킬을 보여주고 행동을 입력 받아서 공격하고, player의 공격이 끝났을때 monster의 체력이 0 보다 크면 몬스터가 공격하고 그렇지 않으면 while문을 빠져나가도록 설정해주었다. 위의 과정이 반복되면 turn++을 해서 현재 턴수를 알 수 있도록 설정해주었다. TryParse 메서드를 통해 selectedNum이 조건을 만족하지 못하면, 다시 while문의 처음부터 실행되도록 설정해주었다.
다음은 player.Attack(player.GetSkill(selectedNum), monster) 메서드와 monster.Attack(player)의 메서드의 코드이다.

위는 Player 클래스에 작성한 Attack과 Hit 매서드다 Attack은 Vampire 클래스에서 재작성을 위해 virtual로 선언해주었다.

다음은 monster.Attack(player) 메서드이다.



빨간 네모 친 부분에 추가해주고 실행해보자



나머지 Hunter와 Wolf 클래스에도 똑같이 추가해주면 기본적인 전투시스템도 완성이된다.
다음 시간은 대리자를 이용해서 Player의 스킬을 더 효율적으로 사용하는 방법을 구현해보고자 한다.
'Game Develop > C# Console Text RPG' 카테고리의 다른 글
C# 콘솔창으로 게임 만들기(Day 6) (1) | 2023.10.20 |
---|---|
C# 콘솔창으로 게임 만들기(Day 5) (0) | 2023.10.20 |
C# 콘솔창으로 게임 만들기(Day 3) (0) | 2023.10.20 |
C# 콘솔창으로 게임 만들기(Day 2) (1) | 2023.10.20 |
C# 콘솔창으로 게임 만들기(Day 1) (0) | 2023.10.20 |