Матчасть
August 22

Матлогика для геймдизайнеров

Базовая шпаргалка, которая может помочь в работе геймдизайнера, если он сталкивается с написанием условий для описании работы фич или настройкой конфигов.

Синтаксис

В основном для описаний условий используется Си-подобный синтаксис.

Сравнение

Логические операторы

Примеры

Приоритет операторов

Если не ставить скобки, то операции выполняются в порядке:

  1. Отрицание.
  2. Умножение и деление.
  3. Сложение и вычитание.
  4. Равенство, неравенство, сравнение.
  5. Союз И (&&).
  6. Союз ИЛИ (||).

Как сделать исключающее ИЛИ?

XOR или, другими словами, исключающее ИЛИ можно сделать через базовые операторы. В этом случае нам нужно чтобы сработало только одно условие. Либо то, либо это, но не оба вместе.

Рефакторинг условий

Скобки

Иногда добавление скобок добавляет читабельности, так как делит условие на некоторые блоки, но старайтесь ими не увлекаться.

Избавляемся от отрицаний

Старайтесь избавляться от лишних отрицаний и делать условие чище и читабельнее.

Отрицание сравнений:

Законы Де Моргана

Полезно знать, что:

  • (не А или не Б) это то же самое, что (неи Б))
  • (не А и не Б) это то же самое, что (неили Б))

Может в некоторых случаях улучшить читаемость условий.

Применим закон к сравнениям:

Задания

1. Упростите конструкцию:

(featureIsActive == true) && (!(cooldown <= 0) || (state == 'locked'))

Ответ:

featureIsActive && (cooldown > 0 || state == 'locked')

2. Переделайте условие:

!((monster == 'ghost') || (monster == 'vampire') || (monster == 'skelet'))

Вариант ответа:

monster != 'ghost' && monster != 'vampire' && monster != 'skelet'

Бонус-загадка

Разгадайте парадокс Критянина:

Критянин сказал, что «Критяне всегда говорят ложь».

Если он сказал правду, то так как он критянин, то он должен, по его уже утверждению, сказать ложь.

Если он солгал, то значит он должен сказать правду.

Как может быть такое противоречие?

Ответ:

Критянин солгал.

Автор парадокса хочет вас запутать и убедить, что если критянин сказал ложь, то это теперь значит, что «Критяне всегда говорят правду».

Но отрицание фразы в действительности будет такое: «Критяне не всегда говорят ложь». Что по сути ничего не значит. Поэтому следствие «Если он солгал, то значит он должен сказать правду» не работает.

Другой похожий пример отрицания фразы:

Отрицание для фразы «Все вороны черные» — «Не все вороны черные».