-1

我正在为 iOS 编写 Catan 的定居者,目前我的数据块在 matix 中。现在,我正在尝试将数字附加到每个图块上。但我坚持以算法方式执行此操作的正确方法。将数字牌放在板上有特定的规则。这些都是:

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

2) 你必须从棋盘的一个角落开始。

3) 你必须逆时针绕着棋盘,向中心盘旋。

4) 你必须跳过沙漠板块。

卡坦板

由于板上只有 6 个地方可以实际开始放置图块,因此我意识到将 6 个解决方案手动编码到我的数据网格中并不难。但是有一个游戏变体,其中棋盘变得更大,所以我认为值得探索一种算法。

有什么想法可以实现吗?

4

1 回答 1

2

您想要做的将涉及瓷砖之间的几何关系(矩阵中的条目)

您需要一种存储和查询该信息的方法。

人们开发了几种方法来为六边形分配坐标:

一种做你想做的事情的方法,在我的脑海中,每个十六进制都有6个指向它的邻居的“指针”。当然,这些指针实际上可以是数组中的索引。

您可以通过注意到它将有 3 个“空”邻居来检测“角落”十六进制。然后你可以从那里逆时针移动,记住你已经访问过哪个。


更新(回应评论)

假设对于给定的十六进制,我们按照我的描述存储 6 个邻居。

在本次讨论中,我们将这些邻居命名为 AF。

我们逆时针分配这些,因为这对我们来说很方便。

图形化:

          A
        _____
   B   /     \   F
      /       \
     (         )
      \       /
   C   \_____/   E

          D

对于“角”十六进制,我们可能有:

          A
        _____
   B   /     \   NULL
      /       \
     (         )
      \       /
   C   \_____/   NULL

          NULL

因此,如果我们查看这个十六进制,并列出我们的邻接信息(环绕),我们有:

A,B,C,空,空,空,A,B,C,...

一旦我们连续找到 3 个 NULL,我们就知道下一个点应该“指向”我们的起始方向。在这种情况下,我们应该从“A”的方向开始。

另一个例子:

          NULL
        _____
 NULL  /     \   NULL
      /       \
     (         )
      \       /
   C   \_____/   E

          D

和以前一样,我们列出一个列表,从顶部开始。

空,空,C,D,E,空,空,空,C

一旦我们找到 3 个 NULL,下一个就是我们的起始方向 - 在本例中为“C”。

从那里向同一个方向螺旋前进应该是相当简单的(当然不是字面上的 - har har)。

PS:感谢http://ascii.co.uk/art/hexagon的快速 ascii 艺术(:

于 2012-06-26T00:41:39.240 回答