大學的時候看同學用C寫的俄羅斯方塊,今天心血來潮,突然想設計下用OO的思想來設計下。俄羅斯方塊是一以前俄羅斯的計算機科學家自己開發娛樂的小游戲,沒想到后來這么流行。
像俄羅斯(Tetris)方塊,迷宮,推箱子這種小游戲,其實建模都差不多,這里我選擇一個2維數組10×20的來代表整個游戲區域的顯示點,0代表該位置空,1代表有方塊。 每一個數組值(a[2][4])代表屏幕上的一個像素,數組類似于:
a[20][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},
.........................................
}
這里有幾個簡單的判斷:
1. 判斷是不是方塊撞到墻上,就是看a[i-1]中i-1是不是<0或i+1是不是>10;
2. 判斷一層能不能clear, 就是每行是不是數組值都是1
int k = 0;
for(int i=0; i<20; i++){
for(int j = 0; j<10; j++){
if(a[i][j] == 1)
k++;
}
if(k==10)
ClearRow(i); //把數組第i行全置0
}
3......其它的判斷類似
好,具體的設計思想參考圖1-1
圖1-1
在游戲操作中,有六個鍵, 上下左右+左右旋轉, 該圖中Form是邊界類與UI和用戶控制打交道,Handler業務控制類, ManageArray操作singleton數組和控制一些比較復雜算法的類。
首先該設計把整個業務算法等等從界面分離開,不管你用什么Iphone的UI的SDK還是android的, 都沒問題。 他們只與我們的UIForm打交道。
再次這邊的Singleton模式把數組暴露給想要他的程序。
最后用策略模式把旋轉的算法分開,每個算法只關心自己怎么變化,想擴展就加一個類,如果一個算法要修改,那么只修改某一個方法。開閉原則。
望各位博友指點