# perdiendo.org/museodemetralla

entraron en mi cabeza (201) | libros (20) | me lo llevo puesto (7) | pelis (2) | Renta básica (9) | series (6) | escasez (2) | frikeando (94) | arduino (1) | autoreferencial (11) | bici (1) | esperanto (4) | eve online (3) | git (2) | GNU/linux (4) | markdown (7) | nexus7 (2) | python (7) | raspberry pi (3) | vim (1) | wordpress (1) | zatchtronics (3) | hago (751) | canciones (153) | borradores (7) | cover (42) | el extremo inútil de la escoba (2) | elec (1) | GRACO (2) | guitarlele (11) | ruiditos (11) | Solenoide (1) | fotos (37) | nanowrimo (3) | novela (26) | criaturas del pantano (5) | el año que no follamos (12) | huim (5) | rehab (4) | poemas (352) | Anclajes (15) | andando (3) | B.A.R (7) | Canción de cuna para un borracho (38) | Cercos vacíos (37) | Cien puentes en la cabeza (7) | Conejo azul (6) | Contenido del juego (5) | De tiendas (3) | del pantano (3) | Destrozos (2) | Epilogo (4) | Fuegos de artificio (5) | Imposible rescate (15) | Jugando a rojo (7) | Libro del desencuentro (2) | Lo que sé de Marte (11) | Los cuentos (21) | Montaje del juego (5) | Orden de salida (4) | palitos (31) | Piernas abiertas (7) | Poemas medianos (12) | Privado de sueño (7) | rasguemas (5) | Tanto para nada (17) | Todo a 100 (2) | Uno (4) | relatos (96) | anatemas (9) | orbital (2) | prompts (8) | vindicaciones (103) | perdiendo (1.685) | atranques (1) |

súper ahorcado

Terminé el super ahorcado, lo podéis ver en pastebin o en continúa leyendo. Me queda pendiente decidir qué hacer con las palabras acentuadas en el modo pvp y si voy a dar como opción insertar frases. Me produce curiosidad cómo convertir los espacios en algún tipo de bloque. Ha sido súper divertido, aunque creo que me he empantanado ahí dentro algo de más. Ahora toca seguir hacia delante.

import random

'''
Objetivos:
1. Introducir la eleción dentro del bucle while
2. modo pve, con dos opciones:
    1.1. fácil: una palabra random en una lista elegida
    1.2. difícil: una palabra random en una lista tb random
3. modo pvp, permitiendo introducir una palabra y en un futuro también una frase
'''

'''
Diagrama de Flujo:
1. Presentación.
2. Elige un modo.
    2.1. Pve
        2.1.1. Palabra random en una lista elegida.
        2.1.2. Palabra random en una lista random.
    2.2. Pvp
3. Introducir una letra.
    3.1. La letra está en la palabra, marcarla en las letras_descubiertas
    3.2. La letra no está en la palabra, marcarla en letras letras_incorrectas
    3.3. ¿Le quedan intentos y no ha descubierto la palabra? Sigue jugando.
4. Resolución.
    4.1. ¿Ha descubierto todas las letras? Ha ganado.
    4.2. ¿Ha terminado con los intentos disponibles? Ha perdido.
5. Volver a jugar.
    5.1. ¿Sí? Reiniciar, poner a cero letras_descubiertas y letrasIncorrectas
    5.2. ¿No? Salir.
'''

# introducimos los estados del cadalso
IMÁGENES_AHORCADO = ['''

  +---+
  |   |
      |
      |
      |
      |
=========''', '''

  +---+
  |   |
  O   |
      |
      |
      |
=========''', '''

  +---+
  |   |
  O   |
  |   |
      |
      |
=========''', '''

  +---+
  |   |
  O   |
 /|   |
      |
      |
=========''', '''

  +---+
  |   |
  O   |
 /|\  |
      |
      |
=========''', '''

  +---+
  |   |
  O   |
 /|\  |
 /    |
      |
=========''', '''

  +---+
  |   |
  O   |
 /|\  |
 / \  |
      |
=========''']

# listas de palabras

ANIMALES = 'hormiga babuino tejon murcielago oso castor camello gato almeja cobra pantera coyote cuervo ciervo perro burro pato aguila huron zorro rana cabra ganso halcon leon lagarto llama topo mono alce raton mula salamandra nutria buho panda loro paloma piton conejo carnero rata cuervo rinoceronte salmon foca tiburon oveja mofeta perezoso serpiente araña cigüeña cisne tigre sapo trucha pavo tortuga comadreja ballena lobo wombat cebra'.split()
COLORES = 'rojo amarillo azul naranja violeta verde marron ambar añil beige bermellon blanco burdeos cafe caoba caqui carmesi castaño celeste cereza champan cartujo cian cobre coral crema fucsia granate gris hueso lavanda negro ocre oro pardo plata purpura rosa salmon turquesa aguamarina vino'.split()
PAISES = 'afganistan albania alemania andorra argelia armenia australia austria azerbaiyan banglades barbados bareain belgica bielorusia belice belarus benin bolivia bulgaria burundi butan camboya canada chad chequia chile china chipre colombia congo corea croacia cuba dinamarca ecuador egipto eslovaquia eritrea eslovenia españa usa filipinas etiopia finlandia fiyi francia gambia gabon georgia ghana grecia guatemala guinea guyana haiti honduras hungria india indonesia iran irlanda islandia israel italia jamaica japon jordania kazakistan kenia kirguistan kuwait laos lesoto letonia libano liberia libia liechtenstein lituania luxemburgo macedonia madagascar malasia malaui maldivas mali malta marruecos mauricio mauritania mejico micronesia moldavia monaco mongolia montenegro mozambique namibia nauru nepal nicaragua niger nigeria noruega oman pakistan palaos palestina papua peru polonia portugal uk ruanda rumania rusia samoa senegal serbia seychelles singapur siria somalia sudafrica sudan suecia suiza surinam tailandia tanzania taykistan timor togo tonga tunez turkmenistan turquia tuvalu ucrania uganda uruguay uzbekistan vanuatu venezuela vietnam yibuti zambia zimbaue'.split()

# lista global para el modo difícil

listas = ANIMALES + COLORES + PAISES # +, si haces una lista de listas con [] el random abarcara la totalidad de una lista, ojo

# función de elección pve

def lista_pve():
    while True:
        lista = input('''
    1. Animales 2. Colores 3. Paises
    ''')

        if lista == '1':
            lista_elegida = ANIMALES
            return lista_elegida

        elif lista == '2':
            lista_elegida = COLORES
            return lista_elegida

        elif lista == '3':
            lista_elegida = PAISES
            return lista_elegida

        else:
            print('no es una opción válida')

# función de elección general

def eleccion_lista():
    while True:
        modo = input('''
SUPER AHORCADO

1. Pve fácil 2. Pve difícil 3. Pvp
''')

        if modo == '1':
            lista_elegida = lista_pve() # te lleva a la función anterior para no enguarrinar el texto aquí
            return lista_elegida

        if modo == '2':
            lista_elegida = listas
            return lista_elegida

        if modo == '3':
            lista_elegida = [input('''
Escribe una palabra, sin acentos en esta versión del juego: ''')]
            return lista_elegida

        else: 
            print('Elige una opción correcta')

# random de la palabra en 1 y 2

def obtenerPalabraAlAzar(lista_de_palabras):
    índice_de_palabras = random.randint(0, len(lista_de_palabras) - 1)
    return lista_de_palabras[índice_de_palabras]

# presentación del tablero

def mostrarTablero(IMÁGENES_AHORCADO, letras_incorrectas, letras_correctas, palabra_secreta):
    print(IMÁGENES_AHORCADO[len(letras_incorrectas)])
    print('Letras incorrectas:', end=' ')
    for letra in letras_incorrectas:
        print(letra, end=' ')
    print()
    espacios_vacíos = '_' * len(palabra_secreta)
    for i in range(len(palabra_secreta)):
        if palabra_secreta[i] in letras_correctas: # hace dos lineas ha convertido todo en _, así que ahora comprueba todas las de la variable letrasCorrectas
            espacios_vacíos = espacios_vacíos[:i] + palabra_secreta[i] + espacios_vacíos[i+1:]
    for letra in espacios_vacíos:
        print(letra, end=' ')
    print()

# función para preguntarle una letra

def obtener_intento(letras_probadas):
    while True:
        print('Adivina una letra.')
        intento = input()
        intento = intento.lower()
        if len(intento) != 1:
            print('Por favor, introduce una sola letra.')
        elif intento in letras_probadas:
            print('Ya has probado esa letra, elige otra.')
        elif intento not in 'abcdefghiíjklmnñopqrstuvwxyz': # puedes meter áéíóú, pero serán letras diferentes
            print('Por favor, ingresa una LETRA.')
        else: # en cualquier otro caso
            return intento

# función para jugar de nuevo

def jugar_de_nuevo(): 
    print('¿Quieres jugar de nuevo (sí o no)') # imprimimos la pregunta
    return input().lower().startswith('s')

# empieza el juego

while True:
    lista_elegida = eleccion_lista()
    palabra_secreta = obtenerPalabraAlAzar(lista_elegida)
    letras_correctas = ''
    letras_incorrectas = ''

# bucle de comprobación

    while True: 
        mostrarTablero(IMÁGENES_AHORCADO, letras_incorrectas, letras_correctas, palabra_secreta)
        intento = obtener_intento(letras_incorrectas + letras_correctas)
        if intento in palabra_secreta:
            letras_correctas = letras_correctas + intento
            encontradoTodasLasLetras = True
            for i in range(len(palabra_secreta)):
                if palabra_secreta[i] not in letras_correctas: 
                    encontradoTodasLasLetras = False 

            if encontradoTodasLasLetras: 
                print('¡Sí! ¡La palabra secreta es "' + palabra_secreta + '"! ¡Has ganado!')
                break          

        else:
            letras_incorrectas = letras_incorrectas + intento 

            if len(letras_incorrectas) == len(IMÁGENES_AHORCADO) - 1: # depende de else: porque sólo puede suceder si la letra introducida es incorrecta, un indent menos y pasará por aquí siempre
                mostrarTablero(IMÁGENES_AHORCADO, letras_incorrectas, letras_correctas, palabra_secreta) 
                print('¡Te has quedado sin intentos!\nDespués de ' + str(len(letras_incorrectas)) + ' intentos fallidos y ' + str(len(letras_correctas)) + ' aciertos, la palabra era "' + palabra_secreta + '"')
                break

    if jugar_de_nuevo():
        continue
    else:
        break

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.