0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的贪吃蛇游戏设计

友晶FPGA 来源:友晶FPGA 2023-12-18 16:14 次阅读

Terasic

基于FPGA的贪吃蛇游戏设计之食物(苹果)产生

DE10-Standard/DE1-SoC/DE2-115

食物产生模块完成的任务是:每次初始化就给定一个食物坐标比如(24,10),然后蛇运动的过程中用蛇头坐标跟食物坐标对比是否重合来判断是否吃掉了食物,如果相同食物就被吃掉,然后由随机数产生新的食物坐标。

单元划分

蛇要吃掉的食物大小为16*16个像素(蛇头大小也是16*16, 蛇身每一节大小也是16*16)。

显示器分辨率是640*480,假设16*16算作一个单元,那么640*480可以看作是40*30个单元的一个长方形。这些单元的坐标范围是[39:0],[29:0];去掉墙壁厚度(墙壁占用一个单元的厚度),食物可产生的坐标范围为:[38:1],[28:1]。

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

代码设计

1产生分数累加信号

当蛇头坐标和食物坐标相同时,表示蛇吃掉一个食物,就将 add_cube 信号置1,然后产生新的食物坐标,当新的食物坐标产生以后,在时钟的下一节拍下add_cube信号又被置0,等待下次坐标再次相同:

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

2产生随机数

这里用加法产生随机数。

random_num寄存器没有初始化,所以它的初始值是不确定的,然后随着每次吃食物的时间不确定性,random_num+999就是一个非常具有随机数特征的数。

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

每当蛇吃掉一个食物,就要同时产生一个新的食物,游戏中采用随机数高六位为食物x的坐标,低五位为食物y坐标。

生成食物坐标的代码如下:

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

如果 apple_x满足条件 random num[10:5]> 38(代表食物x坐标与显示器最右边边框重合),那apple_x值就取 random num[10:5]- 25,如果apple_x不满足条件random num[10:5]> 38,就看apple_x满不满足 random_num[10:5]==0(代表食物x坐标与显示器最左边边框重合),如果apple_x满足random_num[10:5]==0,apple_x就取1,否则apple_x就取random_num[10:5]。

apple_y 同理。

3完整代码

apple_generate.v的完整代码如下:

//食物(苹果)产生控制模块
//初始化给定一个食物坐标,输入蛇头坐标跟食物坐标对比来判断是否吃掉食物,如果被吃掉,就产生新的苹果坐标
module apple_generate(
 input clk, //时钟25MHz
 input rst_n,//系统复位
 
 input [5:0]head_x,//蛇的头部x轴坐标
 input [5:0]head_y,//蛇的头部y轴坐标
 
 output reg [5:0]apple_x,//苹果的x轴坐标
 output reg [4:0]apple_y,//苹果的y轴坐标


 output reg add_cube//蛇吃掉一个苹果标志
);


 reg [31:0]clk_cnt;
 reg [10:0]random_num;//寄存器没有初始化
 
 always@(posedge clk)
  random_num <= random_num + 999;  //用加法产生随机数  
    //随机数高六位为食物x的坐标,低五位为苹果Y坐标
  
  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//当蛇头坐标和苹果坐标一样时,表示蛇吃掉一个苹果
        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  //判断随机数是否超出频幕坐标范围 将随机数转换为下个苹果的X Y坐标
    
    //如果 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坐标到显示器最右边(边框)
    //random_num[10:5] == 0是苹果x坐标到显示器最左边(边框)
    //apple_y 同理
   else
    add_cube <= 0;
      end
    end
endmodule

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593201
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117731
  • 游戏
    +关注

    关注

    2

    文章

    696

    浏览量

    26040

原文标题:基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生

文章出处:【微信号:友晶FPGA,微信公众号:友晶FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    贪吃蛇游戏

    编的简单的贪吃蛇游戏
    发表于 05-05 16:40

    [热]基于FPGA贪吃蛇游戏

    本帖最后由 eehome 于 2013-1-5 09:59 编辑 基于FPGA贪吃蛇游戏,大家有兴趣的下载来看看~~
    发表于 08-20 09:49

    FPGA VGA 贪吃蛇游戏

    FPGAVGA贪吃蛇游戏 资料
    发表于 04-22 20:08

    贪吃蛇

    新手参考资料制作的贪吃蛇游戏,有很多不足,撞自己身体实现不了,还有游戏结束的Game Over !实现不了,求大神指导
    发表于 04-11 13:30

    贪吃蛇游戏

    贪吃蛇游戏的下载
    发表于 03-04 18:24

    基于51单片机c语言的贪吃蛇游戏

    基于51单片机的C语言的贪吃蛇游戏仿真
    发表于 11-25 21:05

    贪吃蛇游戏的电路实现

    最近论坛好冷清,在此发一贴暖暖身,回到正题,大家都玩过“贪吃蛇游戏,用代码实现该游戏想必难不倒大神,在网上也有一大堆针对该游戏的代码实现,如果摆脱代码,用硬件来实现“
    发表于 11-19 17:52

    【教学基地】制作贪吃蛇游戏(底层支持部分)

    [tr=transparent]【教学基地006】制作贪吃蛇游戏(底层支持部分)大家尾部提供源文件下载,键盘上下左右控制移动,本节要点:1.贪吃蛇游戏绘制数组2.蛇头移动3.制作
    发表于 05-16 13:11

    贪吃蛇游戏

    Labview制作贪吃蛇游戏,值得学习研究
    发表于 09-07 21:39

    C语言写个贪吃蛇游戏

    C语言写个贪吃蛇游戏 贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情。这个游戏我写完后放在知乎,竟然点赞的人数超级多。我觉
    发表于 04-10 10:44

    基于51单片机的贪吃蛇游戏设计 精选资料分享

    的理解,编写程序实现对贪吃蛇的有效控制;(2)通过对51单片机硬件的学习,学会运用面包板,独立按键、点阵屏等,完成对完整电路的搭建过程;(3)通过对Proteus仿真软件的学习,实现基于STC89C52单片机的8*8点阵贪吃蛇的硬件电路仿真。二. 实验介绍
    发表于 07-16 06:48

    FPGA DEMO】Lab 9:贪吃蛇游戏

    ` 本帖最后由 zhangyue510 于 2021-7-30 16:32 编辑 项目名称:贪吃蛇游戏具体要求:在Perf-V实现贪吃蛇游戏的运行。系统设计:
    发表于 07-30 15:53

    如何利用STM32制作贪吃蛇和推箱子游戏

    如何利用STM32制作贪吃蛇和推箱子游戏
    发表于 09-27 08:07

    怎么实现基于51单片机的贪吃蛇游戏的设计?

    怎么实现基于51单片机的贪吃蛇游戏的设计?
    发表于 11-04 07:07

    基于stm32的贪吃蛇游戏的设计资料分享

    指南者开发板上,使其能在触摸屏上显示,并且添加了暂停/继续的触摸按键以及简单的游戏结束显示,大体再现了贪吃蛇这款小游戏。一、主要功能上图是整个显示屏的布局以及对应功能。游戏界面是240
    发表于 02-21 07:27