На этом шаге мы рассмотрим генерацию характеристик персонажа.
Теперь, когда мы определили 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.