Pull to refresh

Comments 8

В игре система поверхностей всё же сложнее показанного.

1) Поверхность пара создаётся над жидкостью и продолжает существование независимо. То есть под паром может быть новая жидкость с другими свойствами. Не увидел этого в коде

2) Благословенные и проклятые жидкости имеют приоритет над обычными. Нельзя погасить проклятое пламя обычной водой, сперва его надо благословить

3) Также не нашел, возможно ли существование проклятого огненного облака, которое есть в игре

Интересная статься, но в готовой игре система всё такие более углублённая со сложными для программирования нюансами

Спасибо, вы совершенно правы, что я учёл не все нюансы из оригинальной игры.
1) да, комбинация "поверхность + пар" в текущей версии невозможна. Мы действуем в парадигме "одной ячейке Cell - одна поверхность Surface". Однако в Cell можно создать дополнительный атрибут cloud (помимо surface), который должен быть в газообразном состоянии (если на него подействовали охлаждением, то произойдёт конденсация. Тогда субстанция облака вступит в реакцию с поверхностью согласно правилу set_base_surface).

2) я забыл об этой игровой особенности, спасибо, что напомнили. В set_base_surface можно добавить проверку - "если магическое состояние не нейтральное, то текущая базовая субстанция будет устойчива к вытеснениям". С огненными поверхностями чуть сложнее, например, нет же разницы между поджиганием благословленной и обычной нефти?

3) да, возможно. Для этого нужно применить цепочку преобразований:
s = Surface()

s.set_base_surface(BaseSurface.FIRE)

print(s.heat().curse())

По поводу пункта 2): я внес изменения в код метода set_base_surface в статье, который поддерживает приоритет магических поверхностей.

Я бы начал как раз с хардкодинга. Описываете машину состояний, добавляете проверок на целостность. С поведением по умолчанию, легко пропустить какие-то шаги, а с валидной машиной, вы над каждым взаимодействием подумаете. Для заполнения данных не нужен будет программист. А ещё будет легко построить документацию и подсказки для пользователя, что можно сделать с этоц поверхностью.

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

Очень интересная статья. Я загорелся идеей сделать подобную систему на Raku, попробую написать ответную статью со сравнением, как бы выглядело то же самое, но в контексте другого языка. Мне кажется, что многие повторяющиеся части вроде веток if-else, конструкций с and можно упростить. Например, отдельные ветки можно разбить на мультиметоды, а повторяющиеся условия сократить с помощью Junctions https://docs.raku.org/type/Junction

Отлично, будет интересно почитать.

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

https://habr.com/ru/sandbox/222460/

Sign up to leave a comment.

Articles