大家谁能帮我看看是哪里不对,提交到系统中是0分,在Eclipse中可以得出例子中的结果
思路:
题目中有两个关键点:如何模拟下落的过程,如何判断方块下落在哪里停止。
在数据的存储上,需要保存整个“棋盘”,需要保存下落方块的坐标。模拟下落可以row++
判断在哪里停止,按照规则,方块最下部碰到底或者中间被拦住就应该停止了。在最后新增一行1可以简化判断边界。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int ROW = 15;
int COL = 10;
int N = 4;
int board[][] = new int[ROW+1][COL];//整个俄罗斯方块
int block[][] = new int[N][N];//下落的图形的方块
int x[] = new int[4];//存储图形的横坐标
int y[] = new int[4];//存储图形的纵坐标
int row,col;
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
board[i][j] = sc.nextInt();
}
}
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
block[i][j] = sc.nextInt();
}
}
//初始列
col = sc.nextInt();
sc.close();
//最下面加一行1,方便判断边界
for(int j=0;j<COL;j++) {
board[ROW][j] = 1;
}
//得到图形的坐标
int k=0;
for(int i=N-1;i>=0;i--) {
for(int j=0;j<N;j++) {
if(block[i][j] == 1) {
x[k] = i;
y[k] = j;
k++;
}
}
}
row = 1;
col--;
boolean flag;
for(;;) {
flag = false;
for(int i=0;i<N;i++) {
if(board[row + x[i]][col + y[i]] == 1) {
flag = true;
break;
}
}
if(flag) {
break;
}
row++;
}
row--;
//合并
for(int i=0;i<N;i++) {
board[row + x[i]][col + y[i]] = 1;
}
//输出
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
if(j != 0) {
System.out.print(board[i][j]);
System.out.print(" ");
}
}
System.out.println();
}
}
}