Мне нужно реализовать AI для игры Abalone, и мне интересно, как лучше представить логику платы с помощью Java, не тратя слишком много ресурсов на все процедуры проверки и обновления.
Лучше всего использовать различные списки? Матрица объектов Cell? Любое предложение?
Ответы:
1) поскольку доска имеет фиксированный размер, который вы в любом случае будете вводить в ИИ, вы можете просто представить его в виде одномерного массива с нужным количеством ячеек, где каждая ячейка представляет пробел на доска. Отображение этого одномерного массива на экране для презентации может быть немного странным, но эту проблему вам нужно решить только один раз.
То же самое относится к проверке ходов; Вы можете либо создать матрицу смежности, которая сообщает, какие ячейки соседствуют с другими, либо придумать логику для определения смежности. В любом случае, это будет единовременная стоимость.
2) Обратите внимание, что каждая шестнадцатеричная сетка также является двухосной сеткой, за исключением того, что оси расположены на 60 или 120 градусов друг от друга, а не на 90 градусов, как сетки, где X и Y перпендикулярны. (В старых настольных играх с гекс-плиткой этот прием использовался для обозначения гексов 1, 2, 3 в одном направлении, а AA, BB, CC - в другом, наклонном направлении.)
Я посмотрел исходный код компьютерных реализаций настольных игр, в которых используется (2), и они предоставили такие подпрограммы, как «найти границу между гексами» или «найти расстояние между гексами». Это было давно, поэтому детали теряются во времени, но я помню, что это было не слишком сложно.
(Это была более целочисленная математика, чем пифагорейская;)
источник