• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

貪吃蛇大作戰(zhàn),基于Basys3和FPGA設計的貪吃蛇小游戲設計資料

2017/07/26
49
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

程序源代碼.rar

共1個文件

現(xiàn)在小孩子玩的最多的玩具就是手機了,不禁感慨,我們小時候都是咋過來的,有個游戲機,可以玩?zhèn)€貪吃蛇、俄羅斯方塊就不錯了。可以自己設計個貪吃蛇游戲玩玩,重溫童年的經(jīng)典,也讓現(xiàn)在小孩子知道,珍惜當下美好的生活。

功能實現(xiàn)說明:
此游戲較為簡單,沒有設置多余障礙物,只設置了四周的墻壁,貪食蛇所吃的蘋果隨機刷新,當蛇裝上墻壁或者自己的身體,游戲結(jié)束。
此游戲使用五個按鍵,利用Basys3上的按鈕,四個方向鍵,一個重新開始游戲按鈕,一個操作開關(guān)。使用7位數(shù)碼管進行計分,每吃到一個蘋果分數(shù)+1。使用VGA顯示游戲界面。
DIY動手指南:
Step1:材料準備
硬件
Basys3開發(fā)板
VGA連接線及VGA顯示器一臺
軟件平臺:Vivado2016.4
Step2:系統(tǒng)框架

系統(tǒng)主要由6部分組成,分別是按鍵輸入模塊、控制模塊、數(shù)據(jù)路徑模塊、隨機生成 模塊、VGA顯示模塊和數(shù)碼管顯示模塊。
Step3:程序設計

上圖是本程序的RTL級視圖。
下面我們對于各個模塊進行分析。
1.鍵盤掃描
我們一共設置了五個按鍵,分別執(zhí)行up,down,left,right,restart這五個功能。
以up_key_press為例,介紹消抖的算法。
在每個時鐘高電平時并行執(zhí)行以下兩條語句
up_key_press<=0;
up_key_last<=0;
當有按鍵按下時,每100ms(cnt=5_0000) last=up,last輸出比up滯后一個周期,若up_key_last==0&&up==1,則說明按鍵按下,press輸出置1。
2.控制模塊


當打開開始開關(guān)并按下任意一個方向鍵時,游戲開始,當游戲結(jié)束時閃爍5下,重新開始游戲。
3.數(shù)據(jù)路徑模塊

cube_x,cube_y表示一整條蛇身體各節(jié)的格坐標。is_exist有16位,即蛇體最長為16*1格,每一位對應一個格,1為該格顯示,0則不顯示(圖中虛框)。每吃下一個蘋果蛇長度增加1,相應exist位置變?yōu)?。
蛇每次移動,對應的cube[x] = cube[x+1],即后一位的身子會移動到前一位的位置,蛇頭根據(jù)按下的按鈕來判斷是撞到了墻,還是撞到了身子,還是移動到了下一個位置。
當蛇頭和蘋果重合時,生成一個增加身長的信號,并在計數(shù)器上+1。
4.隨機生成模塊
采用偽隨機數(shù)的產(chǎn)生方法,比較笨拙。
每個時鐘周期random_num都在變,而我們吃下蘋果的時刻卻因走法、按鍵的時間等有所不同,所以不同時刻吃下蘋果后下一個蘋果出現(xiàn)的地方近似隨機~
5.VGA顯示模塊
使用640*480分辨率,需要分頻為25MHz的時鐘信號
6.數(shù)碼管顯示模塊
當有增長身長信號產(chǎn)生時,分數(shù)也對應增加,數(shù)碼管動態(tài)掃描顯示分數(shù)。
Step4:演示

  • 程序源代碼.rar
    下載
    描述:源程序代碼

相關(guān)推薦