Гид по технологиям

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

• 5 min read • Python • Обновлено 27 Nov 2025
Текстовая приключенческая игра на Python
Текстовая приключенческая игра на 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()

Важно: код выше — базовый пример. Вы можете расширить логику, добавить обработку нестрогого ввода, подсказки и сохранение прогресса.

Как организовать несколько сцен и вариантов

Проект лучше планировать заранее. Нарисуйте карту сцен и переходов. Каждая сцена — своя функция. Это делает код читаемым и переиспользуемым: если игрок возвращается в ту же комнату, вы просто снова вызываете эту функцию.

Карта сюжета в Python-игре

Советы при проектировании:

  • Для каждой сцены явно перечисляйте допустимые команды.
  • Обрабатывайте ввод в нижнем регистре и убирайте лишние пробелы.
  • Держите сообщения краткими и информативными.
  • Используйте глобальные состояния лишь при необходимости (золото, здоровье, наличие оружия).

Как запускать игру

Откройте терминал (Command Prompt, PowerShell или терминал Linux/macOS), перейдите в папку с файлом и выполните:

cd C:\Users\Sharl\Desktop\Python
python AdventureGame.py

Примеры вывода игры в командной строке:

Текстовая игра на Python в командной строке

Текстовая игра на Python в командной строке

Приключенческая игра в командной строке

Методология разработки (мини-метод)

  1. Напишите простую карту: комнаты и переходы.
  2. Реализуйте каркас функций для сцен.
  3. Добавьте минимальные тесты (см. раздел “Тест-кейсы”).
  4. Расширьте игровые состояния (инвентарь, здоровье, переменные мира).
  5. Пройдите всю игру сами и правьте UX сообщений.

Чек-лист разработчика

  • Есть файл AdventureGame.py с точкой входа.
  • Каждая сцена — отдельная функция.
  • Список допустимых команд в каждой сцене.
  • Обработка некорректного ввода.
  • Проверка возвратов и выхода из цикла (quit()/break).
  • Примитивные тесты пройдены.

Критерии приёмки

  • Скрипт запускается командой python AdventureGame.py и не падает с исключениями при обычном вводе.
  • Игрок может пройти от начальной сцены к выходу как минимум одним маршрутом.
  • Наличие оружия меняет исход битвы.
  • При неверной команде игрок получает понятную подсказку.

Тест-кейсы и примеры приёмки

  1. Старт игры: ввод имени — игра приветствует игрока и показывает опции.
  2. Маршрут к выходу через правую ветку: intro -> left/right/… -> exit.
  3. Без оружия — проигрыш: собрать не находя нож = смерть при столкновении.
  4. С оружием — победа над существом и выход.
  5. Неверный ввод (“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 в одном файле — отличный учебный проект. Начните с простой карты, разделите логику по функциям, добавьте состояния игрока и тесты. Постепенно расширяйте проект: добавьте инвентарь, сохранение и веб-интерфейс при необходимости.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро