[Kotlin] 게임 만들기 기초 – 리니지 캐릭터 간 피해는 어떻게 계산될까?

0

게임 만들기

캐릭터 구성

오랜 역사를 자랑하는 게임, 리니지의 기사 캐릭터 구성은 어떻게 될까? 크게 분류하면 1. 체력 2. 무기 3. 방어구로 이뤄져 있다. 체력이 많을수록 상대방의 데미지를 오랫동안 버티며 0이 되면 사망한다. 그리고 무기의 종류에 따라 상대방에게 입히는 피해가 다르며, 방어구를 착용함에 있어 상대방에게 받는 피해가 감소된다.

[Kotlin] 게임 만들기 기초 - 리니지 캐릭터 간 피해는 어떻게 계산될까?
출처 : 리니지m 공식 홈페이지

클래스 만들기

그렇다면 위 3가지(체력, 무기, 방어구)로 구성된 기사 캐릭터는 어떻게 프로그래밍 될까? 이번 시간 목표는 기사와 몬스터 드래곤의 싸움을 코틀린을 통해 만들어 보겠다.

기사 클래스

class Knight(var hp: Int, val damage: Int, val armor: Int) {
    fun defense(hit: Int) {
        val hp_temp = hp
        hp += armor
        hp -= hit

        if (hp >= hp_temp) println("캐릭터: Miss!")
        else if (hp > 0 && hp < hp_temp) println("캐릭터: 체력이 $hp 남았습니다.")
        else println("캐릭터가 사망했습니다. 부활 하시겠습니까? (y/n)")
    }
}

위 코드를 보면 기사에게 필요한 값은 hp(체력), damage(공격력), armor(방어력)으로 정했다. 모두 숫자이므로 Int 함수 사용. 다음으로 상대방의 피해를 방어하는 함수(Function)를 defense로 선언한다.

defense를 보면 hp에 방어력을 먼저 더한다. 만약 상대방 공격력(hit)이 캐릭터 방어력보다 약하면, Miss가 뜬다. 이를 뚫기 위해 방어력 보다 높은 공격력이 필요하다. 여담으로 게임 시스템 중 방어구 관통(방관)은 위 방어력을 %로 감소시켜 피해량을 높여 준다. 만약 방어력이 높은 몬스터라면 방관을 높이면 쉽게 정복 가능하다.

드래곤 클래스

위 기사와 defense 부분은 거의 동일하다.

class Dragon(var hp: Int, val damage: Int, val armor: Int) {
    val monster: String = "드래곤"

    fun defense(hit: Int) {
        val hp_temp = hp
        hp += armor
        hp -= hit

        if (hp >= hp_temp) println("$monster: Miss!")
        else if (hp > 0 && hp < hp_temp) println("$monster: 체력이 $hp 남았습니다.")
        else println("$monster 를 처치했습니다.")
    }
}

약간 차이점이 있다면, 캐릭터 대신에 ‘드래곤’을 넣어준 정도.

공격 함수

받은 피해는 위와 같지만, 공격은 어떻게 해야 할까? 코드 먼저 보면,

// 기사 클래스
fun attact(dragon: Dragon) {
    dragon.defense(damage)
}
// 드래곤 클래스
fun attact(knight: Knight) {
    knight.defense(damage)
}

위 코드를 보면 공격은 상호 작용을 한다. 내가 공격한다면 적도 나를 공격하기 때문에 서로를 변수에 넣는다.

메인 함수 출력

체력 / 공격력 / 방어력 입력

fun main(array: Array<String>) {
    val knight: Knight = Knight(hp: 100, damage: 8, armor: 4)
    val blue_dragon: Dragon = Dragon(hp: 20, damage: 4, armor: 2)
    val green_dragon: Dragon = Dragon(hp: 20, damage: 7, armor: 2)
    val red_dragon: Dragon = Dragon(hp: 1000, damage: 40, armor: 10)

    knight.attact(blue_dragon)
    blue_dragon.attact(knight) // 4회 반복


    knight.attact(green_dragon)
    green_dragon.attact(knight) // 4회 반복


    knight.attact(red_dragon)
    red_dragon.attact(knight) // 3회 반복
}

아래에서 입력한 변수에 값을 넣으면, 블루 드래곤의 공격력(damage)은 기사의 방어력(armor)과 같기 때문에 기사는 피해를 입지 않는다. 그린 드래곤은 사냥하기 적합한 수준의 드래곤이다. 래드 드래곤의 경우 기사의 공격이 통하지 않으므로 피해야 하는 적이다.

[Kotlin] 게임 만들기 기초 - 리니지 캐릭터 간 피해는 어떻게 계산될까?

출력값

  • 블루 드래곤
[Kotlin] 게임 만들기 기초 - 리니지 캐릭터 간 피해는 어떻게 계산될까?
  • 그린 드래곤
[Kotlin] 게임 만들기 기초 - 리니지 캐릭터 간 피해는 어떻게 계산될까?
  • 래드 드래곤
[Kotlin] 게임 만들기 기초 - 리니지 캐릭터 간 피해는 어떻게 계산될까?

회신을 남겨주세요

귀하의 의견을 입력하십시오!
여기에 이름을 입력하십시오.