最重要的是找到要下落的行数,移动的列数是起始位置-1
下落的列数是计算下落方块数组中为1的位置可以下落的距离,整体下降距离是这些距离中最小的。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
int rows = 15;
int cols = 10;
boolean[][] map = new boolean[rows][cols];
Scanner scanner = new Scanner(System.in);
for(int i = 0; i < rows; i++){
String[] line = scanner.nextLine().split(" ");
for(int j = 0; j < cols; j++){
map[i][j] = Integer.parseInt(line[j]) == 1;
}
}
int size = 4;
boolean[][] blocks = new boolean[size][size];
for(int i = 0; i < size; i++){
String[] line = scanner.nextLine().split(" ");
for(int j = 0; j < size; j++){
blocks[i][j] = Integer.parseInt(line[j]) == 1;
}
}
int index = Integer.parseInt(scanner.nextLine()) - 1;
scanner.close();
int minDrop = rows - 1;
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
if(blocks[i][j]){
int k = i;
while(k < rows && !map[k][j + index]){
k++;
}
int drop = k - i - 1;
if(drop < minDrop)
minDrop = drop;
}
}
}
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
if(blocks[i][j])
map[i + minDrop][j + index] = true;
}
}
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
int number = map[i][j] ? 1 : 0;
System.out.print(number + " ");
}
System.out.println();
}
}
}