프로그래밍공부/C#기초

C# 프로그램 예제연습 - 텍스트게임만들기 - 04

Roslyn 2024. 1. 15. 10:24
반응형

지난 시간에 우린 몹(Monster)에게 공격력과 방어력이라는 공통 항목을 추가해 주는 과정을 통해 상속에 대해 이야기 했습니다.

그런데 공격력과 방어력은 사용자에게도 있어야 겠죠?  그러니 우리 User.cs 에도 동일하게 공격력과 방어력을 넣어줍시다.

 

internal class User
{
    public bool IsDead { get; set; }
    public string Name { get; set; }
    public int Health { get; set; }
    public int Attack { get; set; }
    public int Guard { get; set; }

    public User()
    {
        this.IsDead = false;
        this.Name = string.Empty;
        this.Health = 100;
        this.Attack = 10;
        this.Guard = 1;
    }
}

 

자, 그럼 이제 사용자가 던전에 들어가 몹을 만나며 대결을 펼치겠죠.

RPG게임을 해보셨다면 한번 게임 화면을 떠올려 보세요.   또 어떤게 필요할까요?

저는 언듯 생각나는게, 바로 "스킬"과 "레벨업" 입니다.

 

스킬과 레벨업이 존재하기 위해서, 일단 User.cs 에는 Level 이란 개념을 추가해 줍시다.

 

internal class User
{
    public bool IsDead { get; set; }
    public string Name { get; set; }
    public int Health { get; set; }
    public int Attack { get; set; }
    public int Guard { get; set; }
    public int Level { get; set; }

    public User()
    {
        this.IsDead = false;
        this.Name = string.Empty;
        this.Health = 100;
        this.Attack = 10;
        this.Guard = 1;
        this.Level = 1;
    }
}

 

레벨(Level)은 1부터 시작해야겠죠.

 

보통 이런 게임을 만들때는 일정 경험치에 도달하면 레벨이 오르는 것을 레벨링 시스템이라고 합니다.

하지만 본문에서는 게임을 단순화 하기 위해 그런 레벨링 시스템을 사용할 순 없고, 그냥 몹 1마리 잡을 때마다 1레벨씩 상승하는 것으로 합시다.

최종 보스에게 도달하게 되면 레벨이 총 20이 올라, 21이 되어 있겠죠?

 

다음은 이제 스킬을 이야기할 차례입니다.

RPG에서는 레벨업에 따라 사용할 수 있는 스킬이 다양해 지지만, 본 게임은 예제 게임인 만큼 그런 것들을 구현하지는 않겠습니다.

 

주인공에게는 3개의 스킬을 주고, 각 몹은 1개의 스킬을 주겠습니다.

그리고 최종 보스에게는 주인공과 똑같이 3개의 스킬을 주는 것으로 하죠.

 

스킬은 일반 공격보다 강력하지만, 만약 그저 강력하기만 하다면 스킬만 쓰지 일반 공격을 할 필요가 없을 겁니다.

그래서 여기서 저는 한가지 규칙을 세울 겁니다.

 

일반 공격은 적중률 100%에 무조건 피해를 주지만, 스킬은 성공했을 경우 강력한 피해를 주지만, 실패할 경우 피해가 0이라는 조건을 거는 거죠.

그리고 각 스킬은 확률을 가질 겁니다.  확률이 희박할 수록 더 강력할 것이고, 확률이 높을 수록 약한 공격이 될 겁니다.

 

여기서 우리는 나누어 볼 수 있는 것이 바로 "공격"이라는 행위와 "피해"라는 요소입니다.

이 두가지를 합해서 우리는 하나의 클래스를 새롭게 만들 겁니다.

그건 바로 손(Damage)라는 클래스입니다.  Entities 폴더에 Damage.cs 파일을 추가해 봅시다.

 

internal class Damage
{
    public int Attack { get; set; }

    public int Chance { get; set; }

    public Damage()
    {
        this.Attack = 0;
        this.Chance = 0;
    }
}

 

여기에는 일단 공격(Attack)과 확률(Chance)를 넣어둡니다.

그리고 만들면서 이 클래스를 다듬어 봅시다.

 

이 클래스가 오고가며 서로에게 피해를 주고, 피해가 0이 되면 죽습니다.

플레이어가 이기면 레벨업을 하면서 요소들이 초기화 되고, 다음 몹을 만납니다.

플레이어가 지면 게임이 종료됩니다.

 

이것이 이 게임이 가진 기본적인 줄거리입니다.

 

다음 시간에는 이제 게임의 진입점부터 차례대로 만들어 나가 봅시다.

반응형