問題描述
俄羅斯方塊(Tetris)作為風靡全球38年的現象級益智游戲,其簡單易學但難于精通的特性使其成為游戲史上的不朽經典。以下是其核心游戲規則解析及我們的要求:
游戲界面由20行×10列的可視區域組成,7種不同形狀的四格方塊(I/T/O/J/L/S/Z型)隨機從頂部生成下落(具體形狀如下圖所示),并且在一個方塊生成后,玩家可以知道下一個方塊的形狀。
? 橫向范圍:X軸區間 [0, 9](共10列)
? 縱向范圍:Y軸區間 [0, 19](共20行,Y=0為底部,Y=19為頂部)
? 死亡判定線:Y ≥ 15(當方塊堆疊高度觸達此線時游戲結束)
在本問題中玩家使用的是簡化版的操作規則,只能進行以下三種操作:
? 橫向移動:左右平移
? 旋轉操作:支持0°、90°、180°、270°四向旋轉
? 瞬間落地:瞬間抵達當前可到達的最底部位置
當一行及以上(Y軸坐標相同)的全部位置被完全填充時,這些行將被消除,并且玩家將根據同時消除的行數獲得分數:
? 單行消除:100分
? 雙行消除:300分
? 三行消除:500分
? 四行消除:800分
本次作業要求做兩個版本,一個OJ版,一個圖形化版。其中OJ版需個人獨立完成,圖形化版需由3人組成的小組合作完成。
圖形化版界面及玩法自行設計,但至少要完成單人游戲及記分功能。
OJ版為交互式題目。要求在每次輸出數據后、讀入下一個數據前使用fflush(stdout)刷新輸出緩沖區。
OJ版輸入
第一行為兩個單字符,即和(、。和分別表示第一個要下落的方塊和第二個要下落的方塊的形狀。交互過程中,你每次依次輸出一個方塊的放置方案。在你每次輸出放置方塊的方案后,交互程序將再給你一行新的輸入,該輸入為一個單字符,即()。表示一個新的下個要下落的方塊的形狀。若為X表示X前邊的方塊是最后一個方塊,程序應該在輸出最后一個方塊的放置方案后結束。若為E表示玩家的放置方案已導致游戲結束(堆疊高度觸達死亡判定線),程序應直接退出。測試數據均采用隨機種子生成,且保證輸入數據的總長度(即掉落的方塊總數)小于1,000,000。
輸出
每次交互需輸出兩行,第一行為用一個空格分隔的兩個整數,依次為c和x。其中c表示方塊順時針旋轉的a角度(0、90、180、270),x表示方塊在x坐標上的最小值。第二行為一個整數,表示放置完方塊后玩家當前的得分。
源代碼詳詢https://space.bilibili.com/553303442?spm_id_from=333.1007.0.0