CCF201604 俄羅斯方塊(JAVA)
問 題 描述: |
問題描述 俄羅斯方塊是俄羅斯人阿列克謝·帕基特諾夫發明的一款休閒遊戲。 輸入格式 輸入的前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();
}
}
}