Давай поиграем в игру "Палач" с Python
Кто хоть раз не играл в игру «Палач»? Это был идеальный побег от скучного урока, и вам потребовались только одна бумага и ручка. Идея очень проста: один игрок думает над словом, а другие должны отгадывать букву за буквой, что и есть слово. Максимальное количество ошибочных попыток зависит от того, как вы решите построить эшафот, однако здесь мы установим его равным 10.
Каждый раз, когда ваша угаданная буква является правильной, игрок, решивший слово, должен сообщить вам положение этой буквы, в противном случае количество ошибочных попыток увеличивается на 1, и эшафот начинает расти.
В этой статье я собираюсь создать с нуля игру «Палач» на Python, где слово будет решать игрок. Для этого я сначала загрузил из модуля nltk.corpus список из 236736 английских слов, среди которых Python определит.
import nltk nltk.download('words') from nltk.corpus import words word_list = words.words()
Затем я устанавливаю некоторые переменные, которые будут использоваться на протяжении всей игры. Это:
- угадайте: пустой список, который будет заполнен моими угаданными буквами
- секрет: это секретное слово, которое мы хотим угадать
- length_word = количество символов секретного слова
- abc = мой алфавит
- letter_storage = пустой список, куда будут добавлены все угаданные буквы (как неправильные, так и правильные).
import random guess = [] # lets randomize single word from the list secret = random.choice(word_list) length_word = len(secret) abc = "abcdefghijklmnopqrstuvwxyz" letter_storage = []
Теперь я собираюсь определить три функции для своей цели:
- greetings (): он создаст первый контакт с пользователем, спросит его имя и хочет ли он играть
def greetings(): print("Hello Mate!\n") while True: name = input("Please enter your name\n").strip() if name == '': print("You can't do that! No blank lines") else: choice=input('Do you want to play Hangman?\n').lower() if choice=='no' or choice=='n': print("That's a shame! Have a nice day") break elif choice=='yes' or choice=='y': print("Awesome! So let's start! If you want to exit, just type 'bye'") break else: print("Please Answer only Yes or No") continue
- structure (): отобразит структуру секретного слова, заменив согласные на «-» и гласные на «*». Обратите внимание: поскольку вы собираетесь использовать эти функции для многих совпадений, в самом начале функции я очистил список guess [], чтобы он не содержал символы предыдущих секретных слов.
import random vowels=list(['a','e','i', 'o', 'u']) def structure(): #let's remove the previous letter in our guess word guess.clear() for character in secret: if character in vowels: guess.append('*') #if in that position there is a vowel else: guess.append('-') #if in that position there is a #consonant print("Ok, so the word you need to guess has {} characters".format(length_word)) print("Be aware that you can enter only 1 letter from a-z\n\n") print(guess)
- guessing (): это функция, которая будет определять, содержится ли наша угаданная буква в секретном слове. Он спрашивает нас о нашем предположении, а затем проверяет, хотите ли вы выйти из игры ('пока'), является ли введенная буква и была ли эта буква уже выбрана (и, следовательно, сохранена в letter_storage [] ). Затем, если буква находится в секретном слове, она устанавливает ее в правильную позицию в списке guess [], в противном случае она сообщает нам, что мы ошибались, и увеличивает количество ошибочных попыток на 1.
def guessing(): letter_storage.clear() #emptying the list guess_taken = 1 while guess_taken < 10: guess_letter = input("Pick a letter\n").lower() if guess_letter=='bye': print('Goodbye!') break elif not guess_letter in abc: #checking input print("Enter a letter from a-z alphabet") #checking if letter has been already used elif guess_letter in letter_storage: print("You have already guessed that letter!") else: letter_storage.append(guess_letter) if guess_letter in secret: print("You guessed correctly!") for _i in range(length_word): if secret[_i] == guess_letter: guess[_i] = guess_letter print(guess) #updating the list by substituting - or * with the right guess if not ('-' and '*') in guess: print("You won!") break else: print("The letter is not in the word. Try Again!") guess_taken += 1 if guess_taken == 10: print(" Sorry Mate, You lost :<! The secret word was {}".format(secret))
Теперь мы можем запускать наши три функции одновременно следующим образом:
if __name__ == "__main__": greetings() structure() guessing()
Хороший! А теперь поиграем:
Должен признаться, я так плохо жульничал перед игрой (я мельком увидел секретное слово, позор мне), и я рад, что сделал это, так как понятия не имел, что такое мормаор. Для любопытных:
«Мормаор - шотландский дворянин, исполняющий обязанности старшего управляющего в провинции»
Вооружившись этими новыми знаниями, давайте проверим, что моя система побега работает:
И, наконец, давайте посмотрим, что произойдет, если мы сделаем более 10 попыток:
Здорово! Теперь вы можете повеселиться против Python, играя в игру «Палач». Надеюсь, вам понравилось чтение!