• Лекция - Выбор действий, метки и их параметры


    Для того, чтобы сделать интересную разветвленную новеллу нужен хороший сценарий с развилками. Развилки, как правило, появляются из-за возможности выбора для игрока. Об этом мы сегодня и поговорим. Это очень важная тема, так как многие новеллы строятся только на механике выбора действий.

    Вся дальнейшая работа будет идти в файле script.rpy. Игра всегда начинается с метки start. После этого начинается сама новелла (выводятся диалоги, фоны, спрайты). До первого выбора их может быть сколько угодно. Всё это делается при помощи команд в скрипте для RenPy, вывод реплик мы уже разбирали ранее. Все команды выполняются сверху вниз. Сама же метка нужна для того, чтобы как-то обозначить кусок сценария. Например, надо перескочить с одного места в другое при выборе игрока. Чтобы создать новую метку нужно написать:

    label <название метки>:
        <Код игры>
        return

    Название метки может быть любым, желательно, писать его в латиницей, как и весь остальной код. После названия метки обязательно надо поставить двоеточие, а следующая строка должна писаться с отступом в 4 пробела. Всё, что будет написано с отступом - попадет в метку. Если ваш текстовый редактор настроен правильно, то отступы будут ставиться автоматически. В конце метки желательно написать return, чтобы не было путаницы в переходах между метками и не возникало лишних ошибок.
    Пример:

    label my_new_label:
        "Новая реплика"
        return

    Меток можно создавать любое количество. Даже если нет нужды делать выбор, метку можно объявить. Метки помогают избежать дублирования кода, например, они помогают использовать один и тот же диалог в разных ветках сюжета без повторного переписывания кода.

    А сейчас создадим пару меток для будущих выборов игрока. Допустим, у главного героя появилась сложная дилемма - что же съесть на завтрак? Сделаем метку для завтрака с хлопьями и метку для завтрака с блинчиками.

    Попробуйте самостоятельно написать код, опираясь на пример выше. Содержание меток может быть любым, главное, чтобы они отображали суть выбора игрока.

    Код для самопроверки
    label eat_cereals:
        "На завтрак съем хлопья."
        return
    label eat_pancakes:
        "На завтрак съем блинчики."
        return

    Допустим, у нас есть вступительная часть сценария новеллы. Мы ее уже прописали в метке start и теперь игроку необходимо сделать выбор. Делается это следующим образом: пишем ключевое слово menu, ставим двоеточие, и всё, что будет относиться к блоку с выбором, пишем с отступом в 4 пробела. Первая строка после меню - текст внизу экрана, некое напоминание игроку, что он выбирает. Последующие строки - выборы игрока. После каждого выбора надо поставить двоеточие и написать тот сценарий, который будет выполняться в случае определенного выбора (там может быть переход к новой метке, короткий диалог и т.д.).

    menu:
        "Что съесть на завтрак?"
        "Хлопья с молоком":
            <сценарий выбора>
        "Блинчики":
            <сценарий выбора>
    

    Далее нам надо перейти к новой метке в случае какого-то выбора. Это можно сделать с помощью двух операторов jump или call. Jump перекинет нас к новой метке безвозвратно. Call перекинет нас к новой метке, и когда в новая метка закончится, нас вернут обратно к предыдущей метке, откуда был совершен вызов. В данном случае лучше воспользоваться оператором jump, чтобы не запутаться в переходах между метками.

    Пример использования оператора jump:

    jump <название метки>

    Пример использования оператора call:

    call <название метки>

    Более подробно об операторах можно почитать в документации.

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

    Код для самопроверки
    menu:
        "Что съесть на завтрак?"
        "Хлопья с молоком":
            jump eat_cereals
        "Блинчики":
            jump eat_pancakes

    Если игрок выберет хлопья на завтрак, то код с блинчиками будет просто пропущен. И, наоборот, при выборе блинчиков, хлопья на завтрак отменяются. То есть одна из меток не выполнится.

    Проверьте итоговый скрипт для файла script.rpy
    label start:
        "Что же мне съесть на завтрак?"
    
        menu:
            "Что съесть на завтрак?"
            "Хлопья с молоком":
                jump eat_cereals
            "Блинчики":
                jump eat_pancakes
    
        return
    
    label eat_cereals:
        "На завтрак съем хлопья."
        return
    
    label eat_pancakes:
        "На завтрак съем блинчики."
        return

    Запустите проект в RenPy и убедитесь в том, что всё работает.







    Для комментирования войдите на сайт или зарегистрируйтесь

  • Тест - Выбор действий, метки и их параметры


    Для решения задач войдите на сайт или зарегистрируйтесь







    Для комментирования войдите на сайт или зарегистрируйтесь

© 2023 NoveLearn. All rights reserved by FIVE RACCOONS.