3

如果我有一个 4x4 游戏板,我在程序中将其表示为大小为 16 的一维整数数组。

如何获得任何给定索引的上方、下方、左侧和右侧正方形的索引?

因此,例如:

A = { 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 }

代表这个板子

 0   1   2   3
 4   5   6   7
 8   9  10  11
12  13  14  15  

假设我目前在董事会的索引#8 上(值 = 7)。我怎样才能得到 4 (value = 3) , 5 (value = 6), 10 (value = 11) 的索引,并意识到没有正确的正方形,因为它位于棋盘的右侧边缘。

我知道我需要使用一些模数数学,但我没有想出正确的方法来获取相邻正方形的索引。

我在想类似...

if ((i % 4) + 1 < 3) right = i + 1;
if ((i % 4) - 1 > 0) left = i - 1;
if ((i % 4) + 4 < 15) bottom = i + 4;
if ((i % 4) - 4 > 0 ) top = i - 4;

这似乎是正确的方法吗?

4

1 回答 1

7

要从索引中获取行、列,请使用以下命令:

row = index/num_columns;
column = index % num_columns;

要返回索引,请使用

index = row * num_columns + column;

一个你在行列中,很容易得到周围的位置。

above = (row-1, column)
left = (row, column-1)
etc...
于 2010-04-18T21:07:17.703 回答