【友晶】基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生

这篇具有很好参考价值的文章主要介绍了【友晶】基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

单元划分

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

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

【友晶】基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生,DE10-Standard,DE1-SOC,DE2-115,fpga开发,游戏,科技

代码设计

1 产生分数累加信号

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

【友晶】基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生,DE10-Standard,DE1-SOC,DE2-115,fpga开发,游戏,科技

2 产生随机数

这里用加法产生随机数。

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

【友晶】基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生,DE10-Standard,DE1-SOC,DE2-115,fpga开发,游戏,科技

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

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

【友晶】基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生,DE10-Standard,DE1-SOC,DE2-115,fpga开发,游戏,科技

【友晶】基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生,DE10-Standard,DE1-SOC,DE2-115,fpga开发,游戏,科技

如果 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

贪吃蛇系列连载文章:

  ​
1. 基于FPGA的贪吃蛇游戏设计(一)

2. 基于FPGA的贪吃蛇游戏设计(二)——数码管驱动模块

3. 基于FPGA的贪吃蛇游戏设计(三)——计分模块

4. 基于FPGA的贪吃蛇游戏设计(四)——VGA驱动模块色块显示

5. 基于FPGA的贪吃蛇游戏设计(五)——VGA驱动模块字符显示

6. 基于FPGA的贪吃蛇游戏设计(六)——VGA驱动模块图片显示

7. 基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生

8. 基于FPGA的贪吃蛇游戏设计(八)——状态机设计

9. 基于FPGA的贪吃蛇游戏设计(九)——蛇身控制

关注“友晶Terasic”公众号可获取源码下载地址。

移植到DE1-SOC、DE2-115时代码无需改变,只需修改引脚分配即可。

【友晶】基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生,DE10-Standard,DE1-SOC,DE2-115,fpga开发,游戏,科技文章来源地址https://www.toymoban.com/news/detail-788568.html

到了这里,关于【友晶】基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA的五子棋游戏设计

    基于FPGA的五子棋游戏设计 本文基于FPGA设计五子棋游戏,使用按键输入,使用VGA接口输出。五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为10×10,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的

    2024年02月05日
    浏览(14)
  • Python贪吃蛇游戏设计

    需求分析 贪吃蛇游戏是一款经典的游戏,玩家通过控制蛇的移动来吃掉食物,从而得到分数。在游戏中需要实现以下功能: 蛇的移动:蛇可以向上、下、左、右四个方向移动,每次移动一个单位长度。 食物的生成:游戏开始时,需要在游戏区域内随机生成一个食物。 蛇的生

    2024年02月12日
    浏览(15)
  • MATLAB GUI游戏设计——贪吃蛇

    在MATLAB App Designer中创建一个新的App时,我们首先需要设计游戏的界面布局。贪吃蛇游戏通常需要一个网格来作为游戏空间,以及一些控制按钮和信息显示。以下是创建界面布局的步骤: 1. 创建20*20的网格 在这段代码中,我们首先创建一个面板( uipanel ),它将作为游戏网格

    2024年02月01日
    浏览(13)
  • 基于微信小程序校园食物配送系统的设计与实现

    目 录 1 前言 1 1.1 研究目的与意义 1 1.2 研究现状 1 2 可行性分析 3 2.1 技术可行性 3 2.2 法律可行性 3 2.3 社会可行性 4 2.4 经济可行性 4 2.5 可行性分析结论 4 3 系统需求分析 4 3.1 点餐用户的需求分析 4 3.2 商家的需求分析 6 4 概要设计 8 4.1 系统结构设计 8 4.2 功能模块设计 9 4.2.1 用

    2024年02月03日
    浏览(17)
  • 【STM32单片机】贪吃蛇游戏设计

    系统运行后,TFTLCD触摸屏显示游戏界面,通过按键任意键进入游戏界面, 然后通过按键KEY_UP、KEY1、KEY2和KEY0键控住上下左右方向。 每当蛇吃到3个食物,速度就会提升一个等级,并且显示得分和等级,最高位5级。当游戏结束后可按任意键重新回到主界面开始。 项目所需要的

    2024年02月11日
    浏览(14)
  • 小游戏实战丨基于PyGame的贪吃蛇小游戏

    本期内容:基于pygame的贪吃蛇小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700188 实验环境 python3.11及以上 pycharm pygame 安装pygame的命令: pygame是一个开源的Python模块,专门用于编写电子游戏。它使用简单、功能强大,因此非常适合初学者入门。pygame的主要特点包括图

    2024年02月03日
    浏览(16)
  • 基于FPGA的均匀白噪声的产生

    均匀白噪声的产生我们使用m序列来生成并且把数据导出到matlab中观察其直方图。 我们使用6个本原多项式,从而扩展14阶m序列的重复周期,原来是2^14-1,现在在原来的基础上周期扩大6倍。 好,均匀噪声就生成了,不过我们最好还是导入到matlab中看看其结果 好!设计实现了!

    2024年02月11日
    浏览(15)
  • 基于C#制作一个贪吃蛇小游戏

    基于C#制作一个贪吃蛇小游戏,简单耐玩,操作简单。

    2024年02月08日
    浏览(19)
  • 游戏开发丨基于Pygame的AI版贪吃蛇小游戏

    本期内容 基于pygame的AI版贪吃蛇小游戏 所需环境 python pycharm或anaconda pygame 下载地址 https://download.csdn.net/download/m0_68111267/88789665 本游戏使用Pygame模块开发,不需要玩家操纵贪吃蛇,贪吃蛇会自动吃掉屏幕上随机出现的食物,每吃一个食物贪吃蛇长度增加一节。如果贪吃蛇撞到

    2024年02月20日
    浏览(22)
  • FPGA设计中锁存器产生、避免与消除

      锁存器的产生主要有以下两种情况:(1)组合逻辑中使用保持状态;(2)组合逻辑中的if-else语句或case语句未列出所有可能性;   对于组合逻辑中,如果使用if-else语句,未补全else语句,则默认在其他条件下,数据均保持为原来的状态,那么也会产生锁存器。   而

    2024年02月03日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包