问 题 描述: | 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。 输入格式 输入的前15行包含初始的方格图,每行包含10个数字,相邻的数字用空格分隔。如果一个数字是0,表示对应的方格中没有方块,如果数字是1,则表示初始的时候有方块。输入保证前4行中的数字都是0。 输出格式 输出15行,每行10个数字,相邻的数字之间用一个空格分隔,表示板块下落后的方格图。注意,你不需要处理最终的消行。 样例输入 0 0 0 0 0 0 0 0 0 0 样例输出 0 0 0 0 0 0 0 0 0 0 |
package tetris;
import java.util.Scanner;
public class Main {
// 思路:模拟方块下降,若存在空间则继续下降,若空间被占据则停止下降并得出最终结果
@SuppressWarnings("resource")
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int[][] square = new int[15][10];// 游戏方格
int[][] block = new int[4][2];// 新方块各部分坐标值
int bottom = 0;// 记录新方块的方格中位于最底部的部分
for (int y = 0; y < 15; y++)
// 布景
for (int x = 0; x < 10; x++)
square[y][x] = sc.nextInt();
int j = 0;// 下标
for (int y = 0; y < 4; y++)
// 记录方块坐标
for (int x = 0; x < 4; x++) {
if (sc.nextInt() == 1) {
block[j][0] = x;
block[j][1] = y;
bottom = block[bottom][1] > y ? bottom : j;// 比较纵坐标取最大值
j++;
}
}
int column = sc.nextInt();// 下落的列
for (int y = 0; y < 4; y++)// 将方块各部分坐标换成在游戏方格中的初始坐标
{
block[y][0] += (column - 1);
}
while (block[bottom][1] + 1 < 15)// 模拟方块下落,直至到达最底部
{
if (square[block[0][1] + 1][block[0][0]] == 0
&& square[block[1][1] + 1][block[1][0]] == 0
&& square[block[2][1] + 1][block[2][0]] == 0
&& square[block[3][1] + 1][block[3][0]] == 0)// 检测空间是否被占据
{// 未被占据则方块继续下落
block[0][1]++;
block[1][1]++;
block[2][1]++;
block[3][1]++;
} else// 无法继续下落
break;
}
// 在游戏方格中固定方块位置
square[block[0][1]][block[0][0]] = 1;
square[block[1][1]][block[1][0]] = 1;
square[block[2][1]][block[2][0]] = 1;
square[block[3][1]][block[3][0]] = 1;
for (int y = 0; y < 15; y++)// 输出
{
for (int x = 0; x < 10; x++)
System.out.print(square[y][x] + " ");
System.out.println();
}
}
}