Простая текстовая приключенческая игра на Python

Текстовая приключенческая игра на Python — это простой и полезный проект для тех, кто учится программировать. Игра запускается в терминале: игрок вводит текстовые команды, а скрипт управляет ходом истории. Такой проект помогает закрепить базовые конструкции Python: вывод в консоль, ветвления, циклы и функции.
Что вы получите
- Рабочий пример одного файла .py с несколькими сценами.
- Паттерт организации сцен и навигации между ними.
- Советы по дизайну сюжета и проверке корректности.
- Чек-листы, тест-кейсы и идеи для расширения.
Как создать файл скрипта и добавить историю
Создайте обычный текстовый файл с расширением .py, например AdventureGame.py. Внутри вы определите глобальные переменные, функции для каждой сцены и точку входа в программу. Если вы не уверены в синтаксисе Python, сначала просмотрите базовые примеры — это упростит понимание.
Ниже — минимальная структура игрового скрипта, адаптированная из примера:
# Глобальная переменная оружия
weapon = False
def introScene():
directions = ["left", "right", "forward", "backward"]
print("You are at a crossroads, and you can choose to go down any of the hallways. Where would you like to go?")
userInput = ""
while userInput not in directions:
print("Options: left/right/backward/forward")
userInput = input().strip().lower()
if userInput == "left":
showShadowFigure()
elif userInput == "right":
showSkeletons()
elif userInput == "forward":
hauntedRoom()
elif userInput == "backward":
print("You find that this door opens into a wall.")
else:
print("Please enter a valid option for the adventure game.")
def showShadowFigure():
directions = ["right", "backward", "left"]
print("You see a dark shadowy figure appear in the distance. You are creeped out. Where would you like to go?")
userInput = ""
while userInput not in directions:
print("Options: right/left/backward")
userInput = input().strip().lower()
if userInput == "right":
cameraScene()
elif userInput == "left":
print("You find that this door opens into a wall.")
elif userInput == "backward":
introScene()
else:
print("Please enter a valid option for the adventure game.")
def cameraScene():
directions = ["forward", "backward"]
print("You see a camera that has been dropped on the ground. Someone has been here recently. Where would you like to go?")
userInput = ""
while userInput not in directions:
print("Options: forward/backward")
userInput = input().strip().lower()
if userInput == "forward":
print("You made it! You've found an exit.")
quit()
elif userInput == "backward":
showShadowFigure()
else:
print("Please enter a valid option for the adventure game.")
def hauntedRoom():
directions = ["right", "left", "backward"]
print("You hear strange voices. You think you have awoken some of the dead. Where would you like to go?")
userInput = ""
while userInput not in directions:
print("Options: right/left/backward")
userInput = input().strip().lower()
if userInput == "right":
print("Multiple ghoul-like creatures start emerging as you enter the room. You are killed.")
quit()
elif userInput == "left":
print("You made it! You've found an exit.")
quit()
elif userInput == "backward":
introScene()
else:
print("Please enter a valid option for the adventure game.")
def showSkeletons():
directions = ["left", "backward", "forward"]
global weapon
print("You see a wall of skeletons as you walk into the room. Someone is watching you. Where would you like to go?")
userInput = ""
while userInput not in directions:
print("Options: left/backward/forward")
userInput = input().strip().lower()
if userInput == "left":
print("You find that this door opens into a wall. You open some of the drywall to discover a knife.")
weapon = True
elif userInput == "backward":
introScene()
elif userInput == "forward":
strangeCreature()
else:
print("Please enter a valid option for the adventure game.")
def strangeCreature():
actions = ["fight", "flee"]
global weapon
print("A strange ghoul-like creature has appeared. You can either run or fight it. What would you like to do?")
userInput = ""
while userInput not in actions:
print("Options: flee/fight")
userInput = input().strip().lower()
if userInput == "fight":
if weapon:
print("You kill the ghoul with the knife you found earlier. After moving forward, you find one of the exits. Congrats!")
quit()
else:
print("The ghoul-like creature has killed you.")
quit()
elif userInput == "flee":
showSkeletons()
else:
print("Please enter a valid option for the adventure game.")
if __name__ == "__main__":
while True:
print("Welcome to the Adventure Game!")
print("As an avid traveler, you have decided to visit the Catacombs of Paris.")
print("However, during your exploration, you find yourself lost.")
print("You can choose to walk in multiple directions to find a way out.")
print("Let's start with your name:")
name = input().strip()
print("Good luck, " + name + ".")
introScene()Важно: код выше — базовый пример. Вы можете расширить логику, добавить обработку нестрогого ввода, подсказки и сохранение прогресса.
Как организовать несколько сцен и вариантов
Проект лучше планировать заранее. Нарисуйте карту сцен и переходов. Каждая сцена — своя функция. Это делает код читаемым и переиспользуемым: если игрок возвращается в ту же комнату, вы просто снова вызываете эту функцию.
Советы при проектировании:
- Для каждой сцены явно перечисляйте допустимые команды.
- Обрабатывайте ввод в нижнем регистре и убирайте лишние пробелы.
- Держите сообщения краткими и информативными.
- Используйте глобальные состояния лишь при необходимости (золото, здоровье, наличие оружия).
Как запускать игру
Откройте терминал (Command Prompt, PowerShell или терминал Linux/macOS), перейдите в папку с файлом и выполните:
cd C:\Users\Sharl\Desktop\Python
python AdventureGame.pyПримеры вывода игры в командной строке:
Методология разработки (мини-метод)
- Напишите простую карту: комнаты и переходы.
- Реализуйте каркас функций для сцен.
- Добавьте минимальные тесты (см. раздел “Тест-кейсы”).
- Расширьте игровые состояния (инвентарь, здоровье, переменные мира).
- Пройдите всю игру сами и правьте UX сообщений.
Чек-лист разработчика
- Есть файл AdventureGame.py с точкой входа.
- Каждая сцена — отдельная функция.
- Список допустимых команд в каждой сцене.
- Обработка некорректного ввода.
- Проверка возвратов и выхода из цикла (quit()/break).
- Примитивные тесты пройдены.
Критерии приёмки
- Скрипт запускается командой python AdventureGame.py и не падает с исключениями при обычном вводе.
- Игрок может пройти от начальной сцены к выходу как минимум одним маршрутом.
- Наличие оружия меняет исход битвы.
- При неверной команде игрок получает понятную подсказку.
Тест-кейсы и примеры приёмки
- Старт игры: ввод имени — игра приветствует игрока и показывает опции.
- Маршрут к выходу через правую ветку: intro -> left/right/… -> exit.
- Без оружия — проигрыш: собрать не находя нож = смерть при столкновении.
- С оружием — победа над существом и выход.
- Неверный ввод (“asdf”) — игра просит ввести допустимый вариант и не падает.
Когда такой подход не подходит (контрпримеры)
- Вам нужна графика или сложная логика боя — тогда текстовый движок будет ограничен.
- Нужен сетевой мультиплеер — нужны другие инструменты и архитектура.
- Требуется постоянное сохранение прогресса в базе данных — стоит добавить сериализацию или использовать фреймворк.
Альтернативные подходы
- Использовать фреймворк для интерактивных историй (например, Ink, Twine) и связать с Python.
- Перенести игру в веб (Flask/Django) для удобного интерфейса.
- Сделать движок на объектах: класс Room, класс Player, вместо глобальных функций.
Модель мышления и подсказки (эвристики)
- Думайте о сценах как о состояниях автомата.
- Держите переходы минимальными и предсказуемыми.
- Избегайте глубоких вложенных циклов: проще возвращать управление в центральный цикл.
Пример схемы переходов (Mermaid)
graph TD
Start[Старт]
Start --> Intro
Intro -->|left| Shadow
Intro -->|right| Skeletons
Intro -->|forward| Haunted
Intro -->|backward| Wall
Shadow -->|right| Camera
Shadow -->|backward| Intro
Camera -->|forward| Exit
Camera -->|backward| Shadow
Skeletons -->|left| Knife
Knife --> Skeletons
Skeletons -->|forward| Creature
Creature -->|fight with knife| Exit
Creature -->|fight no knife| Death
Creature -->|flee| SkeletonsИдеи для расширения и уровни зрелости
- Уровень 1 (MVP): одна карта, несколько сцен, фиксированные ответы.
- Уровень 2: состояние игрока (здоровье, инвентарь), простые предметы.
- Уровень 3: система сохранений, ветвления, генерация предметов.
- Уровень 4: интеграция с GUI/веб, модуль сценариев, поддержка модов.
Глоссарий (1 строка)
- Сцена: функция, которая описывает место и возможные действия игрока.
- Инвентарь: набор булевых/переменных значений, влияющих на исходы.
- Точка входа: блок if name == “main“ в Python-скрипте.
Риски и рекомендации по безопасности
- Не выполняйте ввод пользователя через eval/exec — это риск выполнения произвольного кода.
- В долгосрочных проектах валидируйте и сохраняйте прогресс в формате JSON или через ORM.
Короткая инструкция для презентации (100–200 слов)
Создайте один файл AdventureGame.py. Определите функции для каждой комнаты и глобальные состояния (например, weapon). В блоке if name == “main“ запустите приветствие и вызовите начальную сцену. При каждом вводе сравнивайте значения с допустимым списком команд и вызывайте соответствующую функцию. Тестируйте маршруты: с оружием и без, проверьте, что игра корректно обрабатывает неверный ввод и что есть путь к победе.
Краткое резюме
Игра на Python в одном файле — отличный учебный проект. Начните с простой карты, разделите логику по функциям, добавьте состояния игрока и тесты. Постепенно расширяйте проект: добавьте инвентарь, сохранение и веб-интерфейс при необходимости.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента