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