Сегодня поговорим о том, как сделать так, чтобы персонажи запоминали действия игрока. Также можно будет создавать события, влияющие на сюжет. Например, игрок делает какой-либо выбор в начале игры, но ответная реакция на выбор будет явной только в конце сюжетной линии.
Делается это при помощи логических переменных. Сейчас разберемся, что это такое.
Переменная - это некий контейнер для информации. Информация может храниться в виде числа или строки (например, имя персонажа). Если, вы никогда не встречались с переменными, то такого понимания для работы с 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 может быть сколько угодно. Порядок выполнение операторов такой:
Обратите внимание на отступы, если в них ошибиться, то игра просто не запустится.
Теперь у нас есть переменная, которая работает как переключатель и определяет, надо ли персонажу идти за покупками. И условие, которое смотрит на данный “переключатель” и определяет, куда дальше направить сюжет.
По итогу данного урока у вас должен получиться примерно такой код в файле script.rpy.
Проверьте итоговый скрипт для файла script.rpydefine 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.