Пишем игру «Виселица» на python

Пишем игру "Виселица" на python Статьи

Введение

В этой статье напишем игру «Виселица» на 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. Игра довольно простая, но код объёмный, надеюсь Вам понравилась статья 🙂

Спасибо всем, кто читал, удачи Вам 😉

Admin
Admin
IT Start
Добавить комментарий