XaiJu
Muffin Projects
Muffin Projects

boosty


Techlog #1. Experimental. Basic concepts. Classes [ru]

Дисклеймер: Автор блога использует python лишь для хобби - создания игры. Всех глубинных нюансов реализаций внутренних механизмов он не знает. А может даже был бы рад если бы вы могли ему помочь в каких-то вопросах! 

Так как в прошлом голосовании победила номинация на базовые концепции - расскажу о самой часто применяемой конструкции в моём проекте - Классы. Я постараюсь объяснять всё простым языком и приводить игровые примеры, не вдаваясь в технические подробности.

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

Приведу пример синтаксиса в проекте на RenPy:
Так выглядит в проекте класс сущности Quest, которую я использую для квестов в игре. Прежде чем писать python-код внутри файла с расширением .rpy - вы должны обернуть это в "init python:".
Дальше идёт непосредственно сама декларация класса.
В скобочках написано (object) - не стоит вдаваться в подробности, это то как в python 3 создаются классы.
def __init__ (self, список_параметров) - это то, что мы указываем при инициализации экземпляра класса в игре. Например:
Как вы могли заметить, в этом примере при создании экземпляра - я не добавил пару полей - reward и availablity. Все дело в том, что в инициализации класса - я задал этим полям значения по умолчанию.
Это значит, что их указывать необязательно, но пожеланию - вы можете их указать. 

- Зачем так стоит делать?
- Чтобы по 1000 раз не писать ненужные свойства, которые зачастую везде одинаковые.

Если вы хотите иметь в классе поле которое в 100% случаев для всех экземпляров будет одинаковым - просто не пишите его в скобки и укажите в самом блоке, как например с полем done.
Но конкретно в этом примере всё гораздо сложнее. Дайте знать если захотите почитать про конкретно механику квестов в моей игре.
Квест должен иметь свойство быть завершаемым. То есть, его свойство done - должно уметь менять своё значение по нашей команде.
Внутри класса - мы можем определить метод/функцию.
Метод finish - поменяет значение нашего экземпляра квеста в значение True - сделав его завершенным и делает нотификацию встроенным методом renpy.notify() (Черная полоска с текстом слева).

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

Помимо __init__ у классов есть еще множество встроенных методов.
Из полезного я бы отметил __getitem__
На скриншоте пример класса с характеристиками персонажа. Например, чтобы иметь возможность доставать их объекта stats напрямую - я должен объявить этот самый метод, чтобы потом в коде я мог делать проверки написав очень просто:
Из полезного стоит отметить декоратор @property у класса. 
Если вы хотите получать уже результат расчета каких-то полей внутри экземпляра класса - вы можете объявить подобное:
Это пример из класса Time из нашей игры для управлением времени. Он просто проверяет в результате расчета - выходной ли день сейчас.

Естественно по поводу классов есть еще куча информации. Но я думаю чтобы выдержать формат - нужно писать меньше текста. Оставьте комментарии по поводу формата данного блога! Очень важно знать, что можно улучшить и т.д. 

Дальше на очереди блог про механику времени в игре, а дальше посмотрим по ситуации.

Techlog #1. Experimental. Basic concepts. Classes [ru] Techlog #1. Experimental. Basic concepts. Classes [ru] Techlog #1. Experimental. Basic concepts. Classes [ru] Techlog #1. Experimental. Basic concepts. Classes [ru] Techlog #1. Experimental. Basic concepts. Classes [ru] Techlog #1. Experimental. Basic concepts. Classes [ru]

Comments

<div ><div><span class="text">Wequp |Femboy time| Official, окей, напишу завтра/послезавтра об этом)<br>upd: чуть-чуть обманул. не вышло совсем, т.к. в выходные делами завалили.</span></div></div>

Muffin Projects

<div ><div><span class="text">хотелось бы увидеть, как в игре выглядит код одного квеста и что за что там отвечает)</span></div></div>

Wequp |Femboy time| Official


More Creators