表示类似鲍鱼游戏的六角形棋盘逻辑的有效方法


11

我必须实现用于鲍鱼游戏的AI,我想知道什么是使用Java表示板逻辑的最佳方法,而又不会在所有涉及的检查和更新例程中浪费太多资源。

更好地使用各种列表吗?单元对象矩阵?有什么建议吗?

在此处输入图片说明


1
redblobgames.com上有很多关于六角形网格的资源,它具有您需要了解的有关六角形网格,其坐标系以及如何对其进行计算的所有信息。
Roman Reiner 2014年

Answers:


7

1)由于电路板具有固定大小,无论如何您都将要馈入AI,因此您可以将其表示为具有正确数量的单元格的一维数组,其中每个单元格代表一个空格。板。将该一维数组映射到屏幕上进行演示可能有点怪异,但这是一个问题,您只需解决一次。

验证动作同样适用;您可以创建一个邻接矩阵来告诉哪些单元格与其他单元相邻,或者可以使用逻辑来确定邻接关系。无论哪种方式,这都是一次性成本。

2)请注意,每个十六进制网格也是两轴网格,除了轴彼此相距60或120,而不是像X和Y垂直的网格那样90度。(旧的六边形棋盘游戏使用此技巧在一个方向上标记1、2、3六角形,而在另一个方向上倾斜AA,BB,CC。)

我看过使用(2)的棋盘游戏的计算机实现的源代码,它们提供了诸如“在十六进制之间找到一条线”或“找到十六进制之间的距离”之类的例程。那是很久以前的事了,所以细节丢失了,但是我记得这并不难。

(更多的是整数数学而不是毕达哥拉斯的东西。)


1
对于几年前上市的AI,我有一个19x19的单元格数组和一个192x5的指向单元格的指针数组,然后AI用来确定其移动方向。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.