Blog
Juego en Python (El ahorcado)
- Publicado por: Rafael Fernandez
- Categoría: Blog Principiante Python Videojuegos

¡Bienvenido de vuelta! En esta ocasión, dentro del curso de videojuegos; te hemos traído esta sencilla y común opción a realizar. Este juego, conocido mayormente como “el ahorcado”, no conlleva mucho esfuerzo para su programación, ya que no necesitas usar librerías externas u otro recurso de esta naturaleza.
Para esta ocasión, usaremos la programación en Python para mostrar, por consola este famoso y entretenido juego. De esta manera, todos recordaremos este juego que todos jugamos en nuestra niñez.
Ahora te muestro como realizar, paso a paso el juego del ahorcado en Python 3.x.
Primera parte del juego
Esta primera parte del juego, es muy sencilla y básica. Aquí solamente importamos el módulo “random”; este modulo, nos será muy útil, para poder generar un dato aleatorio, para así elegir una palabra entre muchas. Estas palabras estarán contenidas en una lista que programaremos mas adelante.
Para hacer el juego mas interesante y parecido al original, le daremos a la variable “ahorcado”, un dibujo con el que le haremos saber al jugador si está siendo ahorcado o no.
Este recurso será usado mas adelante, cuando el jugador se equivoque al ofrecer una letra.
Primer paso
Aquí realizamos el pequeño dibujo. Para así mostrarle al jugador, si está ahorcado o no.
import random AHORCADO = [''' +---+ | | | | | | =========''', ''' +---+ | | O | | | | =========''', ''' +---+ | | O | | | | | =========''', ''' +---+ | | O | /| | | | =========''', ''' +---+ | | O | /|\ | | | =========''', ''' +---+ | | O | /|\ | / | | =========''', ''' +---+ | | O | /|\ | / \ | | =========''']
Segundo paso
Ahora le otorgaremos una serie de datos a “palabras”. Vamos a rellenarlo con todas y cada una de las palabras que serán usadas en nuestro juego.
Al iniciar una partida en nuestro juego, estas serán las palabras con las que nuestro programa nos pondrá a prueba.
Cuando iniciemos un juego estas serán las palabras que tomará nuestro programa para preguntarnos.
Luego vamos a definir una función denominada “buscarPalabraAleat” que nos da una palabra aleatoria de nuestra lista.
palabras = 'valor aprenderpython comida jugar python web programacion videojuegos computador perros mascota pies arbol libros dinero lapiz telefono amor discos software libre propio cancion collar sol luna juguete españa escuela universidad'.split() def buscarPalabraAleat(listaPalabras): # Esta funcion nos devolvera una palabra elegida aleatoriamente. palabraAleatoria = random.randint(0, len(listaPalabras) - 1) return listaPalabras[palabraAleatoria]
Tercer paso
En este paso, definiremos algunas funciones, que nos permitirán mostrar mensajes en la consola con la letra incorrecta. Además se nos mostrara un dibujo “distinto”. Ya que se irá completando, hasta estar totalmente ahorcado.
Mas adelante, haremos otra función que nos permita comprobar si la letra que ingresamos está repetida, y le pediremos que ingrese una letra diferente.
Esto podemos hacerlos mediante los comandos if, elif y else.
def displayBoard(AHORCADO, letraIncorrecta, letraCorrecta, palabraSecreta): print(AHORCADO[len(letraIncorrecta)]) print ("") fin = " " print ('Letras incorrectas:', fin) for letra in letraIncorrecta: print (letra, fin) print ("") espacio = '_' * len(palabraSecreta) for i in range(len(palabraSecreta)): # Aqui se reemplaza los espacios en blanco por la letra bien escrita if palabraSecreta[i] in letraCorrecta: espacio = espacio[:i] + palabraSecreta[i] + espacio[i+1:] for letra in espacio: # Mostrará la palabra secreta con espacios entre letras print (letra, fin) print ("") def elijeLetra(algunaLetra): # En esta parte se devuelve la letra que el jugador ingresó. Esta función hace que el jugador ingrese una letra y no cualquier otra cosa while True: print ('Adivina una letra:') letra = input() letra = letra.lower() if len(letra) != 1: print ('Introduce una letra a la ve.') elif letra in algunaLetra: print ('Ya nombraste esa letra ¿Qué tal si pruebas con una diferente?') elif letra not in 'abcdefghijklmnopqrstuvwxyz': print ('Ingresa una letra.') else: return letra
Cuarto paso
En este pedazo de código, que te muestro a continuación; desarrollaremos la función “empezar”. Con ella, sabremos si nuestro jugador quiere jugar de nuevo, o no.
Más adelante dejamos unos trozos de código dentro de los cuales vamos a añadir la opción de jugar de nuevo y mostrar mensajes para cuando el jugador pierde o gana. Para todo esto haremos uso de las funciones previas.
def empezar(): # Esta funcion devuelve True si el jugador quiere volver a jugar, de lo contrario devuelve False print ('Quieres jugar de nuevo? (Si o No)') return input().lower().startswith('s') print ('A H O R C A D O') letraIncorrecta = "" letraCorrecta = "" palabraSecreta = buscarPalabraAleat(palabras) finJuego = False while True: displayBoard(AHORCADO, letraIncorrecta, letraCorrecta, palabraSecreta) # El usuario elije una letra. letra = elijeLetra(letraIncorrecta + letraCorrecta) if letra in palabraSecreta: letraCorrecta = letraCorrecta + letra # Se fija si el jugador ganó letrasEncontradas = True for i in range(len(palabraSecreta)): if palabraSecreta[i] not in letraCorrecta: letrasEncontradas = False break if letrasEncontradas: print ('¡Muy bien! La palabra secreta es "' + palabraSecreta + '"! ¡Has ganado!') finJuego = True else: letraIncorrecta = letraIncorrecta + letra # Comprueba la cantidad de letras que ha ingresado el jugador y si perdió if len(letraIncorrecta) == len(AHORCADO) - 1: displayBoard(AHORCADO, letraIncorrecta, letraCorrecta, palabraSecreta) print ('¡Se ha quedado sin letras!\nDespues de ' + str(len(letraIncorrecta)) + ' letras erroneas y ' + str(len(letraCorrecta)) + ' letras correctas, la palabra era "' + palabraSecreta + '"') finJuego = True # Pregunta al jugador si quiere jugar de nuevo if finJuego: if empezar(): letraIncorrecta = "" letraCorrecta = "" finJuego = False palabraSecreta = buscarPalabraAleat(palabras) else: break
Con esto, hemos finalizado.
Sin embargo, para finalizar; te dejo aquí abajo el código completo. Así podrás copiarlo y pegarlo en tu consola, y probarlo y/o modificarlo. Recuerda, que lo mejor sería guiarte de el, y desarrollar tu propio código, que haga la misma función.
Código completo
import random AHORCADO = [''' +---+ | | | | | | =========''', ''' +---+ | | O | | | | =========''', ''' +---+ | | O | | | | | =========''', ''' +---+ | | O | /| | | | =========''', ''' +---+ | | O | /|\ | | | =========''', ''' +---+ | | O | /|\ | / | | =========''', ''' +---+ | | O | /|\ | / \ | | ========='''] palabras = 'valoracion aprenderpython comida juego python web imposible variable curso volador cabeza reproductor mirada escritor billete lapicero celular valor revista gratuito disco voleibol anillo estrella'.split() def buscarPalabraAleat(listaPalabras): # Esta funcion retorna una palabra aleatoria. palabraAleatoria = random.randint(0, len(listaPalabras) - 1) return listaPalabras[palabraAleatoria] def displayBoard(AHORCADO, letraIncorrecta, letraCorrecta, palabraSecreta): print(AHORCADO[len(letraIncorrecta)]) print ("") fin = " " print ('Letras incorrectas:', fin) for letra in letraIncorrecta: print (letra, fin) print ("") espacio = '_' * len(palabraSecreta) for i in range(len(palabraSecreta)): # Remplaza los espacios en blanco por la letra bien escrita if palabraSecreta[i] in letraCorrecta: espacio = espacio[:i] + palabraSecreta[i] + espacio[i+1:] for letra in espacio: # Mostrará la palabra secreta con espacios entre letras print (letra, fin) print ("") def elijeLetra(algunaLetra): # Devuelve la letra que el jugador ingreso. Esta función hace que el jugador ingrese una letra y no cualquier otra cosa while True: print ('Adivina una letra:') letra = input() letra = letra.lower() if len(letra) != 1: print ('Introduce una sola letra.') elif letra in algunaLetra: print ('Ya has elegido esa letra ¿Qué tal si pruebas con otra?') elif letra not in 'abcdefghijklmnopqrstuvwxyz': print ('Elije una letra.') else: return letra def empezar(): # Esta funcion devuelve True si el jugador quiere volver a jugar, de lo contrario devuelve False print ('Quieres jugar de nuevo? (Si o No)') return input().lower().startswith('s') print ('A H O R C A D O') letraIncorrecta = "" letraCorrecta = "" palabraSecreta = buscarPalabraAleat(palabras) finJuego = False while True: displayBoard(AHORCADO, letraIncorrecta, letraCorrecta, palabraSecreta) # El usuairo elije una letra. letra = elijeLetra(letraIncorrecta + letraCorrecta) if letra in palabraSecreta: letraCorrecta = letraCorrecta + letra # Se fija si el jugador ganó letrasEncontradas = True for i in range(len(palabraSecreta)): if palabraSecreta[i] not in letraCorrecta: letrasEncontradas = False break if letrasEncontradas: print ('¡Muy bien! La palabra secreta es "' + palabraSecreta + '"! ¡Has ganado!') finJuego = True else: letraIncorrecta = letraIncorrecta + letra # Comprueba la cantidad de letras que ha ingresado el jugador y si perdió if len(letraIncorrecta) == len(AHORCADO) - 1: displayBoard(AHORCADO, letraIncorrecta, letraCorrecta, palabraSecreta) print ('¡Se ha quedado sin letras!\nDespues de ' + str(len(letraIncorrecta)) + ' letras erroneas y ' + str(len(letraCorrecta)) + ' letras correctas, la palabra era "' + palabraSecreta + '"') finJuego = True # Pregunta al jugador si quiere jugar de nuevo if finJuego: if empezar(): letraIncorrecta = "" letraCorrecta = "" finJuego = False palabraSecreta = buscarPalabraAleat(palabras) else: break
Ahora vamos a hacer un análisis acerca de las estructuras y funciones que desarrollamos y utilizamos en la construcción de nuestro código, como lo son las listas en Python.
Módulo import random
Como tenemos que utilizar una palabra al azar, es importante usar este módulo. Con este módulo, se elegirá una palabra al azar, con la cual jugaremos.
AHORCADO = [''' +---+ | | | | | | =========''', '''
Realmente, el resto del código, es muy largo para colocarlo aqui; sin embargo, la variable AHORCADO, es utilizada hasta el final de la llave ].
Con esta línea de código, hacemos una asignación de variables, que se extiende a lo largo de distintas líneas.
Líneas múltiples en lenguaje Python
Generalmente, si escribimos texto en nuestro código, este se sitúa en una sola línea. Sin embargo, si utilizas un grupo de tres comillas dobles al comenzar, y al terminar nuestro texto, podemos hacer que ocupe varias líneas. Por ejemplo:
#Ejemplo: >>>prueba = """hola esto es una prueba utilizando tres comillas"""
Si nosotros, no tuviéramos el recurso de las líneas múltiples en Python, tendríamos que escribir nuestro texto en el código, usando el comando \n, para indicar cada salto de línea. Sin embargo, con esto, nuestro código sería menos entendible.
Listas en python
Las listas en Python, son simples variables capaces de contener o albergar, muchos valores dentro de sí. Probemos escribir el texto siguiente en un shell interactivo en Python:
>>>colores = ["rojo", "azul", "naranja"] >>>print colores ["rojo", "azul", "naranja"]
Las listas son un excelente recurso para almacenar varios valores en una sola variable. Cada valor individual almacenado dentro de la lista, se llama elemento.
Puedes utilizar corchetes para acceder a un elemento ubicado dentro de una lista. Prueba escribir esto: colores[0], colores[1], colores[2].
>>>colores[0]="rojo" >>>colores[1]="azul" >>>colores[2]="naranja"
Recuerda que el número contenido entre los corchetes es el subíndice, que define la posición de un elemento albergado dentro de la lista. En Python, el primer subíndice es 0, en vez del número 1. Así que el primer elemento de la lista tiene subíndice 0, el segundo elemento tiene subíndice 1, y el tercer elemento tendrá subíndice 2, y así sucesivamente.
¿Qué sucede si ingresamos un índice mayor al índice más grande de la lista?
>>>colores[3]
Salida en pantalla:
IndexError: list index out of range
Como habrás adivinado, si intentamos acceder a un índice más grande del que tenemos en una lista, se nos devolverá un error fatal.
Cambiar valores de una lista en python
También podemos usar estos corchetes para cambiar los valores de los elementos en una lista. Probemos hacer lo siguiente en este shell:
>>>colores = ["rojo", "azul", "naranja", "amarillo"] >>>colores[1] = "verde" >>>print colores ["rojo", "verde", "naranja", "amarillo"] ["rojo", "verde", "naranja", "amarillo"]
El segundo elemento de la lista colores, se ha cambiado por otro valor.
Concatenación de listas en python
Otra cosa que podemos hacer es unir una lista a otra, usando el operador “+”. Prueba escribir lo siguiente en el shell:
>>>[1, 2, 3, 4] + ["azul", "rojo"] + ["Marcela", "Maria"] [1, 2, 3, 4, "azul", "rojo", "Marcela", "Maria"]
Aquí podemos notar que la listas pueden contener distintos tipos de datos. En el ejemplo anterior apreciamos una lista con números enteros y cadenas de texto.
El operador in en Python
Este operador hace que sea muy fácil verificar si existe un elemento en una lista. Las expresiones que usan el operador in devuelven un valor booleano: Envían True si un elemento está en una lista, y False si no se encuentra.
Prueba hacer lo siguiente:
>>>colores = ["azul", "rojo", "naranja", "amarillo"] >>>"amarillo" in colores True
>>>"verde" in colores False
También puedes usar el operador in en una cadena de texto. Así puedes verificar si se encuentra una palabra específica.
>>>"hola" in "hola como estas?" True
Eliminar elementos de una lista en Python
Si quieres eliminar un elemento de una lista, usa el comando del.
Para probar, haremos una lista con números enteros, y eliminaremos uno de ellos:
>>>num = [1, 2, 3, 4, 5] >>>del num[0] #Borramos el primer elemento de la lista >>>num [2, 3, 4, 5]
Al hacer esto cambiarán los subíndices de los elementos de la misma, ya que se “rotaran” de lugar, en cierta manera.
¿Cómo hacer una lista de listas en Python?
Las listas también pueden estar constituidas por otras listas. Supongamos por un momento que tenemos una lista de países, una de nombres, y otra de ciudades. Se puede hacer una sola lista, que contenga a estas tres. Por ejemplo:
>>>paises = ["España", "Mexico", "Francia", "Italia", "Inglaterra"] >>>nombres = ["Jose", "Carlos", "Edgardo"] >>>ciudades = ["Milan", "Madrid"] >>>listaGeneral = [paises, nombres, ciudades] #Aqui tenemos tres listas dentro de una >>>listaGeneral [["España", "Mexico", "Francia", "Italia", "Inglaterra"] , ["Jose", "Carlos", "Edgardo""] , ["Milan", "Madrid"]]
Si queremos obtener un elemento de nuestra listaGeneral, podemos usar dos pares de corchetes: listaGeneral[0][2], y obtendremos como resultado “Francia”. Ya que el [0], significa subíndice 0 de listaGeneral, por lo tanto es la lista de países, el [2] es subíndice 2 de la lista de países, entonces el elemento a mostrar es “Francia”.
Esta es otra forma de hacerlo, con la que obtendríamos los mismos resultados:
>>>listaGeneral = [["España", "Mexico", "Francia", "Italia", "Inglaterra"] , ["Jose", "Carlos", "Edgardo""] , ["Milan", "Madrid"]] >>>paises = listaGeneral[0] #Le asignamos a paises la primera lista de listaGeneral >>>nombres = listaGeneral[1] #Le asignamos a nombres la segunda lista de listaGeneral >>>ciudades = listaGeneral[2] #Le asignamos a ciudades la tercera lista de listaGeneral
Espero hayas entendido y aprendido a como programar el juego del ahorcado en Python!
➡ Continúa aprendiendo sobre desarrollo de videojuegos con Python en nuestro Curso Python de Videojuegos:
[…] esta segunda parte del juego del ahorcado, (la primera parte está en este post Juego en Python (El ahorcado)). Vamos a hacer un análisis acerca de las estructuras y funciones que desarrollamos y utilizamos […]
buen codigo..me sale un error y no se como solucionarlo..me dise NameError: name ‘displayBoard’ is not defined
Hola Carlos, acabo correr el código y funciona perfecto. Revísalo de nuevo, saludos!
al querer jugar de nuevo no me sale, me vielde y me sale q si quiero jugar una y otra vez