殷志堅,段曉磊
江西科技師范大學(xué)通信與電子學(xué)院,江西南昌 330000
基于EasyX的俄羅斯方塊游戲的設(shè)計和分析
殷志堅,段曉磊
江西科技師范大學(xué)通信與電子學(xué)院,江西南昌 330000
本文是基于EasyX的圖形庫,運用C語言在VC++ 6.0的平臺上開發(fā)出來的一款俄羅斯方塊游戲。
EasyX;俄羅斯方塊游戲;VC
EasyX是針對C++的圖形庫,可以幫助c語言初學(xué)者者快速的上手圖形和游戲編程,不需要注冊窗口類,建消息循環(huán)等,在使用上和Turbo C沒有很大的區(qū)別,但是它增加了鼠標、批量繪圖、讀取圖片(點陣或矢量)等功能。
編寫一個成功的俄羅斯方塊游戲,主要考慮實現(xiàn)以下幾個功能:游戲方塊的預(yù)覽功能;游戲方塊的控制功能;游戲分數(shù)、等級更新功能;游戲操作提示功能。
1)程序進入主函數(shù)后首先進行初始化,在初始化中通過initgraph()函數(shù)進入圖形模式,用setorigin()函數(shù)設(shè)置原點,用rectangle()函數(shù)畫游戲的游戲區(qū)和預(yù)覽區(qū)兩個區(qū)域,再通過outtextxy()函數(shù)輸出游戲桌面的有關(guān)提示以及成績和等級。
2)本游戲的游戲區(qū)域被劃分為20*15個單元方格,定義了一個二維數(shù)組
g_world[20][15],數(shù)組的下標就是每個單元方格左上方的坐標,通過數(shù)組存放的信息來標志單元方格的有關(guān)信息,用1表示單元方格被方塊占用,0表示未被占用。
3)每個游戲方塊是通過4*4的矩陣單元方格來定義的,以下為要設(shè)計主要的方塊。
當單元方格被占用時用1表示,未被占用的則用0表示,以第二個L型方塊為例,這個方塊可以用0100,0100,0110,0000來表示,用十六進制表示為0x4460。用循環(huán)語句檢測這個十六進制的每一位,當為1是就調(diào)用setfillcolor()、setlinecolor()、fillrectangle()三個函數(shù)來給相應(yīng)的單元格填充顏色。
4)游戲方塊的結(jié)構(gòu)體變量的定義:
1)方塊變換。
方塊變換包括左右移動、下落、旋轉(zhuǎn)、沉底,首先要用檢測算法檢測變換后將要生成的下一個方塊是否符合游戲規(guī)則,如果符合就先刪除原先的方塊,再畫出下一個方塊。
2)檢測算法。
方塊變換時,用檢測算法檢測是否出邊界,是否有重疊現(xiàn)象發(fā)生,邊界包括上下左右邊界,根據(jù)方格的左上坐標是否超出設(shè)定的邊界來確定是否出界。重疊則根據(jù)在游戲區(qū)域內(nèi)的方塊所對應(yīng)的二維數(shù)組的值是否全是0標識,如果存在某個二維數(shù)組的值不為0,則表示發(fā)生重疊,那么就返回false,禁止方塊變換,否則返回true,允許方塊變換。以下是檢測算法的程序。
TP3
A
1674-6708(2015)150-0137-01
殷志堅,教授,江西科技師范大學(xué)通信與電子學(xué)院院長,研究方向:現(xiàn)代信號與信息處理
段曉磊,江西科技師范大學(xué)研究生,研究方向:嵌入式系統(tǒng)及應(yīng)用軟件