Перейти к содержанию

🗒 Задача

Для игры требуется создать класс игрока. С полями: имя, здоровье и сила удара. Здоровье должно изменяться только через методы получения урона и лечения.

Добавить приватный метод, который вызывается, если при получении урона заканчивается здоровье. Смерть обнуляет силу удара, здоровье и не позволяет лечиться.

Сымитируй бой, вызвав несколько раз методы урона и лечения. В конце игрок должен умереть.

❌ Ошибки

  • не делают все поля класса приватными (нет до конца понимания) – рекомендовать привыкать всегда делать приватными

  • не делают метод умертвления приватным

✏️ Комментарии

Мы ведь нигде не обращаемся извне к этой переменной, поэтому лучше привыкать все поля делать приватными по умолчанию.
Следует вычитать из здоровья абсолютное значение дамага (есть функция).
Предлагаю добавить проверку на ограничение максимального здоровья, чтобы не превысить лимит здоровья.
Корректнее называть в инфинитиве. То есть не "лечение", а "лечить".
Смерть обнуляет силу удара, здоровье и **не позволяет лечиться**.
Boolean переменные (названия) должны отвечать на определенный вопрос. На который можно ответить да/нет. Тогда оно будет будет понятным и релевантным. Например, `isAlive`.
Персонажа заставляют умереть при каждом получении урона. Надо бы вынести вызов этой функции в отдельное условие
Лучше соблюдать очередность расположения приватных/публичных функций. Приватные рекомендуется размещать ближе к концу тела класса)
Согласно ТЗ метод смерти должен быть не доступен извне класса. Необходимо инкапсулировать.

🧾 Решение

class Player(
    val name: String,
    private var health: Int,
    private var attackPower: Int
) {
    fun receiveDamage(damage: Int) {
        if (health <= 0) {
            println("$name уже мертв и не может получать урон.")
            return
        }

        health -= damage
        println("$name получил урон $damage. Здоровье: $health")

        if (health <= 0) {
            die()
        }
    }

    fun heal(healing: Int) {
        if (health <= 0) {
            println("$name мертв и не может быть исцелен.")
            return
        }

        health += healing
        println("$name исцелен на $healing. Здоровье: $health")
    }

    private fun die() {
        attackPower = 0
        health = 0
        println("$name умер. Сила удара и здоровье обнулены.")
    }

    fun printStatus() {
        println("$name: Здоровье - $health, Сила удара - $attackPower")
    }
}

fun main() {
    val player = Player("Герой", 100, 20)

    player.printStatus()
    player.receiveDamage(30)
    player.heal(10)
    player.receiveDamage(50)
    player.heal(5)
    player.receiveDamage(35)
    player.printStatus()
}