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