求大神 Java俄罗斯方块翻转算法详解(需要注释),本人刚学Java

如题所述

这个问题我也遇到过。
我曾经写过一个俄罗斯方块程序。
也是去找中心点。然后旋转的方式去实现。
现在想想这种思路不好。
应该是用矩阵变换的思路。

1 1
0 1
0 1

顺时针应该变成

0 0 1
1 1 1
追问
怎么实现!

回答
刚才写错了。

一个二维矩阵X[x1][y1]
顺时针旋转90°
变成的二维矩阵定义肯定是 Y[y1][x1]
对于Y中的每一个元素
Y[n][m] = X[m][x1-n]

要应用到你的代码里的话。
我需要知道你代码里。现有的一些数据。
现在光看代码本身,我不知道你定义的这些变量里面到底存着什么。你又需要什么。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-11
以前写过一个,把源码发给你看看
第2个回答  2018-10-25
刚刚跟别人回答过,你看看:
可以给每一个小方块设置为一个坐标,变为一个三阶行列式,3*3矩阵,转变为二元数组旋转。观察一下左旋:
11 12 13 31 21 11
21 22 23 →→ 32 22 12
31 32 33 33 23 13
坐标变换如下:(1,1)变为(1,3),(1,2)变为(2,3),(1,3)变为(3,3)
(2,1)变为(1,2),(2,2)变为(2,2),(2,3)变为(3,2)
(3,1)变为(1,1),(3,2)变为(2,1),(3,3)变为(3,1)
规律就是(i,j)变为(j,3-i+1):
如果是2*2的方格,就可以变为二阶行列式,也就是2*2的二元数组,这里给出3*3九宫格改变的示意,我的代码如下:

import java.util.Random; public class T{ public static void main(String[] args){ int[][] a=new int[3][3];System.out.println("now begin to form a new integer array");Random r=new Random();for(int i=0;i<3;i++){for(int j=0;j<3;j++){a[i][j]=r.nextInt(10);}}System.out.println("the array is shown as follows:");for(int i=0;i<3;i++){for(int j=0;j<3;j++){System.out.print(a[i][j]+" ");}System.out.println();}System.out.println("左转九十度");for(int i=0;i<a.length;i++){for(int j=0;j<a[i].length;j++){System.out.print(a[a[i].length-1-j][i]+" ");}System.out.println();}}}
相似回答