Шаг 90.
Основы Kotlin.
Числа. Целочисленные значения

    На этом шаге мы приведем пример использования целочисленных значений.

    Ранее мы узнали, что целочисленное значение - это число, не имеющее дробной части, то есть целое число, и в Kotlin оно представлено типом Int. Int хорошо подходит для выражения качественных или количественных показателей: остатков пинт меда, числа посетителей таверны или количества монет у игрока.

    Настало время немного покодить. Откройте Tavern.kt и добавьте переменные типа Int для представления количества золотых и серебряных монет у игрока в кошельке. Раскомментируйте вызов placeOrder() с заказом напитка Dragon's Breath и удалите заказ напитка Shirley's Temple.

    Добавьте заготовку функции performPurchase(), которая будет обрабатывать логику покупки, и функцию, отображающую содержимое кошелька игрока. Вызовите новую функцию performPurchase() в placeOrder().

const val TAVERN_NAME = "Taernyl's Folly"

var playerGold = 10
var playerSilver = 10

fun main() {
    placeOrder("shandy,Dragon's Breath,5.91")
    // placeOrder("elixir,Shirley's Temple,4.12")
}

fun performPurchase() {
    displayBalance()
}

private fun displayBalance() {
    println("Player's purse balance: Gold: $playerGold, Silver: $playerSilver")
}


private fun placeOrder(menuData: String) {
    val indexOfApostrophe = TAVERN_NAME.indexOf('\'')
    val tavernMaster = TAVERN_NAME.substring(0 until indexOfApostrophe)
    println("Madrigal speaks with $tavernMaster about their order.")
    val (type, name, price) = menuData.split(',')
    val message = "Madrigal buys a $name ($type) for $price."
    println(message)

    performPurchase()

    val phrase = if (name == "Dragon's Breath") {
        "Madrigal exclaims: ${toDragonSpeak("Ah, delicious $name!")}"
    } else {
        "Madrigal says: Thanks for the $name."
    }
    println(phrase)
}

private fun toDragonSpeak(phrase: String) =
        phrase.replace(Regex("[aeiouAEIOU]")) {
            when (it.value) {
                "a", "A" -> "4"
                "e", "E" -> "3"
                "i", "I" -> "1"
                "o", "O" -> "0"
                "u", "U" -> "|_|"
                else -> it.value
            }
}
Файл с проектом можно взять здесь.


Рис.1. Изменение приложения (Tavern.kt)

    Обратите внимание: вы использовали Int для передачи количества монет игрока. Максимальное количество монет в кошельке (и в известной части вселенной NyetHack) значительно меньше максимального значения Int в 2147483647.

    Запустите Tavern.kt. Вы еще не реализовали логику оплаты заказа игроком, поэтому в этот раз герой получает свой заказ за счет заведения:

  Madrigal speaks with Taernyl about their order. 
  Madrigal buys a Dragon's Breath (shandy) for 5.91. 
  Player's purse balance: Gold: 10 , Silver: 10 
  Madrigal exclaims: Ah, d3l1c10|_|s Dr4g0n's Br34th!


Рис.2. Результат работы приложения

    На следующем шаге мы рассмотрим дробные числа.




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