На этом шаге мы продолжим рефакторинг NyetHack.
Далее рассмотрим функции, объявленные в Game.kt. Функция printPlayerStatus() выводит текстовый интерфейс игры, поэтому в Game.kt ей самое место. Но auraColor() и formatHeathStatus() связаны с игроком, а не с игровым процессом. А значит, эти две функции должны принадлежать классу, а не функции main().
Переместите auraColor() и formatHeathStatus() в Player.
Рис.1. Удаляемые функции из main() (Game.kt)
Снова убедитесь, что объявления функций находятся в теле класса.
class Player { var name = "madrigal" get() = field.capitalize() private set(value) { field = value.trim() } var healthPoints = 89 val isBlessed = true private val isImmortal = false private fun auraColor(isBlessed: Boolean, healthPoints: Int, isImmortal: Boolean): String { val auraVisible = isBlessed && healthPoints > 50 || isImmortal val auraColor = if (auraVisible) "GREEN" else "NONE" return auraColor } private fun formatHealthStatus(healthPoints: Int, isBlessed: Boolean) = when (healthPoints) { 100 -> "is in excellent condition!" in 90..99 -> "has a few scratches." in 75..89 -> if (isBlessed) { "has some minor wounds but is healing quite quickly!" } else { "has some minor wounds." } in 15..74 -> "looks pretty hurt." else -> "is in awful condition!" } fun castFireball(numFireballs: Int = 2) = println("A glass of Fireball springs into existence. (x$numFireballs)") }
Рис.2. Добавление функций класса в Player (Player.kt)
Мы закончили копировать код, но осталось еще кое-что сделать в Player.kt и Game.kt.
На следующем шаге мы закончим рефакторинг приложения.