馬巧梅, 張麗娜
(寶雞文理學(xué)院 計(jì)算機(jī)學(xué)院,寶雞 721016)
基于C語(yǔ)言的俄羅斯方塊游戲的設(shè)計(jì)
馬巧梅, 張麗娜
(寶雞文理學(xué)院 計(jì)算機(jī)學(xué)院,寶雞 721016)
隨著科學(xué)技術(shù)的進(jìn)一步發(fā)展,益智游戲作為一種新型的休閑娛樂(lè)方式也逐步進(jìn)入人們的生活?;贑語(yǔ)言的俄羅斯方塊游戲操作簡(jiǎn)便、靈活、界面友好,是根據(jù)模塊化程序設(shè)計(jì)的思想而開(kāi)發(fā)的一款益智游戲。闡述了游戲的設(shè)計(jì)構(gòu)思,提出了游戲的功能結(jié)構(gòu)圖,設(shè)計(jì)了游戲的流程圖,在構(gòu)建完善的游戲構(gòu)思的基礎(chǔ)上,實(shí)現(xiàn)了基于C語(yǔ)言的俄羅斯方塊游戲的開(kāi)發(fā),并可以成功驗(yàn)證該游戲順利的運(yùn)行。
C語(yǔ)言; 俄羅斯方塊游戲; 鏈表
俄羅斯方塊是一款風(fēng)靡全球的掌上游戲[1],由俄羅斯人阿列克謝·帕基特諾發(fā)明,故得此名。俄羅斯方塊的發(fā)明者,是當(dāng)時(shí)還被稱為"蘇聯(lián)"的聯(lián)邦科學(xué)員,該游戲最初是作為自我消遣的電腦游戲而被制作出來(lái)的。俄羅斯方塊的基本規(guī)則[2]是移動(dòng)、旋轉(zhuǎn)和擺放游戲自動(dòng)輸出的各種方塊。使之排列成完整的一行或多行并且消除得分。它看似簡(jiǎn)單卻變化無(wú)窮,俄羅斯方塊簡(jiǎn)單易學(xué),但是要熟練地掌握其中的操作與擺放技巧,難度卻不低。作為一款家喻戶曉老少皆宜的大眾游戲,其普及程度可以說(shuō)是史上任何一款游戲都無(wú)法比擬的。
基于C語(yǔ)言的俄羅斯方塊游戲是采用C語(yǔ)言進(jìn)行編程的[3],運(yùn)用用戶圖形界面、數(shù)組及結(jié)構(gòu)體和指針[4]等方法開(kāi)發(fā)的一個(gè)益智類(lèi)游戲。此應(yīng)用程序中的方塊旋轉(zhuǎn)和整行消失等是利用了函數(shù)繪制[5]的方法。
俄羅斯方塊是一款比較簡(jiǎn)單的游戲,在游戲過(guò)程僅需要玩家將不斷下落的各種形狀的方塊移動(dòng)、翻轉(zhuǎn),如果某一行被方塊充滿了,那就將其消除,而當(dāng)窗口中無(wú)法再容納下落的方塊時(shí),就宣告游戲的結(jié)束。
基于C語(yǔ)言的俄羅斯方塊游戲是一款非常有趣的游戲,該游戲共包含4大模塊:游戲方塊預(yù)覽功能、游戲方塊控制功能、游戲分?jǐn)?shù)控制功能和游戲幫助功能。其功能結(jié)構(gòu)圖,如圖1所示。
圖1 功能結(jié)構(gòu)圖
(1)游戲方塊預(yù)覽功能:在游戲過(guò)程中,當(dāng)游戲底板出現(xiàn)一個(gè)游戲方塊時(shí),必須在游戲方塊預(yù)覽區(qū)域中出現(xiàn)下一個(gè)游戲方塊,這樣有利于游戲玩家控制游戲的策略。由于在此游戲中存在7種不同的游戲方塊,所以在游戲方塊預(yù)覽區(qū)域中需要顯示隨機(jī)生成的游戲方塊[6]。
(2)游戲方塊控制功能:通過(guò)各種條件的判斷,實(shí)現(xiàn)對(duì)游戲方塊的左移、右移、快速下移、自由下落、旋轉(zhuǎn)功能,以及行滿消除行的功能。
(3)游戲分?jǐn)?shù)控制功能:每消除一行加100分,而且游戲無(wú)上限。在游戲失敗后,游戲界面自動(dòng)返回初始游戲界面。
(4)游戲幫助功能。玩家進(jìn)入游戲后,將彈出本游戲如何操作的友情提示。在本游戲中,玩家可以用w、a、s、d、space鍵分別控制旋轉(zhuǎn)[7]、左移、右移、加速下移以及沉底功能,方便游戲更好的體驗(yàn)。
1.2.1 游戲界面流程圖
俄羅斯方塊進(jìn)入游戲后,游戲的先后執(zhí)行流程圖如圖2所示。
圖2 游戲?qū)崿F(xiàn)流程圖
包括游戲歡迎界面、游戲開(kāi)始界面、游戲方塊預(yù)測(cè)界面、游戲說(shuō)明界面。
1.2.2 清除游戲方塊流程圖
俄羅斯方塊游戲中,需要清除游戲過(guò)程中湊夠滿滿一行的方塊,其清除游戲方塊的流程圖,如圖3所示。
圖3 清除游戲方塊
1.2.3 游戲方塊下沉的流程圖
俄羅斯方塊游戲中,清除游戲過(guò)程中的方塊后,其余的游戲方塊需要下沉,其流程圖,如圖4所示。
圖4 游戲方塊下沉的流程圖
在該程序設(shè)計(jì)中,數(shù)組是把具有相同類(lèi)型的若干變量按有序的形式組織起來(lái)的一種形式。該游戲的開(kāi)發(fā)共運(yùn)用了3個(gè)數(shù)組,分別是方塊的4個(gè)旋轉(zhuǎn)變換的樣式、顏色和游戲得分。
在該程序設(shè)計(jì)中,該游戲的開(kāi)發(fā)共運(yùn)用了2個(gè)結(jié)構(gòu)體:struct BLOCK;//定義當(dāng)前方塊的狀態(tài)和顏色及下一方塊的信息;struct BLOCKINFO;//定義方塊移動(dòng)的方向和距離。
在該程序設(shè)計(jì)中,使用鏈表結(jié)構(gòu)可以克服數(shù)組鏈表需要預(yù)先知道數(shù)據(jù)大小的缺點(diǎn),鏈表結(jié)構(gòu)可以充分利用計(jì)算機(jī)內(nèi)存空間,實(shí)現(xiàn)靈活的內(nèi)存動(dòng)態(tài)管理。該游戲的開(kāi)發(fā)運(yùn)用了1個(gè)鏈表: fillrectangle(50 + (block->x + col) * BLOCK_LEN, 50 + (block->y + row) * BLOCK_LEN。
用戶進(jìn)入俄羅斯方塊游戲程序,首先彈出游戲主界面。
用戶進(jìn)入游戲主界面后,通過(guò)主界面上的游戲說(shuō)明提示開(kāi)始游戲,游戲開(kāi)始界面,如圖5所示。
圖5 游戲開(kāi)始界面
按下回車(chē)鍵將開(kāi)始游戲;界面顯示每次的得分情況,并累計(jì)到總分。游戲運(yùn)行界面,如圖6所示。
圖6 游戲運(yùn)行界面
基于C語(yǔ)言的俄羅斯方塊游戲進(jìn)入游戲主界面后,進(jìn)行如下操作:
1. 在游戲主界面上按回車(chē)鍵開(kāi)始游戲,進(jìn)入游戲;
2. 方塊形狀轉(zhuǎn)換操作:良好的方塊形狀設(shè)計(jì),繪制七種
常見(jiàn)的基本圖形即長(zhǎng)條形、Z字形、反Z形、田字形、7字形、反7形、T字型,各個(gè)方塊變形時(shí),還可設(shè)為順時(shí)針或逆時(shí)針變形,一般為逆時(shí)針。方塊變換的形狀生成圖,如如圖7所示。
圖7 方塊變換生成圖
3. 鍵盤(pán)處理事件:方塊下落時(shí),可通過(guò)鍵盤(pán)w、a、s、d、space鍵對(duì)該方塊進(jìn)行向上(變形)、向下(加速)、向左、向右移動(dòng),以及沉底。
4. 消行操作:當(dāng)方塊落到游戲界面最底部并且鋪滿最后1行,就能消去所在這1行,積分增加100分,每消除1行,系統(tǒng)判定增加100分,一次最多消除4行。消除方法是利用函數(shù)循環(huán)檢測(cè)是否滿行,將滿行的1行參數(shù)輸出到消行函數(shù)中,函數(shù)進(jìn)行截屏并且下移,達(dá)到消除的目的。
為了滿足大眾用戶精神娛樂(lè)的需求,基于C語(yǔ)言的俄羅斯方塊游戲的設(shè)計(jì),基本上已經(jīng)達(dá)到了預(yù)期的目標(biāo)。分析了俄羅斯方塊游戲開(kāi)發(fā)中C語(yǔ)言程序及指針和鏈表的一些關(guān)鍵技術(shù),實(shí)現(xiàn)了游戲過(guò)程中游戲的消行和重得分的設(shè)置,該應(yīng)用程序的主要功能已基本完善,是一款值得推薦的益智游戲。
[1] 翟亞靜,成麗君.基于Android的2048小游戲的簡(jiǎn)單實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2017(12):251-252.
[2] 馬麗,薛根奇,呂海蓮. 基于Qt組件的俄羅斯方塊設(shè)計(jì)[J]. 電子設(shè)計(jì)工程,2016(12):27-30.
[3] 孟蕓,朱肖安,羅劉敏,徐音.基于C語(yǔ)言的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn)[J].硅谷,2014(23):19-20
[4] 許燕.基于lua和corona框架的趣味手機(jī)游戲的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2015(25):47-49 .
[5] 趙巧妮. 基于Proteus的俄羅斯方塊電路的設(shè)計(jì)和仿真[J].微型電腦應(yīng)用,2016(8):59-60.
[6] 溫濤陳夠喜李瑞林.互動(dòng)式《俄羅斯方塊》游戲安全隱寫(xiě)[J]. 電子技術(shù)應(yīng)用,2016(4):120-123.
[7] 申月莉,楊春雨.基于Android的俄羅斯方塊軟件關(guān)鍵技術(shù)研究[J].洛陽(yáng)師范學(xué)院學(xué)報(bào),2016(2):54-58.
DesignandImplementationofJava-basedBricksGames
Ma Qiaomei, Zhang Lina
(College of Computer, Baoji University of Arts and Sciences, Baoji 721016, China)
With the further development of the science and technology, educational games as a new way of entertainment also gradually go into the life of people. Tetris game is developed according to C-language graphical user interface, it requires easy operation, flexibility, friendly interface, etc. The design idea of game is expounded, and the function structure of the game is put forward, and the flow chart of the game is designed in this paper. On the basis of analysis of constructing a perfect game idea. C-language-based Tetris game is achieved finally, it can successfully verify the game can run smoothly.
C-language; Tetris game; Chained list
1007-757X(2017)12-0007-03
國(guó)家青年科學(xué)基金資助項(xiàng)目(61402015);陜西省自然科學(xué)基礎(chǔ)研究項(xiàng)目(2017JM6048);陜西省寶雞市科研計(jì)劃項(xiàng)目(16RKX1-3);寶雞文理學(xué)院校級(jí)重點(diǎn)項(xiàng)目(ZK2017011)
馬巧梅(1983-),女,講師,碩士,研究方向:數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)與信息安全。
張麗娜(1983-),女,碩士,講師,研究方向:數(shù)字信號(hào)處理、物聯(lián)網(wǎng)應(yīng)用。
TP391
A
2017.09.23)