🗒 Задача¶
Для игры требуется создать класс игрока. С полями: имя, здоровье и сила удара. Здоровье должно изменяться только через методы получения урона и лечения.
Добавить приватный метод, который вызывается, если при получении урона заканчивается здоровье. Смерть обнуляет силу удара, здоровье и не позволяет лечиться.
Сымитируй бой, вызвав несколько раз методы урона и лечения. В конце игрок должен умереть.
❌ Ошибки¶
-
не делают все поля класса приватными (нет до конца понимания) – рекомендовать привыкать всегда делать приватными
-
не делают метод умертвления приватным
✏️ Комментарии¶
Мы ведь нигде не обращаемся извне к этой переменной, поэтому лучше привыкать все поля делать приватными по умолчанию.
Предлагаю добавить проверку на ограничение максимального здоровья, чтобы не превысить лимит здоровья.
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()
}