Найти в Дзене
Bednyakov

Python с нуля. Игра "Виселица" за 5 минут.

Наступил очередной день изучения азов языка Python и сегодня напишем классическую игру "Виселица". По правилам, компьютер случайным образом выберет слово, а игрок буква за буквой должен будет его отгадать. В случае неудачи на экране игрока появится псевдографика с повешенным персонажем.

Начинаем программу, как и всегда, с комментариев, а так же импортируем модуль random, который будет отвечать за случайный выбор слова.

# Виселица
# Компьютер случайным образом выбирает слово,
# которое игрок должен отгадать буква за буквой.
# В случае неудачи на экране появится фигурка повешенного.

# Импорт модуля
import random
Начало программы
Начало программы

Далее объявим неизменяемую переменную, так называемую константу, которая будет содержать в себе псевдографику с раскадровкой процесса повешения персонажа. Константу назовем HANGMAN и напишем её заглавными буквами, как принято у питонистов. После неё пишем оператор присваивания, открываем скобку и начинаем процесс рисования восьми стадий гибели человечка. Кортеж "изображений" рисуем в тройных кавычках каждое, чтобы Python понимал, что это нечто многострочное, а так же разделяем запятыми.

Кортеж из 8 псевдографических изображений повешенного
Кортеж из 8 псевдографических изображений повешенного

Можете повторить чудовищную красоту как у меня, а можете нарисовать что-то своё. Решать вам. После чего объявляем следующую константу.

Константа с максимально допустимым числом ошибок
Константа с максимально допустимым числом ошибок

Константа MAX_WRONG будет содержать в себе максимальное количество ошибок для игрока, равное числу элементов, содержащихся в кортеже HANGMAN за вычетом единицы. То есть семь.

И последняя константа будет содержать кортеж из слов, которые игроку необходимо будет угадывать. Назовем её WORDS.

Кортеж с загаданными словами
Кортеж с загаданными словами

Следующая строка будет отвечать за выбор случайного слова из кортежа WORDS.

word = random.choice(WORDS)

Функция choice модуля random вернет случайный элемент из WORDS, и он будет присвоен переменной word.

Переменная so_far изначально поможет игроку понять, сколько букв содержит искомое слово. С её помощью на экран будет выведено то же количество дефисов, что и длина слова. Но в последующем она будет содержать и отгаданные знаки.

so_far = "-" * len(word)

Переменная wrong, по умолчанию содержащая ноль, будет являться счетчиком ошибок. А переменная used будет являться списком букв, которые введет игрок в процессе игры.

wrong = 0
used = []
Переменные
Переменные

Основной цикл.

У нас многое готово, но не хватает условий, по которым будет протекать игровой процесс. И в этом нам поможет цикл while, повторяющий блок кода до момента выполнения заданных условий.

Первой строкой выведем приветственную надпись, а следующей определим, что пока количество ошибок (wrong) меньше максимального числа ошибок (MAX_WRONG) и строка so_far неравна выбранному слову word, на экран будет выводиться текущее изображение виселицы, ранее предложенные буквы, и строка so_far.

При этом у игрока будет запрашиваться ввод буквы. Вводимое значение будет присваиваться переменной guess, после чего с помощью метода upper конвертироваться в верхний регистр, а с помощью метода append вноситься в список названых букв used. Если вводимая буква уже содержится в списке (while guess in used) будет запрошен повторный ввод.

Основной цикл
Основной цикл

Следующий блок кода в этом же цикле будет проверять наличие вводимой игроком буквы в слове. Если guess содержится в word, на экран будет выводиться соответствующая надпись, а строка so_far изменится на версию с отгаданной буквой.

Проверка наличия буквы в слове
Проверка наличия буквы в слове

Новая версия строки so_far будет создана с помощью цикла for, и отгаданная буква появится во всех позициях, где она присутствует в слове.

Если же игрок промахнулся с буквой, ему будет выведена соответствующая надпись, а счетчик ошибок добавит к себе единичку.

Завершение игры произойдет при двух условиях:

1. Число совершенных ошибок станет равным максимально допустимому числу ошибок (wrong == MAX_WRONG).

2. Иной вариант, т.е. если игрок угадает слово.

Завершение игры
Завершение игры

На этом всё. Пробуйте, тестируйте, дополняйте. Но помните, что за лайк и подписку на вас снизойдут сакральные знания о программировании. А файл с кодом для лентяев, как обычно, будет ждать в телеграм.

Печальный конец игры
Печальный конец игры