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