Введение
В этой статье напишем игру «Виселица» на python. Создание данной игры отлично подойдёт для тренировки начинающих python.
Правила создаваемой игры:
Программа загадывает слово, а игрок должен его угадать подбирая буквы. Если же игрок не угадал букву, то висельник с виселицей начинает всё больше прорисовываться, пока полностью не прорисуется. После прорисовки висельника с виселицей игрок проигрывает, если же игрок угадал слово до прорисовки, то он побеждает.
Импорт модулей
На самом деле нам понадобится всего один модуль, а именно модуль random из которого мы возьмём choice.
Импортируем:
from random import choice
Написание кода
Создадим кортеж, хранящий в себе этапы неверных предположений игрока:
HANGMAN = (
"""
------
| |
|
|
|
|
|
----------
""",
"""
------
| |
| O
|
|
|
|
----------
""",
"""
------
| |
| O
| |
|
|
|
----------
""",
"""
------
| |
| O
| /|
|
|
|
----------
""",
"""
------
| |
| O
| /|\\
|
|
|
----------
""",
"""
------
| |
| O
| /|\\
| /
|
|
----------
""",
"""
------
| |
| O
| /|\\
| / \\
|
|
----------
"""
)
Создадим переменную max_wrong, хранящую в себе количество неверных предположений игрока:
max_wrong = len(HANGMAN) - 1
Далее создадим кортеж слов, загадываемых программой, одно из которых будет рандомно выбираться и сохраняться в переменную word:
WORDS = ("python", "игра", "программирование") # Слова для угадывания
word = choice(WORDS) # Слово, которое нужно угадать
Добавим ещё 2 переменных, хранящих чёрточки на каждую букву в слове и количество неверных предположений, а так же список угаданных букв:
so_far = "_" * len(word) # Одна черточка для каждой буквы в слове, которое нужно угадать
wrong = 0 # Количество неверных предположений, сделанных игроком
used = [] # Буквы уже угаданы
Создадим цикл, который будет работать до тех пор, пока число максимальных ошибок не превысит количество имеющихся попыток и пока слово не будет угадано:
while wrong < max_wrong and so_far != word:
print(HANGMAN[wrong]) # Вывод висельника по индексу
print("\nВы использовали следующие буквы:\n", used)
print("\nНа данный момент слово выглядит так:\n", so_far)
В цикле добавим переменную, в которую игрок будет вводить предполагаемые буквы:
guess = input("\n\nВведите свое предположение: ") # Пользователь вводит предполагаемую букву
В основном цикле while создадим ещё один цикл, который проверяет, вводилась ли данная буква игроком ранее:
while guess in used:
print("Вы уже вводили букву", guess) # Если буква уже вводилась ранее, то выводим соответствующее сообщение
guess = input("Введите свое предположение: ") # Пользователь вводит предполагаемую букву
Если буква не вводилась ранее, то она добавится в основном цикле в список used:
used.append(guess) # В список использованных букв добавляется введённая буква
В основном цикле создаём условие, проверяющее есть ли введённая буква в загаданном слове:
if guess in word: # Если введённая буква есть в загаданном слове, то выводим соответствующее сообщение
print("\nДа!", guess, "есть в слове!")
new = ""
for i in range(len(word)): # В цикле добавляем найденную букву в нужное место
if guess == word[i]:
new += guess
else:
new += so_far[i]
so_far = new
else:
print("\nИзвините, буквы \"" + guess + "\" нет в слове.") # Если буквы нет, то выводим соответствующее сообщение
wrong += 1
Последнее условие, которое находится после цикла проверяет, превышено ли количество ошибок:
if wrong == max_wrong: # Если игрок превысил кол-во ошибок, то его повесили
print(HANGMAN[wrong])
print("\nТебя повесили!")
else: # Если кол-во ошибок не превышено, то игрок выиграл
print("\nВы угадали слово!")
И в конце кода будет выводиться загаданное слово:
print("\nЗагаданное слово было \"" + word + '\"')
Весь код:
from random import choice
HANGMAN = (
"""
------
| |
|
|
|
|
|
----------
""",
"""
------
| |
| O
|
|
|
|
----------
""",
"""
------
| |
| O
| |
|
|
|
----------
""",
"""
------
| |
| O
| /|
|
|
|
----------
""",
"""
------
| |
| O
| /|\\
|
|
|
----------
""",
"""
------
| |
| O
| /|\\
| /
|
|
----------
""",
"""
------
| |
| O
| /|\\
| / \\
|
|
----------
"""
)
max_wrong = len(HANGMAN) - 1
WORDS = ("python", "игра", "программирование") # Слова для угадывания
word = choice(WORDS) # Слово, которое нужно угадать
so_far = "_" * len(word) # Одна черточка для каждой буквы в слове, которое нужно угадать
wrong = 0 # Количество неверных предположений, сделанных игроком
used = [] # Буквы уже угаданы
while wrong < max_wrong and so_far != word:
print(HANGMAN[wrong]) # Вывод висельника по индексу
print("\nВы использовали следующие буквы:\n", used)
print("\nНа данный момент слово выглядит так:\n", so_far)
guess = input("\n\nВведите свое предположение: ") # Пользователь вводит предполагаемую букву
while guess in used:
print("Вы уже вводили букву", guess) # Если буква уже вводилась ранее, то выводим соответствующее сообщение
guess = input("Введите свое предположение: ") # Пользователь вводит предполагаемую букву
used.append(guess) # В список использованных букв добавляется введённая буква
if guess in word: # Если введённая буква есть в загаданном слове, то выводим соответствующее сообщение
print("\nДа!", guess, "есть в слове!")
new = ""
for i in range(len(word)): # В цикле добавляем найденную букву в нужное место
if guess == word[i]:
new += guess
else:
new += so_far[i]
so_far = new
else:
print("\nИзвините, буквы \"" + guess + "\" нет в слове.") # Если буквы нет, то выводим соответствующее сообщение
wrong += 1
if wrong == max_wrong: # Если игрок превысил кол-во ошибок, то его повесили
print(HANGMAN[wrong])
print("\nТебя повесили!")
else: # Если кол-во ошибок не превышено, то игрок выиграл
print("\nВы угадали слово!")
print("\nЗагаданное слово было \"" + word + '\"')
Заключение
В данной статье мы написали игру «Виселица» на python. Игра довольно простая, но код объёмный, надеюсь Вам понравилась статья 🙂
Спасибо всем, кто читал, удачи Вам 😉