Juego del Ahorcado para consola
En esta entrada publicamos una versión muy básica pero funcional del clásico juego de lápiz y papel El Ahorcado para consola. Este código fue escrito hace unos cuantos meses como mero entretenimiento y para familiarizarnos con Kotlin, y quizá este pequeño programa fue el germen de la app para Android que recientemente hemos publicado en F-Droid, aunque más que otra cosa sirvió como idea de proyecto.
Posiblemente el código es muy mejorable, pero quiero igualmente compartir aquí esta versión comentada por si a alguien que está empezando con Kotlin le parece de interés. Además puede servir para repasar conceptos vistos en entradas anteriores.
La dinámica del juego consiste en que un jugador escribe la palabra secreta y otro jugador intenta descubrirla antes de morir en la horca (al tercer error). Para que la palabra secreta no se visualice en pantalla cuando se escribe se utiliza System.console().readPassword("Introduce la palabra secreta: ") lo que obliga a ejecutar el programa desde consola de esta manera (no funciona ejecutando desde IntelliJ IDEA):
kotlinc ahorcado.kt kotlin AhorcadoKt
/* * ahorcado.kt * Juego simple 'El Ahorcado' para consola con Kotlin * Creado en 2018 para Kotlin Doc * Requiere desde consola: * 1. compilar con: kotlinc ahorcado.kt * 2. ejecutar con: kotlin AhorcadoKt */ // caracteres admitidos para palabra y letras val LETRAS = ('A'..'Z') + 'Ñ' // mensajes bienvenida y game over fun escribeMensaje(mensaje: String) { for (i in 1..mensaje.length) print("*") println("\n$mensaje") for (i in 1..mensaje.length) print("*") println() } // control palabra introducida fun control(pal: String): Boolean { if (pal.length < 3) { println("Una palabra de al menos 3 letras. Inténtalo otra vez.") return false } pal.forEach { if (it !in LETRAS) { println("Palabra no reconocida.") return false } } return true } // pide y devuelve la palabra secreta fun getSecreta(): String { var enter = "" val console = System.console() // val console: Console? = System.console() when (console) { null -> { println("ERROR: No detectada consola. Compila y ejecuta desde consola.") System.exit(-1) } else -> { do { val pw = console.readPassword("Introduce la palabra secreta: ") enter = pw.joinToString("").toUpperCase() } while (!control(enter)) } } return enter } // pide y comprueba la letra fun inputLetra(): String { do { print("Una letra: ") val letra = readLine().toString().toUpperCase() if (letra.length != 1 || letra.single() !in LETRAS) { println("Letra no reconocida. Inténtalo otra vez.") } else { return letra } } while (true) } // INICIO fun main(args: Array<String>) { if (args.isEmpty()) escribeMensaje("BIENVENIDO AL JUEGO DEL AHORCADO") val secreta = getSecreta() val oculta = Array(secreta.length) { "_" } oculta.forEach { print("$it ") } println() // JUEGO val letrasUsadas: MutableList<String> = mutableListOf() var error = 0 var acierto = 0 do { // bucle de pedir letra (hasta victoria o errores = 3) val letra = inputLetra() // comprueba si la letra ya se ha utilizado if (letrasUsadas.contains(letra)) { println("La letra $letra ya la has dicho.") print("Letras usadas: ") letrasUsadas.forEach { print("$it ") } println() oculta.forEach { print("$it ") } println() } else { letrasUsadas.add(letra) // comprueba si la letra es acierto o error if (letra in secreta) { // ACIERTO acierto++ for (index in secreta.indices) { if (letra == secreta[index].toString()) oculta[index] = letra // oculta.set(index, letra) } oculta.forEach { print("$it ") } println() if (secreta == oculta.joinToString(separator = "")) { // if("_" !in oculta) if(oculta.all {it != "_"}) println("VICTORIA") break } } else { // ERROR error++ println("ERROR $error") if (error == 3) println("Has muerto en la horca. La palabra era $secreta") } } } while (error < 3) otra() } fun otra() { var otraPartida: String do { print("¿Otra partida? (S/N): ") otraPartida = readLine().toString().toUpperCase() } while (otraPartida != "S" && otraPartida != "N") if (otraPartida == "S") { main(args = arrayOf("otra")) } else { escribeMensaje("GAME OVER") } }
******************************** BIENVENIDO AL JUEGO DEL AHORCADO ******************************** Introduce la palabra secreta: _ _ _ _ _ _ Una letra: a ERROR 1 Una letra: e _ _ _ E _ _ Una letra: n _ _ N E _ _ Una letra: i ERROR 2 Una letra: o _ O N E _ O Una letra: e La letra E ya la has dicho. Letras usadas: A E N I O _ O N E _ O Una letra: c C O N E _ O Una letra: j C O N E J O VICTORIA ¿Otra partida? (S/N): n ********* GAME OVER *********
Comentarios
Publicar un comentario