Programar Wordle con Python

Si hay un juego que está causando furor entre todo tipo de personas durante el último año es Wordle. Para quién no lo conozca aún, Wordle es una idea y creación original de Josh Wardle (@powerlanguish), un ingeniero de Reddit.com, de cuyo apellido se deriva el nombre del juego, que quiso regalarle un juego de palabras a su novia para que matara el tiempo durante el Coronavirus. Es un juego online muy sencillo de jugar y entender, puesto que se trata de adivinar una palabra y una de las ventajas es que no tienes que instalar nada en tu dispositivo. Como muestra de su relevancia, fue comprado a principios de años por el periódico The New York Times (https://cutt.ly/zH8hJxn. Tenemos una versión para palabras en castellano, y es una adaptación del original realizado por Daniel Rodríguez (https://wordle.danielfrg.com)

La dinámica es sencilla: el juego te propone una palabra, normalmente de 5 letras, para que lo adivines en un máximo de 6 intentos. Por cada intento que realiza el jugador, el sistema te da pistas de tal forma que si alguna de las letras introducidas pertenece a la palabra a adivinar te la mostrará en un color para destacarlas del resto: verde en el caso de que esté en la posición correcta y amarillo en el caso de que esté pero no en la posición correcta. 

Podéis pensar que puede ser muy complicado programar un juego que se ha hecho mundialmente famoso, pero la realidad es que no, y me venía estupendamente para trabajar algunos de los conceptos que trabajo con Python como son estructuras de datos como las listas, las clases y los bucles, principalmente el bucle FOR. Además, este juego combina dos de los aspectos fundamentales que me gusta poner en práctica en clase: la resolución de problemas de lógica, a la vez que resolvemos un problema especialmente motivador para ellos y que le dé sentido al porqué de aprender a programar.

Este desafío puede ser resuelto con tipos de datos String o con Listas, pero en nuestro caso utilizamos Listas ya que nos encontrábamos en esa parte del trimestre. Otra parte importante del código es cómo visualizar letras en colores, ya que los resultados que ofrece Python en pantalla por defecto son blanco/negro. Esto también puede ser resuelto de diferentes maneras aunque aquí optamos por hacer una introducción a las clases que también forman parte del contenido curricular de la asignatura en el curso siguiente y así vamos avanzando conceptos.

Lo bueno de programar con listas es que el juego puede ser perfectamente adaptable a las 5 letras iniciales o al tamaño que queramos. Bastaría con crear una lista de palabras de 5 letras, otra de 6 letras y así sucesivamente. Se puede programar que al llegar a una serie de aciertos consecutivos pueda saltar de nivel. También podemos guardar las letras que ya han sido introducidas en otra lista y así dar un aviso al jugador. Otra forma de ampliar el juego podría ser cargando todas estas palabras desde un fichero donde estuvieran guardadas previamente. La verdad es que como juego nos da muchas posibilidades para realizar un proyecto final de asignatura.

No quería ser muy técnico en esta columna y los detalles en profundidad os los cuenta Carlota Laborda, alumna de 1º Bachillerato y brillante alumna de la asignatura TIC. 

Os dejo a continuación el código fuente utilizado por Carlota Laborda para que podáis reproducirlo, copiarlo, mejorarlo.. y volverlo a compartir con otros:

 

import random
ListaPalabras=["nariz","casco","mango"]
intentos=5
class Colors:
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
ENDC = '\033[0m'
def verde (pos):
return Colors.OKGREEN+pos+Colors.ENDC
def azul (pos):
return Colors.OKBLUE+pos+Colors.ENDC
resp="S"
while resp.upper()=="S":
num =random.randint(0,(len(ListaPalabras)-1))
sol=(ListaPalabras[num])
print("REGLAS:")
print("1- Si la letra se muestra de color verde es correcta")
print("2- Si la letra se muestra en color azul, la letra está dentro de la palabra pero en la posición incorrecta")
print("3- Si la letra no está coloreada significa que la letra no se encuentra en la palabra")
print("4- Tienes 5 intentos")
print("")
for i in range (intentos):
ListaPalabra=[]
ListaSol=[]
print("")
palabra=input("Dame una palabra de 5 letras: ")
print("")
whilenot (len(palabra)==5):
palabra=input("La palabra debe contener 5 letras: ")
if sol==palabra:
break
else:
for i in palabra:
ListaPalabra.append(i)
for i in sol:
ListaSol.append(i)
for i in range (len(ListaPalabra)):
if ListaPalabra[i] in ListaSol[i]:
print(verde(ListaPalabra[i]), end="")
ifnot ListaPalabra[i] in ListaSol:
print(ListaPalabra[i], end="")
elif ListaPalabra[i] in sol andnot (ListaPalabra[i] in ListaSol[i]):
print(azul(ListaPalabra[i]), end= "")
print("")
if palabra==sol:
print(verde(palabra))
print("La palabra es correcta")
else:
print("Se han acabado los intentos")
print("No has acertado")
resp=input("¿Quieres volver a jugar?(S/N)")
whilenot resp.upper() in ["S", "N"]:
resp=input("Introduce S o N: ")
print("Adiós")

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.