Juego del Ahorcado (Hangman) en Python

Vamos a crear un juego clásico y muy divertido: el Ahorcado (Hangman).

Este es un excelente proyecto para principiantes porque utiliza conceptos fundamentales de Python como:

  • Variables
  • Bucles (while)
  • Condicionales (if, else)
  • Listas
  • Entrada del usuario (input)
  • Módulos (random)

El Juego: Ahorcado

El objetivo del juego es adivinar una palabra secreta letra por letra antes de agotar todos los intentos. Cada vez que el jugador falla, se dibuja una parte del «muñeco» en la horca.

Código Completo

Aquí tienes el código completo. Puedes copiarlo y pegarlo en un archivo llamado ahorcado.py y ejecutarlo.

import random

def jugar_ahorcado():
    """
    Función principal que contiene la lógica del juego del Ahorcado.
    """
    # --- 1. Configuración Inicial ---
    
    # Lista de palabras posibles para adivinar
    palabras_secretas = ["python", "programacion", "computadora", "desarrollador", "inteligencia", "algoritmo", "variable", "funcion"]
    
    # Elegir una palabra al azar de la lista
    palabra_secreta = random.choice(palabras_secretas)
    
    # Variables para el estado del juego
    letras_adivinadas = [] # Almacenará las letras que el jugador ha adivinado correctamente
    intentos_maximos = 6
    intentos_realizados = 0
    
    # "Dibujo" del ahorcado en cada etapa
    etapas_ahorcado = [
        """
           -----
           |   |
               |
               |
               |
               |
        =========
        """,
        """
           -----
           |   |
           O   |
               |
               |
               |
        =========
        """,
        """
           -----
           |   |
           O   |
           |   |
               |
               |
        =========
        """,
        """
           -----
           |   |
           O   |
          /|   |
               |
               |
        =========
        """,
        """
           -----
           |   |
           O   |
          /|\\  |
               |
               |
        =========
        """,
        """
           -----
           |   |
           O   |
          /|\\  |
          /    |
               |
        =========
        """,
        """
           -----
           |   |
           O   |
          /|\\  |
          / \\  |
               |
        =========
        """
    ]

    # --- 2. Bucle Principal del Juego ---
    
    while intentos_realizados < intentos_maximos:
        # Mostrar el estado actual del juego
        palabra_oculta = ""
        for letra in palabra_secreta:
            if letra in letras_adivinadas:
                palabra_oculta += letra + " "
            else:
                palabra_oculta += "_ "
        
        print("\n" + "="*20)
        print("¡Juego del Ahorcado!")
        print(etapas_ahorcado[intentos_realizados])
        print(f"Palabra: {palabra_oculta.strip()}")
        print(f"Intentos restantes: {intentos_maximos - intentos_realizados}")
        
        # Verificar si el jugador ha ganado
        if "_" not in palabra_oculta:
            print("\n¡Felicidades! ¡Has adivinado la palabra!")
            print(f"La palabra era: {palabra_secreta}")
            break

        # --- 3. Obtener y Procesar la Entrada del Usuario ---
        
        intento = input("Adivina una letra: ").lower()

        # Validar que la entrada sea una sola letra y que no se haya intentado antes
        if len(intento) != 1 or not intento.isalpha():
            print("Por favor, introduce una única letra válida.")
            continue
        
        if intento in letras_adivinadas:
            print(f"Ya has intentado la letra '{intento}'. Intenta con otra.")
            continue

        # Comprobar si la letra está en la palabra secreta
        if intento in palabra_secreta:
            print(f"¡Bien hecho! La letra '{intento}' está en la palabra.")
            letras_adivinadas.append(intento)
        else:
            print(f"¡Oh no! La letra '{intento}' no está en la palabra.")
            intentos_realizados += 1

    # --- 4. Fin del Juego ---
    
    # Si el bucle termina porque se agotaron los intentos
    if intentos_realizados == intentos_maximos:
        print("\n" + "="*20)
        print(etapas_ahorcado[intentos_realizados])
        print("¡Lo siento! Te has quedado sin intentos.")
        print(f"La palabra secreta era: {palabra_secreta}")
        print("¡Mejor suerte la próxima vez!")

# --- Iniciar el juego ---
if __name__ == "__main__":
    jugar_ahorcado()

Explicación Paso a Paso

1. Configuración Inicial

import random

Importamos el módulo random para poder elegir una palabra al azar de nuestra lista.

palabras_secretas = ["python", "programacion", ...]
palabra_secreta = random.choice(palabras_secretas)

Creamos una lista con las palabras posibles y random.choice() selecciona una de ellas para que sea nuestra palabra secreta en esta partida.

letras_adivinadas = []
intentos_maximos = 6
intentos_realizados = 0
  • letras_adivinadas: Una lista vacía que guardará las letras correctas que el jugador vaya encontrando.
  • intentos_maximos: El número de errores que el jugador puede cometer antes de perder.
  • intentos_realizados: Un contador que empieza en 0 y aumenta con cada fallo.
etapas_ahorcado = [ ... ]

Esta es una lista de strings. Cada string es una «etapa» del dibujo del ahorcado. Usamos el índice intentos_realizados para mostrar el dibujo correspondiente.

2. Bucle Principal del Juego

while intentos_realizados < intentos_maximos:

El juego continuará mientras el jugador no haya agotado sus 6 intentos.

palabra_oculta = ""
for letra in palabra_secreta:
    if letra in letras_adivinadas:
        palabra_oculta += letra + " "
    else:
        palabra_oculta += "_ "

Este bloque construye la cadena que se le muestra al jugador. Recorre cada letra de la palabra_secreta. Si la letra ya ha sido adivinada (está en la lista letras_adivinadas), la muestra. De lo contrario, muestra un guion bajo (_).

if "_" not in palabra_oculta:
    print("\n¡Felicidades! ¡Has adivinado la palabra!")
    break

Después de mostrar la palabra oculta, comprobamos si aún quedan guiones bajos. Si no hay ninguno, significa que el jugador ha adivinado todas las letras, por lo que ha ganado. break sale del bucle while.

3. Obtener y Procesar la Entrada del Usuario

intento = input("Adivina una letra: ").lower()

Pedimos al usuario que introduzca una letra y usamos .lower() para convertirla a minúscula. Así, el juego no distingue entre ‘A’ y ‘a’.

if len(intento) != 1 or not intento.isalpha():
    print("Por favor, introduce una única letra válida.")
    continue

Hacemos una validación simple: nos aseguramos de que el usuario haya escrito exactamente un carácter y que sea una letra. Si no es así, continue salta al siguiente ciclo del bucle, pidiendo la entrada de nuevo.

if intento in palabra_secreta:
    print(f"¡Bien hecho! La letra '{intento}' está en la palabra.")
    letras_adivinadas.append(intento)
else:
    print(f"¡Oh no! La letra '{intento}' no está en la palabra.")
    intentos_realizados += 1

Esta es la lógica central:

  • Si la letra está en la palabra secreta: Se felicita al jugador y se añade la letra a la lista letras_adivinadas.
  • Si la letra no está: Se informa del fallo y se incrementa el contador de intentos_realizados.

4. Fin del Juego

if intentos_realizados == intentos_maximos:
    print("¡Lo siento! Te has quedado sin intentos.")
    print(f"La palabra secreta era: {palabra_secreta}")

Si el bucle while termina porque la condición intentos_realizados < intentos_maximos se volvió falsa, significa que el jugador perdió. Mostramos el mensaje de derrota y la palabra secreta.

¿Cómo ejecutar el juego?

  1. Abre un editor de texto (como VS Code, Sublime Text, o incluso el Bloc de Notas).
  2. Copia y pega el código anterior.
  3. Guarda el archivo con el nombre ahorcado.py.
  4. Abre una terminal o línea de comandos.
  5. Navega hasta el directorio donde guardaste el archivo.
  6. Ejecuta el siguiente comando:
python ahorcado.py

¡Y listo! Ya puedes empezar a jugar.

Mejoras Posibles

Si quieres seguir practicando, puedes intentar añadir estas funcionalidades:

  • Más palabras: Añade más palabras a la lista palabras_secretas.
  • Categorías: Crea diferentes listas de palabras (animales, países, etc.) y deja que el jugador elija una categoría.
  • Dificultad: Permite al jugador elegir la dificultad, lo que cambiaría el número de intentos_maximos.
  • Interfaz gráfica: Cuando te sientas más cómodo, podrías usar librerías como Tkinter o Pygame para crear una versión visual del juego.