我正在制作一个类似于著名游戏俄罗斯方 block 的程序,在旋转方 block 时遇到了一些问题。
我知道您可以使用“x = -y”和“y = x”在坐标系中旋转图形,但问题是因为我使用整数数组来表示 block ,所以事情变得如此困难得多。
我的数组看起来像:
int[][] space = new int[20][10];
如果坐标包含 block ,则值为 1,否则为 0。
那么如何在该空间中旋转一个 block 而不会遇到负数的麻烦?
最佳答案
这是一个示例片段(使用 0 和 1 重用 int[][],这也可以使用 boolean 数组来完成):
private static final int[][] piece = new int[][] {
{ 0, 1, 0, },
{ 1, 1, 1, },
};
您可以这样做旋转一 block :
private static int[][] rotate( final int[][] piece ) {
final int[][] res = new int[piece[0].length][piece.length];
for (int x = 0; x < piece.length; x++) {
for (int y = 0; y < piece[0].length; y++) {
res[(res.length-1)-y][x] = piece[x][y];
}
}
return res;
}
起始部分:
010
111
这是旋转( block ):
01
11
01
这是旋转(旋转(片)):
111
010
这是旋转(旋转(旋转(片))):
10
11
10
关于java - 旋转二维数组中的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9405058/