Шаг 250.
Основы Kotlin.
Первое Android-приложение на Kotlin. Создание персонажа

    На этом шаге мы рассмотрим генерацию характеристик персонажа.

    Теперь, когда мы определили UI, настало время сгенерировать и вывести характеристики персонажа. Так как здесь основное внимание уделяется Android и Kotlin, а детали реализации рассматривались в прошлых шагах, мы быстро пройдемся по реализации CharacterGenerator. Добавьте новый файл в проект, щелкнув правой кнопкой на пакете com.bignerdranch.android.samodelkin и выбрав New | Kotlin File/Class.


Рис.1. Добавление нового файла в проект

    Присвойте новому файлу имя CharacterGenerator.kt и добавьте в него следующий код.

package com.example.samodelkin

private fun <T> List<T>.rand() = shuffled().first()

private fun Int.roll() = (0 until this)
    .map { (1..6).toList().rand() }
    .sum()
    .toString()
private val firstName = listOf("Eli", "Alex", "Sophie")
private val lastName = listOf("Lightweaver", "Greatfoot", "Oakenfeld")

object CharacterGenerator {
    data class CharacterData(val name: String,
                             val race: String,
                             val dex: String,
                             val wis: String,
                             val str: String)
    private fun name() = "${firstName.rand()} ${lastName.rand()}"
    private fun race() = listOf("dwarf", "elf", "human", "halfling").rand()
    private fun dex() = 4.roll()
    private fun wis() = 3.roll()
    private fun str() = 5.roll()
    fun generate() = CharacterData(name = name(),
        race = race(),
        dex = dex(),
        wis = wis(),
        str = str())
}


Рис.2. Объект CharacterGenerator (CharacterGenerator.kt)

    Объект CharacterGenerator содержит одну общедоступную функцию generate(), которая возвращает случайно сгенерированные характеристики персонажа в виде экземпляра класса CharacterData. Вы также определили два расширения, List<T>.rand и Int.roll, чтобы сократить код для выбора случайного элемента из коллекции и для случайного броска игральной кости заданное число раз.

    На следующем шаге мы рассмотрим класс Activity.




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