Para aquellos que no lo saben, Hangman es un juego de adivinanzas de palabras que tradicionalmente se juega con lápiz y papel. Se elige una palabra en secreto y lo único que se sabe de ella es el número de letras que tiene. Luego, el jugador adivina una letra y, si está en la palabra, se revela su posición. Las conjeturas incorrectas cuentan en contra del jugador. Si adivinas la palabra, ganas, si haces demasiadas conjeturas incorrectas, se acabará el juego.
Bien, ahora que todos sabemos lo que implica el juego, veamos cómo se vería cuando se juega en Python.
Word: --- Wrong guesses: Guess a letter > a Word: -a- Wrong guesses: Guess a letter > g Word: -a- Wrong guesses: g Guess a letter > t Word: -at Wrong guesses: g Guess a letter > c Word: cat Well done! You guessed the word with 1 wrong guesses.
Comencemos un nuevo programa Python para crear este juego. Necesitaremos una palabra para adivinar y una forma de realizar un seguimiento de las conjeturas correctas e incorrectas.
word = "something" guessed_letters = [] incorrect_letters = []
¿Qué pasa con los corchetes? Eso es Python, habla de una nueva lista. Una lista es una variable que puede almacenar más de un valor. En este caso vamos a almacenar letras en las listas, pero Python te permitirá poner cualquier cosa ahí.
Nuestro juego será esencialmente un bucle que le mostrará al jugador las partes de la palabra adivinadas hasta el momento y luego le pedirá que adivine otra vez. Podemos usar un bucle while para implementar esto. Pero ¿cuál debería ser nuestra condición para finalizar el ciclo? Bueno, hay dos razones por las que querríamos terminar el juego:
La primera condición se cumple cuando el número de letras en la lista de letras adivinadas es el mismo que el número de letras en la palabra. Entonces nuestro bucle debe ejecutarse mientras ese no sea el caso. En Python, esto se puede escribir como len(guessed_letters) != len(word). La función len() le indica la longitud de una lista o cadena.
La segunda condición se cumple cuando el número de letras en la lista de letras_incorrectas es mayor que el número máximo de conjeturas permitidas. Por lo tanto, nuestro bucle también debe ejecutarse mientras ese no sea el caso. En Python esto se puede escribir como len(incorrect_letters)
Poniéndolo todo junto, nuestro ciclo while comienza así.
# Game loop. MAX_WRONG_GUESSES = 5 while len(guessed_letters) != len(word) and len(incorrect_letters)Dentro de nuestro bucle necesitaremos hacer cuatro cosas:
- Muestra la palabra al jugador.
- Muestra la lista de conjeturas incorrectas.
- Obtén una suposición del jugador.
- Registra si la suposición es correcta o incorrecta.
Abordémoslos en orden.
mostrando la palabra
Necesitamos mostrarle la palabra al jugador, pero solo se deben revelar las letras que ha adivinado correctamente. El resto de las letras deben reemplazarse por un carácter de guión. Escribamos una función que haga esto por nosotros. Se necesitarán dos argumentos, la palabra a mostrar y una lista de letras adivinadas correctamente.
def show_word(word, letters): print("Word: ", end="") for letter in word: if letter in letters: print(letter, end="") else: print("-", end="") print()Recorremos cada letra de la palabra usando un bucle for. Luego verificamos si la letra está en la lista de letras usando el operador in. Si es así, lo imprimimos. Si no, imprimimos un guión en su lugar. Usamos el argumento end="" en las llamadas de impresión para detener la impresión de una nueva línea.
Mostrando las conjeturas equivocadas
Escribamos otra función para mostrar las conjeturas incorrectas. Éste es mucho más sencillo que el anterior. Toma un solo argumento, la lista de conjeturas incorrectas, y usa nuevamente un bucle for para imprimir cada una.
def show_wrong_guesses(guesses): print("Wrong guesses: ", end="") for letter in guesses: print(letter, end="") print()Obtener la suposición del jugador
Nuestra próxima función obtendrá una suposición del jugador. Para asegurarnos de que el reproductor realmente escriba algo, usaremos un bucle while. Seguiremos pidiéndoles una suposición hasta que escriban una. Finalmente, una suposición debe ser solo una letra, por lo que solo les devolvemos el primer carácter que escriban.
def get_letter(): letter = "" while letter == "": letter = input("Guess a letter > ") return letter[0]Grabando la suposición
Una vez que tengamos una carta del jugador podemos decidir cuál de nuestras dos listas debemos agregarla también. Si la letra está en la palabra, es una suposición correcta. Podemos agregarlo a la lista de letras adivinadas usando el método append(). Si no está en la palabra, debe agregarse a la lista de letras_incorrectas. Pero también debemos comprobar si la letra ya ha sido adivinada antes. Esto lo hacemos comprobando si es una de las listas con el operador in. (De esta manera, cada conjetura solo se registra una vez).
if letter in word and letter not in guessed_letters: guessed_letters.append(letter) elif letter not in incorrect_letters: incorrect_letters.append(letter)Terminando el juego
Por último, pero no menos importante, debemos mostrar un mensaje adecuado al jugador cuando finalice el ciclo del juego. Dependiendo de si acertaron o no la palabra, el mensaje será de éxito o fracaso. ¿Cómo sabemos si adivinaron la palabra correctamente? El número de letras en la lista de letras adivinadas tendrá la misma longitud que la palabra.
# End of game message. if len(guessed_letters) == len(word): show_word(word, guessed_letters) print(f"Well done! You guessed the word with {len(incorrect_letters)} wrong guesses.") else: print(f"Too many wrong guesses! The word was '{word}'")¡Eso es todo! Tenemos un juego completo del Ahorcado. Para hacer el juego más difícil o más fácil, cambia la cantidad de aciertos incorrectos permitidos.
Listado completo de programas
def show_word(word, letters): print("Word: ", end="") for letter in word: if letter in letters: print(letter, end="") else: print("-", end="") print() def show_wrong_guesses(guesses): print("Wrong guesses: ", end="") for letter in guesses: print(letter, end="") print() def get_letter(): letter = "" while letter == "": letter = input("Guess a letter > ") return letter[0] word = "something" guessed_letters = [] incorrect_letters = [] # Game loop. MAX_WRONG_GUESSES = 5 while len(guessed_letters) != len(word) and len(incorrect_letters)
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3