0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FPGA的貪吃蛇游戲設(shè)計

友晶FPGA ? 來源:友晶FPGA ? 2023-12-18 16:14 ? 次閱讀

Terasic

基于FPGA的貪吃蛇游戲設(shè)計之食物(蘋果)產(chǎn)生

DE10-Standard/DE1-SoC/DE2-115

食物產(chǎn)生模塊完成的任務(wù)是:每次初始化就給定一個食物坐標(biāo)比如(24,10),然后蛇運(yùn)動的過程中用蛇頭坐標(biāo)跟食物坐標(biāo)對比是否重合來判斷是否吃掉了食物,如果相同食物就被吃掉,然后由隨機(jī)數(shù)產(chǎn)生新的食物坐標(biāo)。

單元劃分

蛇要吃掉的食物大小為16*16個像素(蛇頭大小也是16*16, 蛇身每一節(jié)大小也是16*16)。

顯示器分辨率是640*480,假設(shè)16*16算作一個單元,那么640*480可以看作是40*30個單元的一個長方形。這些單元的坐標(biāo)范圍是[39:0],[29:0];去掉墻壁厚度(墻壁占用一個單元的厚度),食物可產(chǎn)生的坐標(biāo)范圍為:[38:1],[28:1]。

02d982b4-9d7d-11ee-8b88-92fbcf53809c.png

代碼設(shè)計

1產(chǎn)生分?jǐn)?shù)累加信號

當(dāng)蛇頭坐標(biāo)和食物坐標(biāo)相同時,表示蛇吃掉一個食物,就將 add_cube 信號置1,然后產(chǎn)生新的食物坐標(biāo),當(dāng)新的食物坐標(biāo)產(chǎn)生以后,在時鐘的下一節(jié)拍下add_cube信號又被置0,等待下次坐標(biāo)再次相同:

02e5ff76-9d7d-11ee-8b88-92fbcf53809c.png

2產(chǎn)生隨機(jī)數(shù)

這里用加法產(chǎn)生隨機(jī)數(shù)。

random_num寄存器沒有初始化,所以它的初始值是不確定的,然后隨著每次吃食物的時間不確定性,random_num+999就是一個非常具有隨機(jī)數(shù)特征的數(shù)。

0302d5ba-9d7d-11ee-8b88-92fbcf53809c.png

每當(dāng)蛇吃掉一個食物,就要同時產(chǎn)生一個新的食物,游戲中采用隨機(jī)數(shù)高六位為食物x的坐標(biāo),低五位為食物y坐標(biāo)。

生成食物坐標(biāo)的代碼如下:

03069ae2-9d7d-11ee-8b88-92fbcf53809c.png0311985c-9d7d-11ee-8b88-92fbcf53809c.png

如果 apple_x滿足條件 random num[10:5]> 38(代表食物x坐標(biāo)與顯示器最右邊邊框重合),那apple_x值就取 random num[10:5]- 25,如果apple_x不滿足條件random num[10:5]> 38,就看apple_x滿不滿足 random_num[10:5]==0(代表食物x坐標(biāo)與顯示器最左邊邊框重合),如果apple_x滿足random_num[10:5]==0,apple_x就取1,否則apple_x就取random_num[10:5]。

apple_y 同理。

3完整代碼

apple_generate.v的完整代碼如下:

//食物(蘋果)產(chǎn)生控制模塊
//初始化給定一個食物坐標(biāo),輸入蛇頭坐標(biāo)跟食物坐標(biāo)對比來判斷是否吃掉食物,如果被吃掉,就產(chǎn)生新的蘋果坐標(biāo)
module apple_generate(
 input clk, //時鐘25MHz
 input rst_n,//系統(tǒng)復(fù)位
 
 input [5:0]head_x,//蛇的頭部x軸坐標(biāo)
 input [5:0]head_y,//蛇的頭部y軸坐標(biāo)
 
 output reg [5:0]apple_x,//蘋果的x軸坐標(biāo)
 output reg [4:0]apple_y,//蘋果的y軸坐標(biāo)


 output reg add_cube//蛇吃掉一個蘋果標(biāo)志
);


 reg [31:0]clk_cnt;
 reg [10:0]random_num;//寄存器沒有初始化
 
 always@(posedge clk)
  random_num <= random_num + 999; ?//用加法產(chǎn)生隨機(jī)數(shù) ?
 ? ?//隨機(jī)數(shù)高六位為食物x的坐標(biāo),低五位為蘋果Y坐標(biāo)
 ?
 ?always@(posedge clk or negedge rst_n) begin
 ? ?if(!rst_n) begin
 ? ? ?clk_cnt <= 0;
 ? ? ?apple_x <= 24;
 ? ? ?apple_y <= 10;
 ? ? ?add_cube <= 0;
 ? ?end
 ? ?else begin
 ? ? ?if(apple_x == head_x && apple_y == head_y) begin//當(dāng)蛇頭坐標(biāo)和蘋果坐標(biāo)一樣時,表示蛇吃掉一個蘋果
 ? ? ? ?add_cube <= 1;
 ? ? ? ?apple_x <= (random_num[10:5] > 38) ? (random_num[10:5] - 25) : (random_num[10:5] == 0) ? 1 : random_num[10:5];
    apple_y <= (random_num[4:0] > 28) ? (random_num[4:0] - 3) : (random_num[4:0] == 0) ? 1:random_num[4:0];
   end  //判斷隨機(jī)數(shù)是否超出頻幕坐標(biāo)范圍 將隨機(jī)數(shù)轉(zhuǎn)換為下個蘋果的X Y坐標(biāo)
    
    //如果 apple_x滿足條件 random num[10:5] > 38,那apple_x值就取 random num[10:5] - 25
    //如果apple_x不滿足條件random num[10:5] > 38,就看apple_x滿不滿足 random_num[10:5] == 0,
    //如果apple_x滿足random_num[10:5] == 0,apple_x就取1, 否則apple_x就取random_num[10:5]
    //random num[10:5] > 38是蘋果x坐標(biāo)到顯示器最右邊(邊框)
    //random_num[10:5] == 0是蘋果x坐標(biāo)到顯示器最左邊(邊框)
    //apple_y 同理
   else
    add_cube <= 0;
 ? ? ?end
 ? ?end
endmodule

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21620

    瀏覽量

    601234
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119814
  • 游戲
    +關(guān)注

    關(guān)注

    2

    文章

    733

    瀏覽量

    26261

原文標(biāo)題:基于FPGA的貪吃蛇游戲設(shè)計(七)——食物(蘋果)的產(chǎn)生

文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    貪吃蛇游戲

    編的簡單的貪吃蛇游戲
    發(fā)表于 05-05 16:40

    [熱]基于FPGA貪吃蛇游戲

    本帖最后由 eehome 于 2013-1-5 09:59 編輯 基于FPGA貪吃蛇游戲,大家有興趣的下載來看看~~
    發(fā)表于 08-20 09:49

    FPGA VGA 貪吃蛇游戲

    FPGAVGA貪吃蛇游戲 資料
    發(fā)表于 04-22 20:08

    貪吃蛇游戲

    貪吃蛇游戲的下載
    發(fā)表于 03-04 18:24

    貪吃蛇游戲的電路實現(xiàn)

    最近論壇好冷清,在此發(fā)一貼暖暖身,回到正題,大家都玩過“貪吃蛇游戲,用代碼實現(xiàn)該游戲想必難不倒大神,在網(wǎng)上也有一大堆針對該游戲的代碼實現(xiàn),如果擺脫代碼,用硬件來實現(xiàn)“
    發(fā)表于 11-19 17:52

    貪吃蛇游戲

    Labview制作貪吃蛇游戲,值得學(xué)習(xí)研究
    發(fā)表于 09-07 21:39

    C語言寫個貪吃蛇游戲

    C語言寫個貪吃蛇游戲 貪吃蛇是個非常經(jīng)典的游戲,用C語言來實現(xiàn)也是一個好玩的事情。這個游戲我寫完后放在知乎,竟然點贊的人數(shù)超級多。我覺
    發(fā)表于 04-10 10:44

    FPGA DEMO】Lab 9:貪吃蛇游戲

    ` 本帖最后由 zhangyue510 于 2021-7-30 16:32 編輯 項目名稱:貪吃蛇游戲具體要求:在Perf-V實現(xiàn)貪吃蛇游戲的運(yùn)行。系統(tǒng)設(shè)計:
    發(fā)表于 07-30 15:53

    基于stm32的貪吃蛇游戲的設(shè)計資料分享

    指南者開發(fā)板上,使其能在觸摸屏上顯示,并且添加了暫停/繼續(xù)的觸摸按鍵以及簡單的游戲結(jié)束顯示,大體再現(xiàn)了貪吃蛇這款小游戲。一、主要功能上圖是整個顯示屏的布局以及對應(yīng)功能。游戲界面是240
    發(fā)表于 02-21 07:27

    貪吃蛇游戲設(shè)計貪吃蛇收尾基本完成

    電子發(fā)燒友網(wǎng)站提供《貪吃蛇游戲設(shè)計貪吃蛇收尾基本完成.rar》資料免費(fèi)下載
    發(fā)表于 03-24 23:06 ?3次下載

    貪吃蛇游戲(verilog)

    用Verilog編寫的貪吃蛇游戲,從別人那里搞的,希望對大家學(xué)習(xí)有幫助。
    發(fā)表于 08-19 15:57 ?51次下載

    貪吃蛇游戲java源代碼

    貪吃蛇游戲java源代碼
    發(fā)表于 12-27 17:56 ?9次下載

    基于LabVIEW的貪吃蛇游戲源代碼

    基于LabVIEW的貪吃蛇游戲源代碼
    發(fā)表于 04-22 09:27 ?74次下載

    micro:bit貪吃蛇游戲開源分享

    電子發(fā)燒友網(wǎng)站提供《micro:bit貪吃蛇游戲開源分享.zip》資料免費(fèi)下載
    發(fā)表于 06-13 10:58 ?5次下載
    micro:bit<b class='flag-5'>貪吃蛇</b><b class='flag-5'>游戲</b>開源分享

    基于51單片機(jī)的貪吃蛇游戲設(shè)計

    基于51單片機(jī)的貪吃蛇游戲設(shè)計(仿真+實物)
    發(fā)表于 01-02 09:38 ?2次下載