我正在编写适用于iOS的Settlers of Catan,目前我的数据磁贴已经在matix中。现在,我正在尝试将数字附加到每个图块。但我坚持在算法上做正确的方法。在电路板上放置数字瓷砖有特定的规则。这些是:
1)它们必须按照图像中显示的预定义顺序进行。
2)你必须从董事会的一角开始。
3)你必须逆时针绕着电路板工作,朝中心方向旋转。
4)你必须跳过沙漠瓷砖。
由于电路板上只有6个位置可以实际开始放下瓷砖,我意识到将6个解决方案手工编码到我的数据网格中并不困难。但是游戏有一个变化,其中棋盘变大,所以我认为值得探索算法。
有任何想法如何实现这一目标?
答案 0 :(得分:2)
您想要做的事情将涉及瓷砖之间的几何关系(矩阵中的条目)
您需要一种存储和查询该信息的方法。
人们已经开发了几种方法来为六边形分配坐标:
一种方法可以做到你想要的,从我的头顶,将是每个十六进制与其邻居有6个“指针”。当然,这些指针实际上可能是数组中的索引。
你可以通过注意它将有3个'null'邻居来检测'corner'十六进制。然后你可以从那里逆时针穿过,记住你已经去过的地方。
更新(以回应评论)
让我们假设对于给定的十六进制,我们按照我的描述存储了6个邻居。
在本次讨论中,我们将这些邻居命名为A-F。
我们逆时针分配这些,因为这对我们来说很方便。
图形:
A
_____
B / \ F
/ \
( )
\ /
C \_____/ E
D
对于'角'十六进制,我们可能有:
A
_____
B / \ NULL
/ \
( )
\ /
C \_____/ NULL
NULL
因此,如果我们正在查看此十六进制,并列出我们的邻接信息(环绕),我们有:
A,B,C,NULL,NULL,NULL,A,B,C,......
一旦我们连续找到3个NULL,我们知道下一个点应该在我们的起始方向上“指向”。在这种情况下,我们应该从'A'开始。
另一个例子:
NULL
_____
NULL / \ NULL
/ \
( )
\ /
C \_____/ E
D
和以前一样,我们从顶部开始制作一个列表。
NULL,NULL,C,D,E,NULL,NULL,NULL,C
一旦我们找到3个NULL,下一个就是我们的起始方向 - 在这种情况下为“C”。
从同一方向向前旋转应该相当直接(不是字面意思 - har har)。
PS:感谢http://ascii.co.uk/art/hexagon快速的ascii艺术(: