如果我使用1d数组来表示方板,我如何获取索引并检查上方,下方和侧面的方块?

Fra*_*ank 3 language-agnostic arrays modulo

如果我有一个4x4游戏板,我在我的程序中表示为16d的1d整数数组.

如何获得任何给定索引上方,下方,左侧和右侧的方块索引?

所以,例如:

A = { 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 }
Run Code Online (Sandbox Code Playgroud)

代表这个董事会

 0   1   2   3
 4   5   6   7
 8   9  10  11
12  13  14  15  
Run Code Online (Sandbox Code Playgroud)

让我们说我目前在董事会中的索引#8(值= 7).如何得到4(值= 3),5(值= 6),10(值= 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;
Run Code Online (Sandbox Code Playgroud)

这看起来是正确的方法吗?

Jar*_*yth 7

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

row = index/num_columns;
column = index % num_columns;
Run Code Online (Sandbox Code Playgroud)

要回到索引,请使用

index = row * num_columns + column;
Run Code Online (Sandbox Code Playgroud)

一个你在行和列中,很容易获得周围的位置.

above = (row-1, column)
left = (row, column-1)
etc...
Run Code Online (Sandbox Code Playgroud)