Игра HexaWars представляет собой пошаговый клеточный автомат. Основная цель игры - захватить наибольшее количество жизненного пространства.
Игровое поле представляет собой сетку из шестиугольников 50 х 50. Каждая ячейка может содержать n-ое количество игровых единиц одного из игроков. Максимально возможное значение ячейки равно 1000.
В начале игры каждый из алгоритмов получает одну ячейку, содержащую 100 единиц. Ячейки выдаются случайным образом.
Во время хода игрок может переместить n единиц в любую из соседних ячеек. В случае если ход совершается за пределы поля, то осуществляется перенос на противоположную сторону.
В конце хода у каждого из игроков происходит рост ячеек в зависимости от коэффициента роста. Новое значение в клетке получается после умножения старого значения на коэффициент роста.
Коэффициент роста определяется по формуле:
Округление происходит по математическим правилам, например:
Каждый ход каждому боту предоставляется полная информация об игровом поле, включая расположение и вес ячеек противника.
В описании классов присутствуют только публичные методы, свойства и конструкторы. Остальные элементы в данном описании отсутствуют, так как недоступны в процессе написания ботов.
Класс Field — это класс игрового поля. Для написания своего бота вам потребуются следующие методы:
Класс Cell — это класс отдельной ячейки игрового поля. Для того, чтобы узнать состояние ячейки, потребуется использовать следующие свойства:
Класс Bot — это основной класс игрового бота. От него наследуются все боты игроков. В нём содержится один метод, который требуется переопределить в каждом новом боте.
Методы:
Конструкторы:
Поля:
int count – количество перемещаемых единиц
Для создания своего бота пользователю необходимо разработать собственный класс, который будет наследовать класс Bot, и переопределить в нем метод getNextCommands.
Пример бота
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GridBot; //Необходимая библиотека для написания бота
using GridClient; //Необходимая библиотека для написания бота
namespace HexaWarsTestProgram
{
class MySimplyBot:Bot
{
public override void getNextCommands(List< MovementCommand >
movementCommands, Field field)
{
var myCells = field.GetMyCells(); //Получаем лист своих ячеек
for (int i = 0; i < myCells.Count; i++) //Перебираем все свои ячейки для совершения над ними какого либо действия
{
movementCommands.Add(new MovementCommand( // добавляем в лист команд для обработки новую команду перемещения
myCells[i].Coordinate, // для ячейки из коллекции myCells с индексом i берём её координаты
MovementCommand.Direction.Right, // делаем ход вправо для чего используем внутренний enum Movement Command Direction с вариантом Right
myCells[i].Population/2)); // для того чтобы сделать ход половиной ячейки берём ячейку из коллекции myCells с индексом i и её свойство Population делим на 2 и отправляем
}
}
}
}