Эффективный способ представления гексагональной настольной логики для игр типа ушка

11

Мне нужно реализовать AI для игры Abalone, и мне интересно, как лучше представить логику платы с помощью Java, не тратя слишком много ресурсов на все процедуры проверки и обновления.

Лучше всего использовать различные списки? Матрица объектов Cell? Любое предложение?

введите описание изображения здесь

Asgard
источник
1
На сайте redblobgames.com есть отличный ресурс по гексагональным сеткам. Здесь есть все, что вам нужно знать о гексагональных сетках, их системах координат и о том, как выполнять на них вычисления.
Роман Райнер,

Ответы:

7

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

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

2) Обратите внимание, что каждая шестнадцатеричная сетка также является двухосной сеткой, за исключением того, что оси расположены на 60 или 120 градусов друг от друга, а не на 90 градусов, как сетки, где X и Y перпендикулярны. (В старых настольных играх с гекс-плиткой этот прием использовался для обозначения гексов 1, 2, 3 в одном направлении, а AA, BB, CC - в другом, наклонном направлении.)

Я посмотрел исходный код компьютерных реализаций настольных игр, в которых используется (2), и они предоставили такие подпрограммы, как «найти границу между гексами» или «найти расстояние между гексами». Это было давно, поэтому детали теряются во времени, но я помню, что это было не слишком сложно.

(Это была более целочисленная математика, чем пифагорейская;)

обкрадывать
источник
1
Для ИИ для создания года назад у меня был массив ячеек 19х19 и массив указателей на ячейки 192х5, которые ИИ затем использовал для определения своего хода.