• Лекция - Числовые и строковые переменные


    Сегодня поговорим о создании числовых переменных. Числовые переменные достаточно важны, потому что с помощью них можно добавить персонажу много характеристик: деньги, здоровье, ману. В общем, новеллу можно сильно преобразить.

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

    Для начала нам надо создать новую переменную, делается это в самом начале скрипта. Пусть это будет переменная 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.