文章目錄
- 題目
- 程式代碼
題目
| 試題編號: | 201604-2 |
| 試題名稱: | 俄羅斯方塊 |
| 時間限制: | 1.0s |
| 記憶體限制: | 256.0MB |
問題描述
俄羅斯方塊是俄羅斯人阿列克謝·帕基特諾夫發明的一款休閑游戲,
游戲在一個15行10列的方格圖上進行,方格圖上的每一個格子可能已經放置了方塊,或者沒有放置方塊,每一輪,都會有一個新的由4個小方塊組成的板塊從方格圖的上方落下,玩家可以操作板塊左右移動放到合適的位置,當板塊中某一個方塊的下邊緣與方格圖上的方塊上邊緣重合或者達到下邊界時,板塊不再移動,如果此時方格圖的某一行全放滿了方塊,則該行被消除并得分,
在這個問題中,你需要寫一個程式來模擬板塊下落,你不需要處理玩家的操作,也不需要處理消行和得分,
具體的,給定一個初始的方格圖,以及一個板塊的形狀和它下落的初始位置,你要給出最終的方格圖,
輸入格式
輸入的前15行包含初始的方格圖,每行包含10個數字,相鄰的數字用空格分隔,如果一個數字是0,表示對應的方格中沒有方塊,如果數字是1,則表示初始的時候有方塊,輸入保證前4行中的數字都是0,
輸入的第16至第19行包含新加入的板塊的形狀,每行包含4個數字,組成了板塊圖案,同樣0表示沒方塊,1表示有方塊,輸入保證板塊的圖案中正好包含4個方塊,且4個方塊是連在一起的(準確的說,4個方塊是四連通的,即給定的板塊是俄羅斯方塊的標準板塊),
第20行包含一個1到7之間的整數,表示板塊圖案最左邊開始的時候是在方格圖的哪一列中,注意,這里的板塊圖案指的是16至19行所輸入的板塊圖案,如果板塊圖案的最左邊一列全是0,則它的左邊和實際所表示的板塊的左邊是不一致的(見樣例)
輸出格式
輸出15行,每行10個數字,相鄰的數字之間用一個空格分隔,表示板塊下落后的方格圖,注意,你不需要處理最終的消行,
樣例輸入
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
1 1 1 0 0 0 1 1 1 1
0 0 0 0 1 0 0 0 0 0
0 0 0 0
0 1 1 1
0 0 0 1
0 0 0 0
3
樣例輸出
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 1 0 0 0 0
程式代碼
# 輸入初始方格圖(先添加4行空行和底端邊界)
numbers = []
for i in range(4):
numbers.append([0 for i in range(10)])
for i in range(15):
temp = list(map(int,input().split()))
numbers.append(temp)
numbers.append([1 for i in range(10)])
# 輸入新板塊形狀
new = []
for i in range(4):
temp = list(map(int,input().split()))
new.append(temp)
# 輸入下落位置
n = int(input())
# 確定新板塊方格位置并加入頂端四行空行中
check = []
check_0 = []
for i in range(4):
for j in range(4):
if new[i][j] == 1:
check.append([i,j+n-1])
# 尋找新板塊中下方為空的方格用于判斷下移距離
if i == 3 or new[i+1][j] == 0:
check_0.append([i,j+n-1])
# 判斷合法的下移行數
down = 0
flag = True # 回圈標記
while flag:
for x_y in check_0:
x,y = x_y
if numbers[x+1][y] != 0:
flag = False
down += 1
for i in range(len(check_0)):
check_0[i][0] += 1
# 改變下落最終位置的數字
for i in range(4):
x,y = check[i]
numbers[x + down-1][y] = 1
# 輸出
for i in range(4,19):
for j in range(10):
print(numbers[i][j],end=" ")
print()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260139.html
標籤:其他
上一篇:走方格
