Существует ли общая методика обработки состояния (в целом) в функциональном языке программирования? В каждом (функциональном) языке программирования есть решения для обработки глобального состояния, но я хочу избежать этого, насколько смог.
Все состояние чисто функциональным образом является функциональными параметрами. Поэтому мне нужно поместить все игровое состояние (гигантскую хэш-карту с миром, игроками, позициями, счетом, активами, врагами и т. Д.) В качестве параметра для всех функций, которые хотят манипулировать миром при заданном входе или триггере. , Сама функция выбирает соответствующую информацию из BLOB-объекта игрового состояния, что-то с ним делает, манипулирует игровым состоянием и возвращает игровое состояние. Но это похоже на решение проблемы бедняков. Если я помещу целое состояние игры во все функции, для меня не будет никакой пользы в отличие от глобальных переменных или императивного подхода.
Я мог бы поместить только соответствующую информацию в функции и вернуть действия, которые будут предприняты для данного ввода. И одна функция применяет все действия к игровому состоянию. Но большинству функций нужно много «актуальной» информации. move()
нужна позиция объекта, скорость, карта для столкновения, положение всех врагов, текущее здоровье, ... Так что этот подход тоже не работает.
Итак, мой вопрос: как мне справиться с огромным количеством состояний в функциональном языке программирования - особенно для разработки игр?
РЕДАКТИРОВАТЬ: Есть некоторые игровые рамки для создания игр в Clojure. Подход к решению этой проблемы частично состоит в том, чтобы нарезать все объекты в игре как «сущности» и поместить их в огромную сумку. Гигант Основная функция держит экран и сущности и обработки событий ( :on-key-down
, :on-init
, ...) для этого лиц и запустить главный цикл отображения. Но это не чистое решение, которое я ищу.
move()
вы, вероятно, должны передавать «текущий» объект (или идентификатор для него), а также мир, в котором он движется, и просто получать текущее положение и скорость ... тогда выход - это весь физический мир, или, по крайней мере, список измененных объектов.