何志敏+謝杰
摘 要: 隨著社會(huì)的發(fā)展,游戲的易攜性越來越受到人們的關(guān)注,基于嵌入式平臺(tái)的游戲設(shè)計(jì)迅速崛起。FPGA因其高速度、高精度等功能特性,被越來越多的游戲開發(fā)者所接受。該設(shè)計(jì)利用FPGA來驅(qū)動(dòng)16×16 LED點(diǎn)陣實(shí)現(xiàn)貪食蛇游戲,玩家通過4個(gè)方向鍵控制貪食蛇不斷地吞食點(diǎn)陣上隨機(jī)出現(xiàn)的老鼠,貪食蛇的長(zhǎng)度也隨之加長(zhǎng),7段數(shù)碼管實(shí)時(shí)顯示玩家得分。該設(shè)計(jì)采用VHDL語(yǔ)言,在FPGA實(shí)驗(yàn)平臺(tái)上實(shí)現(xiàn)了該貪食蛇游戲。經(jīng)測(cè)試,游戲運(yùn)行良好,可進(jìn)一步推廣使用。
關(guān)鍵詞: FPGA; 貪食蛇游戲; 16*16點(diǎn)陣; VHDL
中圖分類號(hào): TN710?34; TP399 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)18?0105?02
Design of gluttony snake game based on FPGA
HE Zhi?min, XIE Jie
(School of Computer Science, Southwest Petroleum University, Chengdu 610500, China)
Abstract: With the social development, people pay more attention to the portability of games so that the design of games based on embedded platform has rapidly developed. FPGA has been accepted by more and more game developers because of its high speed, high precision and other features. FPGA is used in this design to drive 16*16 LED to realize gluttony snake game. The game player uses the four direction keys to control the snake to eat the mice which is randomly generated in the dot matrix and the length of snake is getting longer. The score of player is displayed on seven segment digital tube. VHDL is used in this design to implement this game on the FPGA experimental platform. The testing result indicates that the game runs well, and can be promoted further.
Keywords: FPGA; Gluttony Snake Game; 16*16 dot matrix; VHDL
隨著社會(huì)的發(fā)展,游戲作為一種娛樂手段逐漸深入了人們的日常生活,人們對(duì)于游戲的要求也越來越高,除了看中其速度與交互性以外,人們更關(guān)心游戲的易攜性和網(wǎng)絡(luò)支持性[1]。1998年諾基亞公司發(fā)布了全球第一款內(nèi)置游戲的手機(jī)“變色龍6110”,內(nèi)置貪食蛇、記憶力、邏輯猜圖三款游戲,受到了全世界的歡迎,其他廠商也紛紛跟進(jìn),使得基于嵌入式平臺(tái)的游戲開發(fā)迅速崛起[2]。越來越多的游戲公司開始尋求一種新的硬件設(shè)備來適應(yīng)越來越高的游戲要求。而在硬件行業(yè),隨著FPGA技術(shù)的飛速發(fā)展以及其開發(fā)周期短、成本低、功耗低、可靠性高等優(yōu)勢(shì),其被廣泛應(yīng)用于通信、電子、航空等領(lǐng)域[3]。本文在以Altera公司CycloneⅡ系列FPGA芯片為控制核心的實(shí)驗(yàn)平臺(tái)上,開發(fā)基于FPGA的貪食蛇游戲。
1 總體結(jié)構(gòu)
本設(shè)計(jì)選取16×16 LED點(diǎn)陣作為游戲界面,在點(diǎn)陣上顯示貪食蛇、老鼠和障礙物。選取4個(gè)按鍵,分別控制貪食蛇往上、下、左、右4個(gè)方向移動(dòng)。游戲得分由7段數(shù)碼管顯示。系統(tǒng)初始化得分為0,隨機(jī)產(chǎn)生老鼠,貪食蛇按預(yù)定方向移動(dòng),玩家通過按鍵可以控制貪食蛇的移動(dòng)方向。當(dāng)?shù)梅中∮?0分時(shí),貪食蛇每吃到1只老鼠時(shí),玩家得分加1分,貪食蛇長(zhǎng)度加1;當(dāng)?shù)梅执笥?0分時(shí),貪食蛇每吃一只老鼠,玩家得分加2分,貪食蛇長(zhǎng)度加2。當(dāng)貪食蛇咬住自己、撞到障礙物或超出點(diǎn)陣邊界時(shí),游戲結(jié)束。結(jié)束后按復(fù)位鍵重新開始游戲。
按照貪食蛇游戲規(guī)則,本系統(tǒng)一共分為8個(gè)模塊,分別為按鍵掃描、控制器、計(jì)分顯示、點(diǎn)陣顯示、規(guī)則判定、貪食蛇移動(dòng)、老鼠位置生成、障礙物產(chǎn)生模塊。其中按鍵掃描部分的主要功能是讀取按鍵值判定用戶操作,并將數(shù)據(jù)傳送給控制器;計(jì)分顯示主要是顯示游戲玩家的得分情況,初始值顯示為00;點(diǎn)陣顯示部分主要是顯示游戲畫面;規(guī)則判定部分是根據(jù)貪食蛇當(dāng)前的位置信息,障礙物的信息,以及老鼠的信息來判定在游戲玩家的控制下貪食蛇是否死亡,并將相應(yīng)的游戲情況反饋給控制器;貪食蛇移動(dòng)部分主要是控制貪食蛇的移動(dòng);老鼠位置生成模塊的功能是隨機(jī)產(chǎn)生老鼠的位置信號(hào),并傳遞給顯示部分;障礙物設(shè)置部分用于生成障礙物,根據(jù)游戲玩家的得分情況來改變游戲難度。如當(dāng)游戲玩家得分小于10分時(shí),為第一等難度,當(dāng)游戲得分大于10分小于30分時(shí),為第二等難度;控制器是上述7個(gè)模塊的控制核心,根據(jù)各模塊反饋的信號(hào)做出一系列處理。系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
2 游戲?qū)崿F(xiàn)
本設(shè)計(jì)采用16×16 LED點(diǎn)陣作為游戲界面。LED
點(diǎn)陣顯示圖像時(shí)每次只能顯示同一列或者同一行上的LED點(diǎn),而要顯示某個(gè)圖形時(shí),就需要找出該圖形對(duì)應(yīng)的圖形編碼,然后根據(jù)對(duì)應(yīng)的編碼,進(jìn)行動(dòng)態(tài)掃描,只要掃描的頻率足夠快,人們觀察到的就好像是多個(gè)點(diǎn)同時(shí)顯示的圖形[4]。
如圖2所示,本次設(shè)計(jì)需要在點(diǎn)陣上顯示貪食蛇、障礙物和老鼠。用初始化的3個(gè)點(diǎn)代表貪食蛇,單個(gè)點(diǎn)代表老鼠,“L”形代表障礙物。要在點(diǎn)陣上顯示這些圖形,根據(jù)點(diǎn)陣的顯示原理可知,欲點(diǎn)亮該點(diǎn)陣上的某個(gè)點(diǎn),需要將點(diǎn)陣該點(diǎn)所在的行引腳置為低電平,列引腳置為高電平[5]。如圖2所示要顯示老鼠時(shí),只需將第10行置為低,第12列置為高,就點(diǎn)亮了該位置上的老鼠。
本設(shè)計(jì)通過控制貪食蛇的移動(dòng)、老鼠的隨機(jī)產(chǎn)生、障礙物的設(shè)定來控制整個(gè)游戲。其中對(duì)于貪食蛇的移動(dòng)方式采用的是循環(huán)移位的方法,如設(shè)定蛇的顯示時(shí)為兩個(gè)數(shù)組Sx,Sy,當(dāng)蛇前進(jìn)時(shí),根據(jù)蛇當(dāng)前的移動(dòng)方向,控制蛇頭移動(dòng),蛇身分別向前移動(dòng)一位,如蛇向右移動(dòng)時(shí),Sx(0)=Sx(0)+1,Sy(0)=Sy(0)。蛇身根據(jù)蛇當(dāng)前長(zhǎng)度,分別占據(jù)前一位的位置,即Sx(i)=S(i-1);Sy(i)=Sy(i-1)。這樣就控制了貪食蛇的移動(dòng)。
圖2 16×16 LED點(diǎn)陣顯示
當(dāng)老鼠被蛇吃掉后,新的老鼠的出現(xiàn)是由蛇當(dāng)前的移動(dòng)方向決定的,產(chǎn)生新老鼠的方式為當(dāng)前老鼠的位置加上蛇移動(dòng)方向?qū)?yīng)的控制值然后減去一個(gè)隨機(jī)數(shù)來產(chǎn)生。如當(dāng)前老鼠的坐標(biāo)為(a,b),蛇移動(dòng)的方向?yàn)閁P↑(對(duì)應(yīng)值為3),當(dāng)當(dāng)前坐標(biāo)值分別加上方向值時(shí),如果結(jié)果大于15,結(jié)果需要減去一個(gè)隨機(jī)數(shù)m,坐標(biāo)值為(a+UP-m,b+UP-m);否者的話坐標(biāo)位置為(a+UP,b+UP)。這樣就能隨機(jī)地生成老鼠的新坐標(biāo)。本次設(shè)計(jì)共設(shè)置了兩種障礙物,分別代表了不同的游戲難度,在編寫代碼時(shí)就已經(jīng)將障礙物的形狀設(shè)定好,當(dāng)玩家的游戲積分超過設(shè)定值時(shí),系統(tǒng)會(huì)自動(dòng)切換障礙物,新的障礙物會(huì)隨之出現(xiàn),顯示在游戲屏幕上。對(duì)于游戲規(guī)則的設(shè)定為:將LED的邊界設(shè)為游戲邊界,當(dāng)貪食蛇碰撞到邊界時(shí)(一共4種情況:Sx<0||Sx>15||Sy<0||Sy>15),玩家操作失敗,游戲結(jié)束。當(dāng)貪食蛇的蛇頭碰到自己蛇身或障礙物時(shí)游戲結(jié)束。游戲的工作流程如圖3所示。
游戲效果如圖4所示,其中(a)為游戲的初始化界面;(b)為移動(dòng)中的第一難度的貪食蛇;(c)為第二難度的貪食蛇。該貪食蛇游戲能進(jìn)行難度劃分、游戲計(jì)分、場(chǎng)景變化等,給游戲玩家?guī)砹吮姸嗟臉啡ぁ?/p>
圖4 游戲運(yùn)行界面
3 結(jié) 語(yǔ)
本設(shè)計(jì)利用FPGA實(shí)驗(yàn)平臺(tái),采用VHDL語(yǔ)言編程,成功地實(shí)現(xiàn)了一款貪食蛇游戲。該游戲通過在硬件平臺(tái)的測(cè)試,得到了眾多玩家的好評(píng)。面對(duì)嵌入式游戲的飛速發(fā)展和越來越廣泛的應(yīng)用,F(xiàn)PGA的高速度、高精度等功能特性被越來越多的游戲開發(fā)者所接受,基于FPGA的游戲開發(fā)前景將是非常廣闊的[6]。
參考文獻(xiàn)
[1] 潘松,潘明.EDA技術(shù)實(shí)用教程[M].科學(xué)出版社,2006.
[2] 潘松,黃繼業(yè).EDA技術(shù)與VHDL[M].清華大學(xué)出版社,2009.
[3] 高士峰.醫(yī)療機(jī)器人主操作手入門研究與開發(fā)[D].天津:天津大學(xué),2005.
[4] Lattice Semiconductor Corporation.利用低成本FPGA設(shè)計(jì)下一代游戲控制臺(tái)[EB/OL]. [2009?04?24]. http:// www.eeworld.toni.cn.
[5] 彭介華.電子技術(shù)課程設(shè)計(jì)指導(dǎo)[M].北京:高等教育出版社,1997.
[6] [美]克里茲.高級(jí)FPGA設(shè)計(jì)結(jié)構(gòu)、實(shí)現(xiàn)和優(yōu)化[M].孟憲元,譯.北京:機(jī)械工業(yè)出版社,2009.
如圖2所示,本次設(shè)計(jì)需要在點(diǎn)陣上顯示貪食蛇、障礙物和老鼠。用初始化的3個(gè)點(diǎn)代表貪食蛇,單個(gè)點(diǎn)代表老鼠,“L”形代表障礙物。要在點(diǎn)陣上顯示這些圖形,根據(jù)點(diǎn)陣的顯示原理可知,欲點(diǎn)亮該點(diǎn)陣上的某個(gè)點(diǎn),需要將點(diǎn)陣該點(diǎn)所在的行引腳置為低電平,列引腳置為高電平[5]。如圖2所示要顯示老鼠時(shí),只需將第10行置為低,第12列置為高,就點(diǎn)亮了該位置上的老鼠。
本設(shè)計(jì)通過控制貪食蛇的移動(dòng)、老鼠的隨機(jī)產(chǎn)生、障礙物的設(shè)定來控制整個(gè)游戲。其中對(duì)于貪食蛇的移動(dòng)方式采用的是循環(huán)移位的方法,如設(shè)定蛇的顯示時(shí)為兩個(gè)數(shù)組Sx,Sy,當(dāng)蛇前進(jìn)時(shí),根據(jù)蛇當(dāng)前的移動(dòng)方向,控制蛇頭移動(dòng),蛇身分別向前移動(dòng)一位,如蛇向右移動(dòng)時(shí),Sx(0)=Sx(0)+1,Sy(0)=Sy(0)。蛇身根據(jù)蛇當(dāng)前長(zhǎng)度,分別占據(jù)前一位的位置,即Sx(i)=S(i-1);Sy(i)=Sy(i-1)。這樣就控制了貪食蛇的移動(dòng)。
圖2 16×16 LED點(diǎn)陣顯示
當(dāng)老鼠被蛇吃掉后,新的老鼠的出現(xiàn)是由蛇當(dāng)前的移動(dòng)方向決定的,產(chǎn)生新老鼠的方式為當(dāng)前老鼠的位置加上蛇移動(dòng)方向?qū)?yīng)的控制值然后減去一個(gè)隨機(jī)數(shù)來產(chǎn)生。如當(dāng)前老鼠的坐標(biāo)為(a,b),蛇移動(dòng)的方向?yàn)閁P↑(對(duì)應(yīng)值為3),當(dāng)當(dāng)前坐標(biāo)值分別加上方向值時(shí),如果結(jié)果大于15,結(jié)果需要減去一個(gè)隨機(jī)數(shù)m,坐標(biāo)值為(a+UP-m,b+UP-m);否者的話坐標(biāo)位置為(a+UP,b+UP)。這樣就能隨機(jī)地生成老鼠的新坐標(biāo)。本次設(shè)計(jì)共設(shè)置了兩種障礙物,分別代表了不同的游戲難度,在編寫代碼時(shí)就已經(jīng)將障礙物的形狀設(shè)定好,當(dāng)玩家的游戲積分超過設(shè)定值時(shí),系統(tǒng)會(huì)自動(dòng)切換障礙物,新的障礙物會(huì)隨之出現(xiàn),顯示在游戲屏幕上。對(duì)于游戲規(guī)則的設(shè)定為:將LED的邊界設(shè)為游戲邊界,當(dāng)貪食蛇碰撞到邊界時(shí)(一共4種情況:Sx<0||Sx>15||Sy<0||Sy>15),玩家操作失敗,游戲結(jié)束。當(dāng)貪食蛇的蛇頭碰到自己蛇身或障礙物時(shí)游戲結(jié)束。游戲的工作流程如圖3所示。
游戲效果如圖4所示,其中(a)為游戲的初始化界面;(b)為移動(dòng)中的第一難度的貪食蛇;(c)為第二難度的貪食蛇。該貪食蛇游戲能進(jìn)行難度劃分、游戲計(jì)分、場(chǎng)景變化等,給游戲玩家?guī)砹吮姸嗟臉啡ぁ?/p>
圖4 游戲運(yùn)行界面
3 結(jié) 語(yǔ)
本設(shè)計(jì)利用FPGA實(shí)驗(yàn)平臺(tái),采用VHDL語(yǔ)言編程,成功地實(shí)現(xiàn)了一款貪食蛇游戲。該游戲通過在硬件平臺(tái)的測(cè)試,得到了眾多玩家的好評(píng)。面對(duì)嵌入式游戲的飛速發(fā)展和越來越廣泛的應(yīng)用,F(xiàn)PGA的高速度、高精度等功能特性被越來越多的游戲開發(fā)者所接受,基于FPGA的游戲開發(fā)前景將是非常廣闊的[6]。
參考文獻(xiàn)
[1] 潘松,潘明.EDA技術(shù)實(shí)用教程[M].科學(xué)出版社,2006.
[2] 潘松,黃繼業(yè).EDA技術(shù)與VHDL[M].清華大學(xué)出版社,2009.
[3] 高士峰.醫(yī)療機(jī)器人主操作手入門研究與開發(fā)[D].天津:天津大學(xué),2005.
[4] Lattice Semiconductor Corporation.利用低成本FPGA設(shè)計(jì)下一代游戲控制臺(tái)[EB/OL]. [2009?04?24]. http:// www.eeworld.toni.cn.
[5] 彭介華.電子技術(shù)課程設(shè)計(jì)指導(dǎo)[M].北京:高等教育出版社,1997.
[6] [美]克里茲.高級(jí)FPGA設(shè)計(jì)結(jié)構(gòu)、實(shí)現(xiàn)和優(yōu)化[M].孟憲元,譯.北京:機(jī)械工業(yè)出版社,2009.
如圖2所示,本次設(shè)計(jì)需要在點(diǎn)陣上顯示貪食蛇、障礙物和老鼠。用初始化的3個(gè)點(diǎn)代表貪食蛇,單個(gè)點(diǎn)代表老鼠,“L”形代表障礙物。要在點(diǎn)陣上顯示這些圖形,根據(jù)點(diǎn)陣的顯示原理可知,欲點(diǎn)亮該點(diǎn)陣上的某個(gè)點(diǎn),需要將點(diǎn)陣該點(diǎn)所在的行引腳置為低電平,列引腳置為高電平[5]。如圖2所示要顯示老鼠時(shí),只需將第10行置為低,第12列置為高,就點(diǎn)亮了該位置上的老鼠。
本設(shè)計(jì)通過控制貪食蛇的移動(dòng)、老鼠的隨機(jī)產(chǎn)生、障礙物的設(shè)定來控制整個(gè)游戲。其中對(duì)于貪食蛇的移動(dòng)方式采用的是循環(huán)移位的方法,如設(shè)定蛇的顯示時(shí)為兩個(gè)數(shù)組Sx,Sy,當(dāng)蛇前進(jìn)時(shí),根據(jù)蛇當(dāng)前的移動(dòng)方向,控制蛇頭移動(dòng),蛇身分別向前移動(dòng)一位,如蛇向右移動(dòng)時(shí),Sx(0)=Sx(0)+1,Sy(0)=Sy(0)。蛇身根據(jù)蛇當(dāng)前長(zhǎng)度,分別占據(jù)前一位的位置,即Sx(i)=S(i-1);Sy(i)=Sy(i-1)。這樣就控制了貪食蛇的移動(dòng)。
圖2 16×16 LED點(diǎn)陣顯示
當(dāng)老鼠被蛇吃掉后,新的老鼠的出現(xiàn)是由蛇當(dāng)前的移動(dòng)方向決定的,產(chǎn)生新老鼠的方式為當(dāng)前老鼠的位置加上蛇移動(dòng)方向?qū)?yīng)的控制值然后減去一個(gè)隨機(jī)數(shù)來產(chǎn)生。如當(dāng)前老鼠的坐標(biāo)為(a,b),蛇移動(dòng)的方向?yàn)閁P↑(對(duì)應(yīng)值為3),當(dāng)當(dāng)前坐標(biāo)值分別加上方向值時(shí),如果結(jié)果大于15,結(jié)果需要減去一個(gè)隨機(jī)數(shù)m,坐標(biāo)值為(a+UP-m,b+UP-m);否者的話坐標(biāo)位置為(a+UP,b+UP)。這樣就能隨機(jī)地生成老鼠的新坐標(biāo)。本次設(shè)計(jì)共設(shè)置了兩種障礙物,分別代表了不同的游戲難度,在編寫代碼時(shí)就已經(jīng)將障礙物的形狀設(shè)定好,當(dāng)玩家的游戲積分超過設(shè)定值時(shí),系統(tǒng)會(huì)自動(dòng)切換障礙物,新的障礙物會(huì)隨之出現(xiàn),顯示在游戲屏幕上。對(duì)于游戲規(guī)則的設(shè)定為:將LED的邊界設(shè)為游戲邊界,當(dāng)貪食蛇碰撞到邊界時(shí)(一共4種情況:Sx<0||Sx>15||Sy<0||Sy>15),玩家操作失敗,游戲結(jié)束。當(dāng)貪食蛇的蛇頭碰到自己蛇身或障礙物時(shí)游戲結(jié)束。游戲的工作流程如圖3所示。
游戲效果如圖4所示,其中(a)為游戲的初始化界面;(b)為移動(dòng)中的第一難度的貪食蛇;(c)為第二難度的貪食蛇。該貪食蛇游戲能進(jìn)行難度劃分、游戲計(jì)分、場(chǎng)景變化等,給游戲玩家?guī)砹吮姸嗟臉啡ぁ?/p>
圖4 游戲運(yùn)行界面
3 結(jié) 語(yǔ)
本設(shè)計(jì)利用FPGA實(shí)驗(yàn)平臺(tái),采用VHDL語(yǔ)言編程,成功地實(shí)現(xiàn)了一款貪食蛇游戲。該游戲通過在硬件平臺(tái)的測(cè)試,得到了眾多玩家的好評(píng)。面對(duì)嵌入式游戲的飛速發(fā)展和越來越廣泛的應(yīng)用,F(xiàn)PGA的高速度、高精度等功能特性被越來越多的游戲開發(fā)者所接受,基于FPGA的游戲開發(fā)前景將是非常廣闊的[6]。
參考文獻(xiàn)
[1] 潘松,潘明.EDA技術(shù)實(shí)用教程[M].科學(xué)出版社,2006.
[2] 潘松,黃繼業(yè).EDA技術(shù)與VHDL[M].清華大學(xué)出版社,2009.
[3] 高士峰.醫(yī)療機(jī)器人主操作手入門研究與開發(fā)[D].天津:天津大學(xué),2005.
[4] Lattice Semiconductor Corporation.利用低成本FPGA設(shè)計(jì)下一代游戲控制臺(tái)[EB/OL]. [2009?04?24]. http:// www.eeworld.toni.cn.
[5] 彭介華.電子技術(shù)課程設(shè)計(jì)指導(dǎo)[M].北京:高等教育出版社,1997.
[6] [美]克里茲.高級(jí)FPGA設(shè)計(jì)結(jié)構(gòu)、實(shí)現(xiàn)和優(yōu)化[M].孟憲元,譯.北京:機(jī)械工業(yè)出版社,2009.