Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3583104
А
Аноним
11 марта 2026 05:52 · публичный вопрос
А
Аноним

Напиши готовый код в питоне на игру новеллу

Ответ нейросети
11 марта 2026 05:52

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

Код:

import os

# Очистка экрана для nicer вывода
def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

# Начальные характеристики игрока
player = {
    "curiosity": 0,  # любопытство
    "bravery": 0,    # смелость
    "kindness": 0     # доброта
}

# Определение сцен (data-driven подход)
scenes = {
    "start": {
        "text": (
            "Ты просыпаешься в тихом городке. Утро только начинается, "
            "и вокруг пахнет свежей выпечкой. Что ты хочешь сделать?"
        ),
        "choices": [
            {"text": "Исследовать старую библиотеку", "next": "library", "effect": {"curiosity": 2, "bravery": 1}},
            {"text": "Заглянуть на рынок и помочь людям", "next": "market", "effect": {"kindness": 2}}
        ]
    },

    "library": {
        "text": (
            "В пылящих полках лежат книги и карты. Вдруг одна тушится темной "
            "впечатляющей обложкой – та самая, которую ты искал?"
        ),
        "choices": [
            {"text": "Открыть загадочную книгу", "next": "curse", "effect": {"curiosity": 2, "bravery": -1}},
            {"text": "Уйти и вернуться позже", "next": "ending_neutral", "effect": {"curiosity": 0}}
        ]
    },

    "market": {
        "text": (
            "На рынке торговцы спорят, и среди толпы видна однаитенько испуганная "
            "молодая продавщица. Ей нужна помощь."
        ),
        "choices": [
            {"text": "Помочь продавщице убрать припасённые коробки", "next": "ending_good", "effect": {"kindness": 2}},
            {"text": "Купить фрукты и уйти", "next": "ending_neutral", "effect": {"kindness": -1}}
        ]
    },

    "curse": {
        "text": (
            "Книга мгновенно светится, как реактив, и ты чувствуешь, что твоя сила "
            "уходит в неизвестном направлении. Но может быть, ты найдёшь выход?"
        ),
        "choices": [
            {"text": "Снова встретиться с библиотекарем за советом", "next": "ending_bad", "effect": {"bravery": 1}}
        ]
    },

    "ending_good": {
        "text": (
            "Ты проявил доброту и помог человеку. Город благодарен, а ты чувствуешь себя "
            "увереннее. Финал: добро всегда возвращается."
        ),
        "choices": []
    },

    "ending_neutral": {
        "text": (
            "Дня вроде бы и не произошло ничего особенного. Ты идёшь по своей дороге, "
            "получив мягкую уверенность в себе и спокойствие."
        ),
        "choices": []
    },

    "ending_bad": {
        "text": (
            "Твоя смелость привела к неожиданным последствиям. Картина сложна, и путь кажется "
            "неизвестным. Но помни: каждый выбор учит нас чему-то новому."
        ),
        "choices": []
    }
}


def show_stats():
    parts = [f"{k}: {v}" for k, v in sorted(player.items())]
    print("Характеристики:", ", ".join(parts))


def run_scene(key):
    clear_screen()
    scene = scenes[key]
    print(scene["text"])
    print()

    if not scene.get("choices"):
        # Конец сцены
        print("Игра окончена.")
        print()
        show_stats()
        return None

    # Показать варианты выбора
    for idx, ch in enumerate(scene["choices"], 1):
        print(f"{idx}. {ch['text']}")
    print()

    # Ввод выбора
    while True:
        choice = input("Ваш выбор (число): ").strip()
        if choice.isdigit():
            i = int(choice)
            if 1 <= i <= len(scene["choices"]):
                selected = scene["choices"][i - 1]
                # Применяем эффекты выбора
                for k, v in selected.get("effect", {}).items():
                    player[k] = player.get(k, 0) + v
                return selected["next"]
        print("Пожалуйста, введите корректное число варианта.")

def main():
    current = "start"
    while current is not None:
        current = run_scene(current)
        if current is None:
            break
        # По желанию можно очистить экран и показать краткое резюме после перехода
        # clear_screen()
        # print("Переходим к сцене:", current)
        # input("Нажмите Enter...")

    print("\nСпасибо за игру!")
    print("Итоги вашей истории:")
    show_stats()
    print("До новых встреч!")


if __name__ == "__main__":
    main()

Как работает код (пояснения по шагам):

  • Данные сцен вынесены в словарь scenes. Каждая сцена имеет текст и список вариантов (choices). Каждый вариант указывает, к какой сцене он ведёт (next) и какие эффекты даёт на характеристики персонажа (effect).
  • Игровой цикл: начиная с сцены "start", программа выводит текст сцены и варианты выбора. Пользователь вводит номер варианта, после чего применяется набор эффектов и производится переход к следующей сцене по ключу next.
  • Концы игры — сцены, где choices пусты (ending_good, ending_neutral, ending_bad). После достижения конца выводится итоговая статистика.
  • Характеристики игрока (curiosity, bravery, kindness) можно использовать для усложнения логики концовок или для динамической смены текста. Их можно расширять по желанию.

Как расширить и изменить (идеи):

  • Добавить больше сцен и более сложную логику концовок. Например, после прохождения нескольких сцен можно выбрать концовку в зависимости от пороговых значений характеристик.
  • Добавить сохранение прогресса в файл (например, JSON) и возможность загрузки.
  • Сделать интерфейс более визуальным: перейти к графическому окну через tkinter или Pygame, или использовать готовые движки типа Ren'Py (для профессиональных визуальных новелл).
  • Добавить инвентарь и задачи, головоломки, подсказки.

Если хочешь, могу адаптировать пример под конкретную тему (школьная история, загадка, романтика) или сделать версию с графическим интерфейсом. Также могу объяснить, как превратить этот код в более сложный движок с ветвлением по условиям и сохранением прогресса.