Модель игры

Для описания действий на Марсе была разработана математическая модель, которая содержит ключевые особенности реальных боевых действий.

Главными действующими лицами являются роботы, снабженные новейшими лазерными орудиями. Роботы производятся на специальных марсианских фабриках – базах. Боевые действия происходят на некоторой ограниченной территории, называемой локацией или полем. На поле расположены несколько баз, распределённых между различными командами – конкурирующими корпорациями.

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

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

 

Игровое поле

Игровое поле представляется гексагональной сеткой ячеек (клеток), состоящей из N рядов по М ячеек в каждом. Каждая клетка идентифицируется парой чисел (x, y), 0 ≤ x <M, 0 ≤ y <N, где y – номер ряда, x – номер клетки в ряду. Чётные ряды клеток смещены вправо на пол-ячейки относительно нечётных рядов.

Каждая клетка может быть либо пуста, либо в ней может находится робот или база. В одной клетке не может располагаться более одного объекта (робота или базы). Для произвольных двух клеток поля можно вычислить расстояние между ними как минимальное количество переходов, за которое можно достичь одной клетку из другой.

Рис. 1. Расстояние между клетками

Перемещение по полю происходит в виде последовательности шагов из одной клетки в другую соседнюю клетку. Для каждого шага между клетками может быть определено направление движения в виде чисел от 1 до 6, в соответствии с рисунком (0 – отсутствие движения):

Рис. 2. Направления движения

Элементами игрового поля могут быть базы и роботы.

База – неподвижный элемент поля, описывается набором значений <x, y, team, hitpoints, cooldown>. Пара (x, y) задаёт координаты клетки, в которой располагается база. Параметр team содержит номер команды, к которой принадлежит база; значение team равное -1 определяет нейтральную базу. Параметры hitpoints и cooldown задают такие характеристики базы, как её текущий запас прочности и время до создания следующего робота.

Робот – это мобильный (способный к перемещению) элемент поля, описывается набором значений <x, y, team, hitpoints, cooldown, memory>. Пара (x, y) задаёт текущие координаты робота, team – номер команды робота, hitpoints – запас прочности. Параметр cooldown определяет время до готовности робота к стрельбе. В переменной memory может храниться состояние памяти робота.

 

Дополнительные параметры модели

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

  • Максимальный запас прочности у робота
  • Максимальный запас прочности у базы
  • Время создания нового робота у базы
  • Время перезарядки оружия у робота
  • Радиус видимости у робота
  • Радиус стрельбы у робота
  • Радиус передачи сообщений у робота

 

Работа модели

Функционирование модели проходит в синхронном режиме, по тактам (итерациям). Каждый такт соответствует единичному интервалу модельного времени.

На каждом такте происходят следующие действия (в указанной последовательности):

  1. Моделирование работы баз
  2. Определение видимости для роботов
  3. Обмен сообщениями между роботами
  4. Принятие решений роботами
  5. Расчет выстрелов роботов
  6. Расчет повреждений роботов и баз
  7. Перемещение роботов

Подробнее о каждом шаге:

  1. Для каждой не нейтральной базы, у которой cooldown больше 0, значение cooldown уменьшается на единицу. Для каждой не нейтральной базы, у которой cooldown равен 0 и вокруг есть свободная клетка (не занятая другим роботом или базой), в этой клетке порождается робот, с максимальным запасом прочности и готовым к стрельбе оружием (cooldown робота равен 0). При этом значение cooldown для этой базы (независимо от того, был создан робот или нет) устанавливается равным <Время создания нового робота> минус 1.
  2. Для каждого робота определяются роботы и базы, которые находятся в его зоне видимости. Для каждого объекта (робота или базы) в зоне видимости робот получает такую информацию, как координаты клетки, в которой находится объект, номер команды объекта и расстояние до него.
  3. Каждому роботу пересылаются сообщения ото всех роботов из его команды, которые находятся в его радиусе передачи сообщений и выставили флаг передачи сообщения.
  4. На основе полученной информации роботами принимаются решения о действии на текущей итерации. Решения включает в себя такие элементы, как стрельба, перемещение и передача сообщения. Для каждого элемента выставляется соответствующий флаг и, если нужно, параметры.
  5. Для каждого робота, который решил выстрелить, производится расчет нанесенного им урона. Робот может произвести выстрел только в том случае, если его орудие готово к стрельбе (cooldown равен 0). После выстрела cooldown робота становится равным <Время перезарядки оружия> минус 1. Если клетка, в которую решил выстрелить робот, находится в радиусе стрельбы,  и в этой клетке находится вражеский робот или вражеская/нейтральная база, то им наносится урон в размере единицы (выстрелы по дружественным объектам не считаются). 
  6. Если суммарный урон, полученный роботом на этом такте, превышает его текущий запас прочности, робот уничтожается (а занимаемая им клетка освобождается). Если суммарный урон, полученный базой от роботов из одной команды на этом такте, превышает ее текущий запас прочности, база переходит во владение этой команды, при этом она получает максимальный запас прочности, а значение cooldown устанавливается равным <Время создания нового робота> минус 1. Если же база была атакована роботами из разных команд (двух и больше), все повреждения, нанесенные ей на этом такте, аннулируются.
  7. Если робот хочет переместиться в новую клетку, он перемещается в нее, при условии, что эта клетка свободна и в нее не хочет переместиться еще один робот, в противном случае робот остается на месте.