也是很早很早的東西了:P
幾乎沒有寫什麼代碼,而且後階段方塊旋轉、消去方面更是隻大致介紹了一點方法,不過應該還是可以讓人明白的。 本人才疏學淺,如有不當之處,還望各位多多指教。
世界即遊戲進行的場所,在俄羅斯方塊裏就是MXN個小格子,我們可以使用一數組來表示 BYTE g_byScene[N][M] 其中,N爲行數、M爲每行格數,左上角爲(0,0) 我們可以繼續定義 #define SCENE_EMPTY 0 就是當g_byScene[y][x]==0時代表該格爲空,可以放入方塊,否則當方塊落到(y+1,x)時就不可以繼續下落 因爲後面還有許些功能可能需要用到g_byScene,所以暫時只用定義0值,以後再說。
角色就是玩家可控制的那個東東了,在這裏就是由4塊小正方體組合成的方塊。 大家可以窮舉出所有可能的組合 ————————————————— ————————————————— 大家還看得清楚吧,由於不能使用圖片,所以只好用字符方式,一共7種方塊,旋轉變化後共有17種。 這些方塊都可以置於4X4的空格之中,圖簡單,我們可以建一個4X4大小的數組,儲存方塊信息,由於一共有17種,所以應該 #define ELEMENT_NUM_T_MAX 17 BYTE g_byElement[ELEMENT_NUM_T_MAX][4][4] 其中每個數值應該在遊戲初始化時定義,這樣在遊戲中我們就可以通過方塊號(0-16)來索引方塊了。 爲了方便實現旋轉,最好按照順時針變化的順序將只是方向不同的方塊放到一起,我上面的順序可能有點不對。
我們還需要定義 int g_iX,g_iY; //這是方塊座標,對g_byElement[][][]來說,這個座標是左上角座標 然後,寫個移動判斷函數,就可以簡單的遊戲了(方塊不能轉動) 向下移動的主要判斷部分,沒有進行邊界判斷,返回false爲不可移動、true爲可以移動
return true; 應該沒有寫錯吧!^^ 處理鍵盤的同時還應該不停的計時,保證方塊每一段時間下落一格(g_iY++),直到不能下落爲止。
方塊的旋轉其實和位圖旋轉沒有關係,只是方塊號改變了而已,我剛纔將方塊按順時針旋轉放在一起,也就是這個原因,我們可以通過g_byElementCur++、g_byElementCur--來實現順時針或逆時針旋轉,當然要做邊界的判斷。 另外,由於方塊旋轉後,佔用的位置就改變了,所以還需要判斷目前位置是否可以旋轉,和判斷下落的方法差不多。
方塊落定後,就應當馬上刷新g_byScene[][],並做消去判斷,如果某一行可以消去,還應該將該行上的所有g_byScnen[][]值向下移一行,並刷新屏幕。 |
俄羅斯方塊的簡單實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.