FPGA_Verilog学习之旅(3)---VGA贪吃蛇游戏
文章目录
- 前言
- 一、整体设计流程
- 二、RTL Viewer
- 三、主要模块功能
- 1、按键控制模块
- 2、VGA驱动模块
- 3、游戏开始模块
- 4、难度选择模块
- 5、游戏进行模块
- 6、游戏结束模块
- 四、实况展示
- 总结
- 源码下载链接
前言
上一篇文章主要介绍了VGA一些基本的东西,然后想用VGA做一个贪吃蛇游戏,本来以为会开发一段时间,没想到两天就写完了,这篇文章就简单谈一谈VGA贪吃蛇的设计思路,由于代码过多,这篇就仅在结尾处贴出顶层模块代码
---------此篇文章主要内容:FPGA-VGA贪吃蛇游戏设计思路
一、整体设计流程
二、RTL Viewer
三、主要模块功能
1、按键控制模块
负责在四种游戏状态(游戏开始、难度选择、游戏进行、游戏结束)的切换,根据不同游戏状态下-按键的输入,输出不同的游戏状态信号(状态机控制)
其中,在游戏进行中时:
- 贪吃蛇处于左、右行进时—上、下按键有效
- 贪吃蛇处于上、下行进时—左、右按键有效
2、VGA驱动模块
根据按键控制模块输出的四种游戏状态,切换不同显示画面
3、游戏开始模块
负责显示一个170*170像素贪吃蛇图片,事先存放到片内ROM中,使用时进行输出
4、难度选择模块
负责选择游戏难易程度,根据上、下按键的输入,输出不同的速度值信号
5、游戏进行模块
- 接收难度选择模块输出的速度值,从而设置贪吃蛇的移动速度
- 控制贪吃蛇行进方向
- 控制蛇身长度增长,每吃一个苹果加一节蛇身,蛇头加蛇身最长可达25节
- 随机苹果生成,一旦苹果被吃,随机生成一个新苹果(使用一个加法器产生随机数)
- 一旦发生撞墙、撞到自身,立即结束游戏,并把游戏分数传送到游戏结束模块
6、游戏结束模块
接收游戏进行模块输出的游戏分数,显示游戏结束和游戏分数
四、实况展示
总结
从开始构思框架、写流程、敲代码、实板测试、调试BUG等等,来来回回折腾了整整两天,眼睛都盯电脑盯花了,不过结果还不错
由于代码太多了,这里就仅贴一个顶层模块的代码
附:顶层模块源码
/* -----VGA贪吃蛇游戏----- */module Top_VGA_Game_Snake(input sys_clk_50, // 全局时钟信号input sys_rst_n, // 复位信号(低有效)input [ 3:0] key, // 按键输入:上-下-左-右<--->key[0]-key[1]-key[2]-key[3] output [23:0] vga_rgb, // RGB888红绿蓝三原色输出output vga_hs, // 行同步信号output vga_vs, // 场同步信号output vga_clk_25, // VGA时钟output vga_blank, // 场消隐信号output vga_sync // 同步控制信号输入
);// 连线型变量
wire locked_w;
wire rst_n_w;
wire vga_clk_25_w;
wire [ 9:0] pixel_xpos_w;
wire [ 9:0] pixel_ypos_w;
wire [23:0] data_start_w;
wire [23:0] data_speed_w;
wire [23:0] data_play_w;
wire [23:0] data_end_w;
wire [ 3:0] state_m_w;
wire speed_m_w;
wire [ 3:0] move_d_w;
wire game_over_w;
wire [ 5:0] game_score_w; /* -----main code----- */assign vga_clk_25 = vga_clk_25_w;
// 待PLL输出稳定之后,停止复位
assign rst_n_w = locked_w & sys_rst_n;
// 同步控制信号输入(这里不需要,可直接接低电平)
assign vga_sync = 1'b0;// PLL_IP核例化模块,进行时钟分频,输出25MHz
pll_clk u_pll_clk(.areset (~sys_rst_n ), // 由于锁相环为高电平复位,故取反.inclk0 (sys_clk_50 ),.c0 (vga_clk_25_w),.locked (locked_w )
);// VGA驱动模块
VGA_Driver u_VGA_Driver(.vga_clk_25 (vga_clk_25_w),.rst_n (rst_n_w ),.state_m (state_m_w ),.data_start (data_start_w), // 接收当前游戏状态.data_speed (data_speed_w), // 接收设定游戏速度.data_play (data_play_w ), .data_end (data_end_w ),.vga_rgb (vga_rgb ),.vga_hs (vga_hs ),.vga_vs (vga_vs ),.vga_blank (vga_blank ),.pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w)
);// 按键控制模块
Key_Ctrl u_Key_Ctrl( .clk (sys_clk_50 ), .rst_n (rst_n_w ),.key (key ), .game_over (game_over_w), // 接收游戏结束信号.state_m (state_m_w ), // 输出当前游戏状态.move_d (move_d_w ), // 输出贪吃蛇移动方向.speed_m (speed_m_w ) // 输出设置的游戏速度
);// 游戏开始界面
Game_Start u_Game_Start( .vga_clk_25 (vga_clk_25_w), .rst_n (rst_n_w ), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .pixel_data (data_start_w)
);// 速度选择界面
Game_Speed u_Game_Speed( .vga_clk_25 (vga_clk_25_w), .rst_n (rst_n_w ), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .pixel_data (data_speed_w) // 输出游戏速度设置
);// 游戏进行界面
Game_Play u_Game_Play( .vga_clk_25 (vga_clk_25_w), .rst_n (rst_n_w ), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w),.state_m (state_m_w ), // 接收当前游戏状态.speed_m (speed_m_w ), // 接收设置的游戏速度.move_dirt (move_d_w ), // 接收贪吃蛇移动方向.game_over (game_over_w ), // 输出游戏结束信号.game_score (game_score_w), // 输出游戏得分.pixel_data (data_play_w )
);// 游戏结束界面
Game_End u_Game_End( .vga_clk_25 (vga_clk_25_w), .rst_n (rst_n_w ), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .game_score (game_score_w), // 接收游戏得分.pixel_data (data_end_w )
);endmodule
源码下载链接
https://download.csdn.net/download/hxt691083776/13102976?spm=1001.2014.3001.5503
FPGA_Verilog学习之旅(3)---VGA贪吃蛇游戏相关推荐
- Java学习(8):贪吃蛇游戏
根据视频编写的贪吃蛇游戏 主方法 public class Start {public static void main(String[] args) {new Yard().launch();} } ...
- 基于FPGA的VGA显示对贪吃蛇游戏的设计
基于FPGA的VGA显示对贪吃蛇游戏的设计 摘要 目前,电子数码产品已经进入了人生活的方方面面,而大多数电子产品都依靠显示屏来传递信息,由此可见用电路对显示屏进行控制的研究有很大的实用价值和市场需求. ...
- python设计贪吃蛇游戏论文_用Python写一个贪吃蛇AI,让程序自己玩游戏
前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了. 问题的关键在于,图片中的贪吃蛇真的很贪吃XD, ...
- Python制作当年第一款手机游戏-贪吃蛇游戏(练习)
前言: 文章利用Python pygame做一个贪吃蛇的小游戏而且讲清楚每一段代码是用来干嘛的. 据说是贪吃蛇游戏是1976年,Gremlin公司推出的经典街机游戏,那我们今天用Python制作的这个 ...
- java贪吃蛇不能回头,儿时回忆!泪流满面,Java 实现贪吃蛇游戏的示例(附代码)...
image.png image.png java实现贪吃蛇游戏需要创建一个桌面窗口出来,此时就需要使用java中的swing控件 创建一个新窗口 JFrame frame = new JFrame(& ...
- 手把手教你使用 Python 制作贪吃蛇游戏
贪吃蛇游戏是有史以来最受欢迎的街机游戏之一.在这个游戏中,玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果.在学习 Python 或 Pygame 时,可以将创建蛇游戏视为一项挑战.这是每个 ...
- 利用python实现简易版的贪吃蛇游戏(面向python小白)
前言 这篇文章主要给大家介绍了关于如何利用python实现简易版的贪吃蛇游戏的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学 ...
- python小游戏代码大全-python贪吃蛇游戏代码
本文实例为大家分享了python贪吃蛇游戏的具体代码,供大家参考,具体内容如下 贪吃蛇游戏截图: 首先安装pygame,可以使用pip安装pygame: pip install pygame 运行以下 ...
- python写游戏脚本-python实现简单贪吃蛇游戏
本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 代码: from turtle import * from random import randrange from ...
最新文章
- javascript 未结束字符串
- 为什么要设置java环境变量_为什么要配置JDK环境变量?
- 一些杂七杂八的前端知识1
- mysql主键设置after_mysql如何改变主键属性
- 洛谷P2486 [SDOI2011]染色(树链剖分+线段树判断边界)
- SpringCloud学习笔记019---Windows 平台安装 MongoDB
- 买个社区团购小程序多少钱呢?微信社区团购小程序怎么做
- AccessibilityService+OpenCV实现微信7.0.0抢红包插件
- ANALOG ADP5092 微瓦级能量采集模块
- c语言实验报告4结构体,c语言实验报告结构体.doc
- C++ MFC控件重影-编辑框重影
- 在华为工作十年的感悟
- 白云市场高仿包值不值得买?
- stm32 火灾自动报警及联动控制源码_火灾自动报警系统,消防联动控制系统,三分钟让你整体了解...
- 你知道什么是真正的勇敢?
- 同样是开源,微软为何选择了 Chromium,而不是 Firefox?
- slurm学习笔记(一)
- piggy bank 完全背包
- STM32系列单片机USB下载程序(ISP编程)
- 使用socket,实现app直播源代码用户评论功能
热门文章
- CMS系统的页面静态化流程
- python3编程小车_控制小车
- 多人连线的枪战游戏-补充
- a59s刷机包卡刷 oppo_OPPO A59s root教程_OPPO A59s卡刷获取root权限的方法
- HHDBCS及HHDESK的资源加密功能
- 教程:如何成为日入斗金NFT数字艺术创作家
- 计算机通信中应用的调制解调与无线电通信,计算机通讯中的一对搭档——调制解调器和通讯软件...
- 共享打印机找不到网络路径的解决方法
- win10新建虚拟机网络配置未连接服务器,Win10系统VMWare虚拟机无法连接网络怎么办?...
- 机器学习之梯度下降法(GD)、随机梯度下降法(SGD)和随机平均梯度下降法(SAGD)