Шаг 177.
Основы Kotlin.
Объекты. Объявления объектов (продолжение)

    На этом шаге мы продолжим формирование объекта Game.

    Посмотрите на игровую логику main() и подумайте, где она должна располагаться в Game. Например, нет смысла создавать новый экземпляр Player или новую комнату currentRoom в начале каждого раунда, поэтому эти части игровой логики должны находиться в Game, а не в play(). Объявите player и currentRoom как private-свойства Game.

    Далее, переместите вызов castFireball() в блок инициализации Game, чтобы сделать начало каждой партии в NyetHack веселее. Также перенесите объявление printPlayerStatus в Game. Добавьте модификатор private в объявление printPlayerStatus, а также player и currentRoom, чтобы инкапсулировать их внутри Game.

package com.bignerdranch.nyethack
import Player
import Room
import TownSquare

fun main() {
    println(currentRoom.description())
    println(currentRoom.load())

    // Состояние игрока
    printPlayerStatus(player)
    Game.play()
}

object Game {
    private val player = Player("Madrigal")
    private var currentRoom: Room = TownSquare()
    init {
        println("Welcome, adventurer.")
    }
    fun play() {
        while (true) {
            // Игровой процесс NyetHack
        }
    }
    fun printPlayerStatus(player: Player) {
        println("(Aura: ${player.auraColor()}) " +
                "(Blessed:  ${if (player.isBlessed) "YES" else "NO"})")
        println("${player.name} ${player.healthStatus()}")
}
Файл с проектом можно взять здесь.


Рис.1. Инкапсуляция свойств и функций внутри объявления объекта (Game.kt)

    Переместив код из функции main() в функцию play(), вы сохраните все необходимое для настройки игрового цикла в Game.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг