6

我有一个 [4,4]
X 的数组是我“知道”的唯一一个,其余的都是用一个简单的双 for 循环计算的。

x 0 0 0
0 0 1 0
0 1 1 0
0 1 0 0

我想要一个采用这个数组的函数,并将它旋转 90 度 + / - 而 x 的位置保持不变。(应该是俄罗斯方块)

x 0 0 0
1 1 0 0
0 1 1 0
0 0 0 0

我知道一些对排列进行硬编码的方法,但是那不会让我学到任何东西,坦率地说,这很无聊。

将不胜感激:>

4

1 回答 1

9

我不确定您打算如何将矩阵旋转 90 度,但旋转版本的左上角仍然有左上角 X,但是要将某些东西旋转 90 度,我只需制作一个新数组,交换行和列并水平翻转。

int[][] start = new int[4][];
start[0] = new int[4] { x, 0, 0, 0 }
start[1] = new int[4] { 0, 0, 1, 0 }
start[2] = new int[4] { 0, 1, 1, 0 }
start[3] = new int[4] { 0, 1, 0, 0 }

int[][] rotate = new int[4][];
for (int i=0; i<4; i++) rotate[i] = new int[4];
for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
        rotate[i][j] = start[j][i];

旋转完成:

0, 0, 0, 0,
0, 0, 1, 1,
0, 1, 1, 0,
0, 0, 0, 0,

现在这是一个对角翻转(编辑:我突然想到这将使 x 保持在同一位置:也许这就是你的意思?),但只需做一个水平翻转,它应该没问题:

for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
        rotate[i][3-j] = start[j][i];

旋转完成:

0, 0, 0, 0,
1, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0,

(以其他方式倾斜rotate[i][j] = start[j][3-i];:)

:)

于 2013-02-14T13:21:36.067 回答