Моделирование игровых интерфейсов в Clojure

Я пытаюсь написать игру на Clojure, используя Quil.

(qc/defsketch sketch
  :title "My Game"
  :size [800 600]
  :setup #(qc/smooth)
  :draw draw
  :mouse-pressed mouse-pressed
  :key-pressed key-pressed)

(Я могу использовать (def position (atom 0)) а также (swap! position inc) а также @position чтобы сделать движущийся шар, но я не знаю, как масштабировать это.)

Обратите внимание, что я предоставляю эскизу функцию для рисования (и обработчики ввода). Если я просто делаю быстрый набросок, один draw Функция в порядке.

Но в моей игре мне нужно рисовать разные вещи в зависимости от того, является ли главное меню, инструкции, селектор уровня или игра активным видом. Некоторые из них (в основном игровой вид) должны иметь связанные с ними данные, которые будут обновляться при каждом розыгрыше.

Как я могу пойти по этому поводу? Чем больше я читаю о Clojure, тем больше путаюсь. (Должно ли каждое представление быть записью, удовлетворяющей протоколу? Должны ли они храниться в виде атомов или их внутреннее состояние должно храниться в виде атомов? Или состояние симуляции игры должно быть отдельным атомом - за исключением того, что я не хочу, чтобы он занимал память пока не активируется вид игры...) Это было бы так просто в ООП, но я хочу научиться функциональному программированию.

Обновить

Если вы заинтересованы в том, что я в конечном итоге сделал, см. Мини-шестерни.

1 ответ

Решение

В блоге http://stevelosh.com/blog/2012/07/caves-of-clojure-02/ описывается дизайн, который, я думаю, будет хорошо работать здесь. Игровые интерфейсы - это стек (вектор) записей. В этом сообщении в блоге они не реализуют протокол, вместо этого мультиметод от Draw-Ui отправляет информацию о типе пользовательского интерфейса (главный экран, инструкции и т. Д.). Однако вы можете изменить это, как вам угодно. Проект использует записи для моделирования состояния.

Помните, что не всегда необходимо обращаться к ссылочному типу (var, atom, ref, agent) для моделирования состояния в Clojure.

Другие вопросы по тегам