编号矩阵元素

我目前正在使用Lua(尽管这个问题更多是关于逻辑而不是语言本身的问题),并且我正在尝试制作一个井字棋游戏。我有一个按照3行和3列构造的棋盘表格。我想要能够用以下方式编号每个方格,即1至9:

1 2 3

4 5 6

7 8 9

我想将这些数字转换为表格中的坐标。因此1 = [1,1],2 = [2,1],4 = [1,2]等等。 我尝试了几种方法,但我无法正确解决这个问题。我不想使用switch语句,因为我可能想要扩展棋盘到4x4或5x5。

点赞
用户1009479
用户1009479

假设它是具有 n 行的矩阵.. 数字 x 的坐标是:

  • math.floor((x - 1) / n) + 1
  • x % n == 0 and n or x % n
2015-03-22 09:42:07
用户2726734
用户2726734

想要从值 aij 中得到行 i 和列 j,可以使用以下公式:

 i = math.floor((aij - 1) / ncols) + 1
 j = (aij - 1) % ncols + 1
 -- 或者,使用 i 来计算 j
 j = aij - (i - 1) * ncols

其中,ncols 为列数。如果想要反向操作:

 aij = (i - 1) * ncols + j

对于 $3 \times 3$ 的情况:

local n = 3
for aij=1,n*n do
   local i = math.floor((aij - 1) / n) + 1
   local j = (aij - 1) % n + 1
   print(aij, "["..j..", "..i.."]")
end

输出如下:

1   [1, 1]
2   [2, 1]
3   [3, 1]
4   [1, 2]
5   [2, 2]
6   [3, 2]
7   [1, 3]
8   [2, 3]
9   [3, 3]
2015-03-22 13:06:08