Сегодня поговорим о создании числовых переменных. Числовые переменные достаточно важны, потому что с помощью них можно добавить персонажу много характеристик: деньги, здоровье, ману. В общем, новеллу можно сильно преобразить.
Попробуем описать в новелле ситуацию, когда перед игроком есть выбор, сколько потратить денег. В зависимости от потраченной суммы будет меняться сюжет.
Для начала нам надо создать новую переменную, делается это в самом начале скрипта. Пусть это будет переменная money со изначальным значением в 7000 игровых монет.
define money = 7000
Раз уж мы задели тему создания переменных, немного отвлечемся и посмотрим на строковые переменные. Их можно создать при помощи кавычек (питону и RenPy неважно, одинарные это кавычки или двойные).
define new_text = "Любой текст"
define another_text = 'Другой текст'
Дадим игроку возможность самому решать, сколько он потратит денег. Для этого сделаем ввод числа с клавиатуры. Делается это при помощи питоновской команды (значит, надо поставить в начале $).
renpy.input("<фраза которая будет выведена при вводе числа>",
length=<максимальная длина строки>, allow="<допустимые символы>")
Также нам пригодится метод, который будет удалять пробелы по краям строки (strip) и обработка случая, если игрок ничего не ввел (используем логический оператор or). Результат запишем в переменную spent_money. Код должен выглядеть так:
label start:
$ spent_money = renpy.input("Сколько потратить денег?",
length=4, allow="0123456789").strip() or "0"
Обратите внимание, что в конце 0 написан в кавычках. Это означает, что он введен как строка, а не как число. В программировании это разные вещи. “0” и 0 - разные вещи, и их поведение в коде будет различным. Если вы захотите строку “0” прибавить к числу 10, то с таким же успехом, можно попытаться прибавить букву “a” к этому числу. Стоит отметить, всё, что вводит пользователь - строки. Что же делать с этими строками? Ведь нам нужны цифры, чтобы складывать их или вычитать. Выход есть! Превратим строку в число. В питоне есть метод int(<строка с числом>), который попытается строку превратить число (попытается, потому что не все строки превращаются в числа, если там буквы, то ничего не выйдет).
$ spent_money = int(spent_money)
У нас есть всего 7000 монет. А если игрок введет 8000? Надо от этого обезопаситься. Сравним введенное число и 7000, если введенное число больше, то оставим его как 7000. (Логика не совсем правильная, лучше бы предупредить игрока о том, что число слишком большое и заставить его снова ввести сумму, но для этого нужно знать конструкцию while, которую мы еще не изучали).
if spent_money > 7000:
$ spent_money = 7000
Теперь попробуем вывести сообщение о том, сколько денег потрачено. Для этого тоже будем сравнивать числа. Какие вообще бывают операторы сравнения: > (больше чем), < (меньше чем), >= (больше или равно), <= (меньше или равно), == (строго равно), != (не равно).
Посмотрим на 3 ситуации: если мы потратили 0, если потратили все деньги (7000) и если потратили больше 0 и меньше 7000.
if spent_money == 0:
"Вы не потратили ни копейки."
elif spent_money == 7000:
"Вы потратили вообще все деньги."
else:
"Вы потратили [spent_money]."
with fade
Так, что это за квадратные скобки в реплике? Это вывод значения переменной в тексте реплики. Так можно выводить любые переменные (числа, строки, логические значения). Достаточно поставить квадратные скобки и внутри них написать название переменной.
Весь код на текущий моментdefine money = 7000
label start:
$ spent_money = renpy.input("Сколько потратить денег?", length=4, allow="0123456789").strip() or "0"
$ spent_money = int(spent_money)
if spent_money > 7000:
$ spent_money = 7000
if spent_money == 0:
"Вы не потратили ни копейки."
elif spent_money == 7000:
"Вы потратили все деньги."
else:
"Вы потратили [spent_money]."
Поговорим об изменении значения числовой переменной. Для этого чуть поменяем код. Вместо 7000 везде напишем переменную money, которую создали в самом начале.
Код для самопроверкиdefine money = 7000
label start:
$ spent_money = renpy.input("Сколько потратить денег?", length=4, allow="0123456789").strip() or "0"
$ spent_money = int(spent_money)
if spent_money > money:
$ spent_money = money
if spent_money == 0:
"Вы не потратили ни копейки."
elif spent_money == money:
"Вы потратили все деньги."
else:
"Вы потратили [spent_money]."
Теперь уменьшим количество денег, которые естьу игрока. Просто вычтем сумму, которую потратили.
$ money = money - spent_money
Если это выглядит странно, то поясним - переменной money мы присвоили новое значение, которое равно money - spent_money. Точно так же можно и прибавлять значению, умножать их и делить.
Выведем остаток:
"У игрока осталось [money] монет."
define money = 7000
label start:
$ spent_money = renpy.input("Сколько потратить денег?", length=4, allow="0123456789").strip() or "0"
$ spent_money = int(spent_money)
if spent_money > money:
$ spent_money = money
if spent_money == 0:
"Вы не потратили ни копейки."
elif spent_money == money:
"Вы потратили все деньги."
else:
"Вы потратили [spent_money]."
$ money = money - spent_money
"У игрока осталось [money] монет."
Создайте переменную для здоровья игрока (начальное значение 100), переменную, которая отвечает за наличие зелья в инвентаре (начальное значение True) и переменную с количеством монет (изначально есть 50 монет). Допустим, на вашего персонажа напал огромный монстр. У вас есть выбор: сразу вступить в бой или выпить зелье. Если сразу вступить в бой, то игрок потеряет 20 единиц здоровья и получит 30 монет. Если сперва выпить зелье, то здоровья станет на 20% больше, зелье закончится в инвентаре, в драке потеряется 5 единиц здоровья и в качестве награды игрок получит 20 монет.
Код для самопроверкиdefine health = 100
define has_potion = True
define coins = 50
label start:
"На вас напал огромный орк"
menu:
"Что делать?"
"Вступить в бой":
# Сокращенная запись. То же самое, что и health = health - 20
$ health -= 20
$ coins += 30
"Выпить зелье, потом сражаться":
$ health *= 1.2
$ has_potion = False
$ health -= 5
$ coins += 20
"Здоровье: [health]; Использование зелья: [has_potion]; Монеты: [coins]."
return
Не пугайтесь скобок в предпоследней строке скрипта - это вывод переменных в реплике персонажа.
© 2023 NoveLearn. All rights reserved by FIVE RACCOONS.