Наступил очередной день изучения азов языка Python и сегодня напишем классическую игру "Виселица". По правилам, компьютер случайным образом выберет слово, а игрок буква за буквой должен будет его отгадать. В случае неудачи на экране игрока появится псевдографика с повешенным персонажем.
Начинаем программу, как и всегда, с комментариев, а так же импортируем модуль random, который будет отвечать за случайный выбор слова.
# Виселица
# Компьютер случайным образом выбирает слово,
# которое игрок должен отгадать буква за буквой.
# В случае неудачи на экране появится фигурка повешенного.
# Импорт модуля
import random
Далее объявим неизменяемую переменную, так называемую константу, которая будет содержать в себе псевдографику с раскадровкой процесса повешения персонажа. Константу назовем HANGMAN и напишем её заглавными буквами, как принято у питонистов. После неё пишем оператор присваивания, открываем скобку и начинаем процесс рисования восьми стадий гибели человечка. Кортеж "изображений" рисуем в тройных кавычках каждое, чтобы Python понимал, что это нечто многострочное, а так же разделяем запятыми.
Можете повторить чудовищную красоту как у меня, а можете нарисовать что-то своё. Решать вам. После чего объявляем следующую константу.
Константа 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. Иной вариант, т.е. если игрок угадает слово.
На этом всё. Пробуйте, тестируйте, дополняйте. Но помните, что за лайк и подписку на вас снизойдут сакральные знания о программировании. А файл с кодом для лентяев, как обычно, будет ждать в телеграм.