由於shell不能定義二維數組,所以只能用一維數組表示方塊,俄羅斯方塊主要可以分爲7類,每一類方塊都是由四類小方塊構成,表示方法如下。
Box=(x1,y1,x2,y2,x3,y3,x4,y4,x,y)
xi、yi是各個小方塊在俄羅斯方塊表示區域中的座標,最後的兩個,x、y是在方塊出現時,該表示區域相對於棋盤的座標,7類方塊的表示如下:
1、兩個主要函數
RunAsDisplayer()、RunAsKeyReceiver(),這兩個函數當中各有一個死循環,並且這兩個函數運行在不同的進程當中,所以這兩個函數在遊戲期間始終在運行,其中,顯示進程作爲後臺進程,命令接收進程作爲前臺進程。前臺進程在接收到命令後,由kill指令將命令發送給顯示進程,顯示進程執行相關操作。前臺進程發送給顯示進程的主要命令有:翻轉、左移、右移、下移、直接下落到底、退出。當前臺進程收到退出指令後,關閉自己之前,會先關閉顯示進程,同樣,顯示進程關閉之前,也會關閉命令接收進程。
2、創建方塊函數
CreateBox() #創建方塊,如果是第一次創建則隨機生成,否則讀取預生成的方塊
PrepareNextBox() #生成下一個方塊,並預顯示
3、繪製函數
DrawBorder() #繪製邊框及成績等
DrawCurBox() #繪製當前方塊
4、指令處理函數
BoxRotate() #接收上方向鍵,用於旋轉方塊
BoxRight() #右移
BoxLeft() #左移
BoxDown() #下移,下移時要判斷,如果到底了,要寫入背景,並創建新方塊
BoxAllDown() #直接下移到最底部
5、移動可行性判斷函數
BoxMove() #該函數包含兩個表示目的地址的參數,如果可以移動,則返回0,否則返回1
6、寫入背景函數
Box2Map() #該函數用於把到底的方塊寫入到背景當中,並消去可以消去的行
7、退出函數
MyExitNoSub() #用於恢復終端並退出指令接收進程
MyExit() #關閉兩個進程,調用其他兩個退出函數實現
ShowExit() #關閉顯示進程
三、系統流程