• Лекция - Логические переменные и условия


    Сегодня поговорим о том, как сделать так, чтобы персонажи запоминали действия игрока. Также можно будет создавать события, влияющие на сюжет. Например, игрок делает какой-либо выбор в начале игры, но ответная реакция на выбор будет явной только в конце сюжетной линии.

    Пример из игры Batman Пример из игры Batman: The Teltalle Series — The Enemy Within

    Делается это при помощи логических переменных. Сейчас разберемся, что это такое.

    Переменная - это некий контейнер для информации. Информация может храниться в виде числа или строки (например, имя персонажа). Если, вы никогда не встречались с переменными, то такого понимания для работы с RenPy вполне хватит.

    Логическая переменная может принимать только два значения - True или False (Правда или ложь). По сути, логическая переменная напоминает переключатель. Например, как выключатель света в комнате. Может находиться только в двух позициях - свет выключен или свет включен. При помощи логических переменных можно описывать подобные явления.

    Все переменные лучше объявлять в начале скрипта, там где мы ранее объявляли персонажей. Делается это следующим образом:

    define need_go_store = False

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

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

    Создайте в своем скрипте такую же переменную. Далее изменим в ранее написанном скрипте её значение. Присвойте need_go_store значение True при выборе завтрака с хлопьями. Так как изменение значения переменных является частью кода на Python, то перед этим надо поставить знак $. Так RenPy поймет, что перед ним уже не синтаксис движка. В будущем мы сможем проверить, есть ли нужда идти в магазин.

    Код для самопроверки
    define need_go_store = False
    
    label start:
        "Что же мне съесть на завтрак?"
        menu:
            "Что съесть на завтрак?"
            "Хлопья с молоком":
                jump eat_cereals
            "Блинчики":
                jump eat_pancakes
        return
    
    label eat_cereals:
        "На завтрак съем хлопья."
        "Заглянув в холодильник, я увидел, что молока осталось совсем чуть-чуть…"
        "Придётся идти в магазин"
        $ need_go_store = True
        return
    
    label eat_pancakes:
        "На завтрак съем блинчики."
        return

    В новой метке сделаем проверку “надо ли идти в магазин”. Проверка делается оператором if (Если).

    if need_go_store:
        <код игры, но он выполнится только в случае, если need_go_store равно True>

    Чтобы прописать вариант, который выполнится только при need_go_store равном False, воспользуемся оператором else (Иначе).

    else:
        <Код, который выполнится только при need_go_store равном False>

    Таким образом, у нас должна получиться конструкция “если <какое либо условие>: сделать что-то, иначе: сделать что-то другое”.

    В случае нашей истории с завтраком, это будет выглядеть так:

    label after_breakfast:
        if need_go_store:
            "После завтрака я решил сходить в магазин, ведь закончилось последнее молоко."
        else:
            "Я решил начать свой день с прочтения последних новостей."
        return
    

    Есть еще один оператор elif, он может посмотреть на другое условие и выполнить его. Блоков с elif может быть сколько угодно. Порядок выполнение операторов такой:

    1. if (проверка первого условия)
    2. elif (проверка второго условия, если первое не выполнилось)
    3. else (если все условия выше не выполнились, будет сделано то, что после else)

    Обратите внимание на отступы, если в них ошибиться, то игра просто не запустится.

    Теперь у нас есть переменная, которая работает как переключатель и определяет, надо ли персонажу идти за покупками. И условие, которое смотрит на данный “переключатель” и определяет, куда дальше направить сюжет.

    По итогу данного урока у вас должен получиться примерно такой код в файле script.rpy.

    Проверьте итоговый скрипт для файла script.rpy
    define need_go_store = False
    
    label start:
        "Что же мне съесть на завтрак?"
        menu:
            "Что съесть на завтрак?"
            "Хлопья с молоком":
                jump eat_cereals
            "Блинчики":
                jump eat_pancakes
        return
    
    label eat_cereals:
        "На завтрак съем хлопья."
        "Заглянув в холодильник, я увидел, что молока осталось совсем чуть-чуть…"
        "Придётся идти в магазин"
        $ need_go_store = True
        jump after_breakfast
        return
    
    label eat_pancakes:
        "На завтрак съем блинчики."
        jump after_breakfast
        return
    
    label after_breakfast:
        if need_go_store:
            "После завтрака я решил сходить в магазин, ведь закончилось последнее молоко."
        else:
            "Я решил начать свой день с прочтения последних новостей."
        return

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







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

  • Практика - Логические переменные и условия


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







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

© 2023 NoveLearn. All rights reserved by FIVE RACCOONS.