Juego en python: el ahorcado (part 1)

Juego ahorcado en python
Juego del ahorcado en Python

En esta entrega vamos a realizar un juego muy conocido, el ahorcado. Como vengo diciendo en los capítulos anteriores, esta entrega pretende ser una traducción al español y a la versión 2.7 del libro: http://inventwithpython.com.
Una ves terminado el juego, publicare su diagrama de flujo con dos fines: el primero, entender mejor la idea del juego y segundo, aprender a realizar diagramas de flujo.

También decir que el juego puede que sufra modificaciones si lo veo conveniente o según sus sugerencias.

Los temas tratados en este juego:

  • Métodos
  • El método de las listas append()
  • Los métodos de las cadenas: lower() y upper()
  • El método de la lista reverse()
  • El método de cadena split()
  • La función range()
  • La función list()
  • El bucle for in
  • Declaración elif
  • Los métodos de cadena startswhit() y endswhit()
  • El tipo de dato diccionario
  • Asignación de variables múltiples, ej: a, b, c = [1, 2, 3]

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random
AHORCADO = ['''
      +---+
      |   |
          |
          |
          |
          |
    =========''', '''
      +---+
      |   |
      O   |
          |
          |
          |
    =========''', '''
      +---+
      |   |
      O   |
      |   |
          |
          |
    =========''', '''
      +---+
      |   |
      O   |
     /|   |
          |
          |
    =========''', '''
      +---+
      |   |
      O   |
     /|  |
          |
          |
    =========''', '''
      +---+
      |   |
      O   |
     /|  |
     /    |
          |
    =========''', '''
      +---+
      |   |
      O   |
     /|  |
     /   |
          |
    ========='''
]
palabras = 'sombra animal django oveja aprender ejercicios caballo perro vaca computadora python abeja diente conejo mantel mesa basura escritorio ubuntu gorro parque amuleto cama cuarto descargar curso diario pythondiario vaso cuadro foto revista esdrujula parlantes radio tutorial banana naranja manzana celular casco ventana silla pileta juegos televisor heladera modulos cocina timbre lavarropas estufa enchufe futbol pelota pizarron cargador factura papel impresora telefono remedio planta vegetal aves luna electricidad copa fernet google lenguaje internet esposa jarra microondas manual sarten cortina musica pato'.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 = raw_input()
        letra = letra.lower()
        if len(letra) != 1:
            print 'Introduce una sola letra.'
        elif letra in algunaLetra:
            print 'Ya has elegido esa letra, elige 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 raw_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 gano
        letrasEncontradas = True
        for i in range(len(palabraSecreta)):
            if palabraSecreta[i] not in letraCorrecta:
                letrasEncontradas = False
                break
        if letrasEncontradas:
            print ('Si! 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

En los próximos capítulos seguiré con el análisis del juego. Los invito a comentar por sugerencias, dudas o lo que se les ocurra...

Segunda parte del juego el ahorcado

  1. PythonDiario dice:

    Este comentario ha sido eliminado por el autor.

  2. Anónimo dice:

    estaría padre que en futuros juegos explicaras cuál debe ser el resultado al ejecutar el juego para que los lectores y aprendices intenten crearlo por si mismos

    1. PythonDiario dice:

      Muy buena tu propuesta. Lo único que los juegos me parecen medios largos para los que recién se están iniciando y eso puede complicar un poco su desarrollo. Saludos

    2. Anónimo dice:

      hi 🙂

    3. Anónimo dice:

      vaya pta mierda de juego

  3. Anónimo dice:

    debería ser uno grafico

  4. PythonDiario dice:

    Dentro de poco empezare a realizar juegos gráficos en python. Saludos

  5. Unknown dice:

    sta muy buen pura vida

  6. pan mitzuko dice:

    hola!!!.... gracias el tuyo esta muy completo y sin utilizar graficos ... eres muy bueno.... jjajaa mi examen final es programar un juego, el de la ranita que pasaba la calle sin ser atropellada por los autos !!!... estare muy agadecida si me ayudas

  7. csgoknives dice:

    Este comentario ha sido eliminado por el autor.

  8. csgoknives dice:

    Recién estoy empezando en Python 2.7, podrías enseñar a crear matrices, triángulos, cuadrados con puros 1,0 usando listas,funciones,decisiones,etc que sea entendible por alguien que recien esta empezando.

  9. Unknown dice:

    E we, esa tarea te la dejó Cedano?

  10. Anónimo dice:

    a cabron no esta mal, quizas te la rifaste al hacer un ahorcado tan perro, muchas gracias , real hasta la muerte brrrrrrrrrrrrrrrrr.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey