俄羅斯方塊的簡單實現

2021-03-31 08:57:00 字數 1978 閱讀 8750

也是很早很早的東西了:p

這是我幾年以前寫的《seven puzzles》(該遊戲為dos版,可在鄙人主頁http://sss***ic.yeah.***

內找到)裡的俄羅斯方塊的實現方法,當時接觸程式設計僅半年而已,希望可以給初學者一點幫助。

幾乎沒有寫什麼**,而且後階段方塊旋轉、消去方面更是只大致介紹了一點方法,不過應該還是可以讓人明白的。

本人才疏學淺,如有不當之處,還望各位多多指教。

世界世界即遊戲進行的場所,在俄羅斯方塊裡就是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塊小正方體組合成的方塊。

大家可以窮舉出所有可能的組合

—————————————————

****

—————————————————

***** 、 ***

—————————————————

**     *

** 、**

*—————————————————

**   *

**  、**

*—————————————————

*     *   *

*** 、** 、** 、*** 

*   *     *

—————————————————

*     **          *

*** 、*  、*** 、 *

*      *   **

—————————————————

*   *          **

*** 、*  、*** 、 *

**   *      *

—————————————————

這些方塊都可以置於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來說,這個座標是左上角座標

byte g_byelementcur; //這是當前活動的方塊、0-16

然後,寫個移動判斷函式,就可以簡單的遊戲了(方塊不能轉動)

向下移動的主要判斷部分,沒有進行邊界判斷,返回false為不可移動、true為可以移動

for(i=0;i<4;i++)

for(j=0;j<4;j++)

return true;

應該沒有寫錯吧!^^

處理鍵盤的同時還應該不停的計時,保證方塊每一段時間下落一格(g_iy++),直到不能下落為止。

方塊的旋轉

方塊的旋轉其實和點陣圖旋轉沒有關係,只是方塊號改變了而已,我剛才將方塊按順時針旋轉放在一起,也就是這個原因,我們可以通過g_byelementcur++、g_byelementcur--來實現順時針或逆時針旋轉,當然要做邊界的判斷。

另外,由於方塊旋轉後,占用的位置就改變了,所以還需要判斷目前位置是否可以旋轉,和判斷下落的方法差不多。

方塊的消去

方塊落定後,就應當馬上重新整理g_byscene,並做消去判斷,如果某一行可以消去,還應該將該行上的所有g_bys**en值向下移一行,並重新整理螢幕。

俄羅斯方塊高階 AI俄羅斯方塊

前文回顧 致青春 python實現俄羅斯方塊 人工智慧大火的今天,如果還是自己玩俄羅斯方塊未免顯得太low,為什麼不對遊戲公升級,讓機器自己去玩俄羅斯方塊呢?有了這個想法之後利用週六週日兩天的時間去蒐集了大量的資料,在電腦宕機好多次之後終於將ai俄羅斯方塊實現了。所謂讓機器自己去玩俄羅斯方塊,就是讓...

俄羅斯方塊

俄羅斯方塊 tetris,俄文 是一款風靡全球的電視遊戲機 和掌上遊戲機遊戲,它由俄羅斯人阿列克謝 帕基特諾夫 發明,故得此名。俄羅斯方塊的基本規則是移動 旋轉和擺放遊戲自動輸出的各種方塊,使之排列成完整的一行或多行並且消除得分。由於上手簡單 老少皆宜,從而家喻戶曉,風靡世界。俄羅斯方塊的開發者是阿...

俄羅斯方塊

include include include include includeusing namespace std include include define mem a,b memset a,b,sizeof a const int sudu 40 const int dir 4 2 cons...