将数字瓷砖放置在适用于iOS的Settlers of Catan中

时间:2012-06-26 00:07:08

标签: ios algorithm matrix

我正在编写适用于iOS的Settlers of Catan,目前我的数据磁贴已经在matix中。现在,我正在尝试将数字附加到每个图块。但我坚持在算法上做正确的方法。在电路板上放置数字瓷砖有特定的规则。这些是:

1)它们必须按照图像中显示的预定义顺序进行。

2)你必须从董事会的一角开始。

3)你必须逆时针绕着电路板工作,朝中心方向旋转。

4)你必须跳过沙漠瓷砖。

Catan board

由于电路板上只有6个位置可以实际开始放下瓷砖,我意识到将6个解决方案手工编码到我的数据网格中并不困难。但是游戏有一个变化,其中棋盘变大,所以我认为值得探索算法。

有任何想法如何实现这一目标?

1 个答案:

答案 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艺术(: