14

101 игра на python. Виселица. Игра в слова

Серия 101 игра на python

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


Игра "Виселица" - это игра в слова, где один игрок (или компьютер) загадывает слово, а другой игрок пытается его отгадать по буквам.

За каждую неправильную букву игрок получает штраф в виде части рисунка виселицы. Если рисунок завершен, игрок проигрывает.

Правила игры:
1. Компьютер выбирает случайное слово из заранее определенного списка.
2. Игрок видит слово, представленное прочерками (по одной на каждую букву).
3. Игрок пытается отгадать слово, вводя буквы.
4. Если введенная буква есть в слове, она отображается на своих местах.
5. Если введенной буквы нет в слове, игрок получает штраф.
6. Игра продолжается до тех пор, пока игрок не угадает слово или не исчерпает лимит штрафов.


Алгоритм


1. Инициализировать массив слов, которые может загадать компьютер.
2. Выбрать случайное слово из массива.
3. Создать строку `GUESS$` , состоящую из прочерков, по длине загаданного слова.
4. Инициализировать число ошибок, равное 0.
5. Начать цикл "пока слово не отгадано и количество ошибок меньше 6":
5.1 Запросить ввод буквы от игрока.
5.2 Если введенная буква есть в загаданном слове
5.2.1 Обновить строку `GUESS$` , показав букву на всех ее позициях в слове.
5.2.2 Если все буквы отгаданы, перейти к шагу 6.
5.3 Иначе
5.3.1 Увеличить число ошибок на 1.
5.3.2 Показать изображение виселицы, соответствующее текущему количеству ошибок
5.4 Если число ошибок равно 6, перейти к шагу 7.
6. Вывести сообщение "YOU GOT IT!", затем загаданное слово, и перейти к шагу 8.
7. Вывести сообщение "SORRY, YOU DIDN'T GET IT.", затем загаданное слово, и перейти к шагу 8.
8. Конец игры.

Блок-схема

Legenda:

- Start - Начало игры.
- InitializeWords - Инициализация списка слов для выбора.
- ChooseWord - Выбор случайного слова из списка.
- CreateGuessString - Создание строки `guessString` из прочерков, соответствующей длине загаданного слова.
- InitializeErrors - Инициализация счетчика ошибок `numberOfErrors` в 0.
- LoopStart - Начало цикла, который продолжается, пока слово не угадано и количество ошибок меньше 6.
- InputLetter - Запрос у пользователя ввода буквы и сохранение ее в `userLetter`.
- CheckLetter - Проверка, есть ли введенная буква `userLetter` в загаданном слове `targetWord`.
- UpdateGuessString - Обновление строки `guessString`, показывая введенную букву на ее местах.
- CheckWin - Проверка, угадано ли слово (т.е. `guessString` равен `targetWord`).
- OutputWin - Вывод сообщения о победе "YOU GOT IT!" и загаданного слова.
- End - Конец игры.
- IncreaseErrors - Увеличение счетчика ошибок `numberOfErrors` на 1.
- DrawHangman - Отображение текущего состояния виселицы в зависимости от количества ошибок.
- CheckLose - Проверка, достигло ли количество ошибок `numberOfErrors` значения 6.
- OutputLose - Вывод сообщения о проигрыше "SORRY, YOU DIDN'T GET IT." и загаданного слова.


Код.

список слов


список состояний виселицы

Основная логика

Разбор кода:

1. Импорт модуля `random`
- `import random`: Импортирует модуль random для случайного выбора слова.


2. Список слов `WORDS`: Список, содержащий слова, из которых компьютер выбирает слово для игры.


3. Функция `draw_hangman(errors)`
- Отображает состояние виселицы в зависимости от количества ошибок, используя ASCII-арт.
- `hangman_stages` - массив строк, представляющих стадии виселицы.
- `print(hangman_stages[errors])` - выводит на экран соответсвующую строку.


4. Функция `play_hangman()`:
- Выбор слова:
- `target_word = random.choice(WORDS).upper()`: Случайно выбирает слово из списка `WORDS` и переводит его в верхний регистр.


- Создание строки для отгадывания:
- `guess_string = "_" * len(target_word)`: Создает строку, состоящую из прочерков, длина которой соответствует длине загаданного слова.


- Инициализация счетчика ошибок:
- `number_of_errors = 0`: Устанавливает начальное количество ошибок в 0.


- Основной цикл игры `while number_of_errors < 6 and "_" in guess_string:
- Цикл продолжается, пока количество ошибок меньше 6 и в строке `guess_string` есть прочерки (т.е. пока слово не угадано и не исчерпан лимит ошибок).
- `print("Слово:", guess_string)`: Выводит текущее состояние слова с угаданными буквами и прочерками.
- `user_letter = input("Введите букву: ").upper()`: Запрашивает у пользователя ввод буквы и переводит ее в верхний регистр.


- Проверка наличия буквы в слове:
- `if user_letter in target_word:`: Проверяет, есть ли введенная буква в загаданном слове.


- Если буква есть:
- `new_guess_string = ""`: Создает пустую строку `new_guess_string` для сборки нового варианта отгадываемого слова.
- Цикл `for i in range(len(target_word))` перебирает все символы в загаданном слове.
- Если текущая буква в загаданном слове совпадает с введенной буквой `user_letter`, то добавляет ее в `new_guess_string`, иначе, добавляет символ с текущей позиции из `guess_string`.
- `guess_string = new_guess_string`: Обновляет `guess_string` новым вариантом с угаданными буквами.
- `if guess_string == target_word:`: Проверяет, угадано ли слово.
- `print("ПОЗДРАВЛЯЮ! Вы угадали слово:", target_word)`: Выводит поздравление и загаданное слово.
- `return`: Завершает функцию (игру).


- Если буквы нет в слове:
- `number_of_errors += 1`: Увеличивает счетчик ошибок на 1.
- `draw_hangman(number_of_errors)`: Вызывает функцию `draw_hangman` для отображения виселицы.


- Проверка на проигрыш:
- `if number_of_errors == 6:`: Проверяет, равно ли количество ошибок 6.
- `print("СОЖАЛЕЮ, вы не отгадали слово. Загаданное слово:", target_word)`: Выводит сообщение о проигрыше и загаданное слово.


5. Запуск игры:
- `if __name__ == "__main__":`: Этот блок гарантирует, что функция `play_hangman()` будет запущена, только если файл исполняется напрямую, а не импортируется как модуль.
- `play_hangman()`: Вызывает функцию для начала игры.

Репозиторий
Код
Запустить эту программу ты можешь в google colab

Посмотри и другие статьи

Удачи!

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества