Vítejte v dalším díle věnovaném jazyku Kotlin, kde si ukážeme, jak psát nabušené GUÍ-tka založené na JavaFX za pomocí výborného frameworku TornadoFX. Náš výsledek bude vypadat takto a celé nakódění nám nezabere déle jak 30 minut:

Vítejte v dalším díle věnovaném jazyku Kotlin, kde si ukážeme, jak psát nabušené GUÍ-tka založené na JavaFX za pomocí výborného frameworku TornadoFX. Náš výsledek bude vypadat takto a celé nakódění nám nezabere déle jak 30 minut:

Rád s nadsázkou říkávám, že Kotlin je tak produktivní, že občas už ani sám nevím, co bych v něm dál napsal, neboť jak by se na Ostravsku řeklo “bo všecko je už zrobene” 🙂 . A tak jsem si při příležitosti víkendové nudy řekl, že si jen tak napíšu jednoduchou konzolovou hru Hangman (Šibenice/Oběšenec). Pokud byste dokázali kód refaktorovat do ještě lepší podoby, podělte se v komentářích 🙂 , nicméně tady to je a přeji příjemnou zábavu:
package com.svetylkovo.games.hangman
object Hangman {
private var remainingWrongAttempts = 5
private var word = ""
private val guessedLetters = mutableSetOf<Char>()
private val wrongGuesses = mutableSetOf<Char>()
@JvmStatic
fun main(args: Array<String>) {
println("Let's play Hangman!")
println("Type a word to be guessed:")
word = readLine()?.nullIfBlank() ?: "HANGMAN"
clearScreen()
println("\nStart guessing!\n")
while (remainingWrongAttempts > 0) {
val hiddenWord = getHiddenWord()
if ('_' !in hiddenWord) {
println("You did it!")
return
}
println("Word: ${hiddenWord.replace(Regex("."), "$0 ")}")
printWrongGuesses()
println("Remaining wrong attempts: $remainingWrongAttempts")
println("Guess a letter:")
val letter = readLine()?.nullIfBlank()
?.toUpperCase()
?.first()
if (letter != null) {
guessedLetters += letter
if (letter in word) {
println("\nCorrect!\n")
} else {
println("\nWrong!\n")
wrongGuesses += letter
remainingWrongAttempts--
}
}
}
println("You've been hanged! :-(")
}
private fun printWrongGuesses() {
if (wrongGuesses.isNotEmpty()) {
println("Wrong guesses: ${wrongGuesses.joinToString(", ")}")
}
}
private fun getHiddenWord() = word.map { letter ->
if (letter in guessedLetters) letter else '_'
}.joinToString("")
private fun clearScreen() = repeat(25) { println() }
private fun String.nullIfBlank() = if (isBlank()) null else this
}