也是很早很早的東西了: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...