В настоящее время я работаю над проектом создания видеоигры, а именно пошаговой стратегии в 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: некоторые орфографии и обратные пометки