Как смоделировать мой игровой проект в концепции функционального программирования с помощью OCAML? - PullRequest
0 голосов
/ 22 января 2019

В настоящее время я работаю над проектом создания видеоигры, а именно пошаговой стратегии в OCAML.Это курсовая работа по функциональному программированию, поэтому чем функциональнее программирование, тем лучше, но если я не могу сделать это с функциональным программированием, я могу использовать ООП, если ДЕЙСТВИТЕЛЬНО нужно.

Вот модель моей игры на базовом уровне.уровень:

Далее, когда я говорю type, я на самом деле имею в виду instance/type/module, то есть я не знаю, как мне это реализовать, но я знаю, что они должны быть по крайней мере упакованы в разныесекции.

Будет тип Main.Его роль - переключаться между меню, настройками и реальной игрой.

Тип Game запустит игру.В контексте он будет повторять каждый Faction игры и повторять в пределах Faction каждый Unit, который имеет фракция.К каждому Unit будет прикреплено определенное поведение.

Каждый игровой объект (который можно отобразить на 2D-экране) будет иметь тип GameObject.В идеале я могу прикрепить кучу видео / аудио / и т.д.рендер и я сможем узнать их положение на карте.

Grid будет массивом массива, состоящим из Tile.Grid имеет глобальный вид на игру, начиная с Grid, я могу, например, знать местоположение каждого GameObject в Game

Tile плитки на сетке,В конце концов, я хотел бы, чтобы у них были специальные функции, например тип местности.

Unit (не путать с типом unit из OCAML) - это объект, управляемый Faction.Он имеет много атрибутов, таких как здоровье, мана, сила и т. Д. И может выполнять определенные действия в зависимости от того, кем они являются.

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

Action - это тип, представляющий действие.Он имеет атрибуты источника и назначения.Он может представлять любой тип действия, от самоисцеления до AOE-заклинания.У него есть доступ к Game, так что он может свободно делать все, что пожелает, в пределах Game.

Моя цель - создать игровую модель, которую я могу постепенно улучшать.Например, я хотел бы создать подклассы юнитов, тех, кто может атаковать издалека, и тех, кто может атаковать только в ближнем бою и т. Д.

Если бы это был ООП-проект, он был бы довольно простым, хотя и неэффективнымесли я понял предыдущие комментарии.Как видите, мое мышление смещено в сторону ООП, потому что я не делал ни одного проекта такого масштаба без ООП.Моя цель здесь состоит в том, чтобы сделать это в функциональном программировании.

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

Спасибо.

РЕДАКТИРОВАТЬ: отредактировал весь вопрос EDIT2: некоторые орфографии и обратные пометки

1 Ответ

0 голосов
/ 24 января 2019

Ваш вопрос заполнен императивом и идиомами ООП: итерация, массив, объект, подклассы ... Итак, ваше мышление, похоже, уже составлено.

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

К счастью, ocaml хорошо подходит для этого. Записи и классы могут иметь изменяемые поля, а классы ocamls могут красиво моделировать ваши объекты и наследование. И вы все еще можете использовать все функциональные концепции ocaml вместе с классами. Хорошо смешивается.

...