贪食蛇VGA游戏CX401(兼容AX301)开发板VHDL QuartusII
名称:贪食蛇游戏 VHDL QuartusII
软件: Quartus II
语言:VHDL
代码功能: 实现一款在 VGA 显示器上运行的“贪食蛇”游戏,支持按键控制方向与速度切换,包含食物生成、吃食增长、撞墙/自撞判定、得分显示与死亡闪烁效果,使用数码管显示得分,并通过 LED/蜂鸣器提供简单反馈。
上板调试:
详细功能设计
(1)蛇的移动控制
方向输入:玩家通过按键(如上、下、左、右)控制蛇的移动方向。每次按下方向键,蛇的移动方向会立即更新,并在游戏画面中实时反映。
实时响应:确保按键输入的即时性和准确性,避免延迟或误操作影响游戏体验。
(2)游戏重置
重新开始:按下“重置”键后,游戏状态恢复到初始状态(蛇的长度重置为1,分数清零,食物重新生成)。
清除状态:重置功能会清除当前的游戏进度和状态,为新一轮游戏做好准备。
(3)难度调整
难度切换:按下“难度调整”键后,玩家可以选择不同的游戏难度(如低速、中速、高速)。难度调整会改变蛇的移动速度,从而影响游戏挑战性。
动态更新:难度调整后,游戏参数(如蛇速、食物生成频率)会立即更新,并在游戏中生效。
(4)碰撞检测与错误提示
碰撞检测:实时检测蛇头是否与墙壁或自身身体发生碰撞。如果检测到碰撞,游戏进入结束状态。
错误提示:当蛇发生碰撞时,蜂鸣器会发出提示音,同时LED灯闪烁,提醒玩家游戏结束。
(5)成功提示
食物获取:当蛇头接触到食物时,蛇身长度增加,分数更新,并在游戏画面中显示新的食物位置。
代码实现思路: 整体采用模块化设计,将游戏逻辑、显示控制、按键去抖、得分显示及随机食物生成等功能拆分为独立模块,模块间通过信号总线交互。主控实体 snake_game 负责时钟分频、按键去抖和模块实例化;snake 模块维护蛇身位置数组并实现移动、方向转换、碰撞检测与增长逻辑;snake_grow 采用伪随机数生成食物坐标并在检测到吃到食物时输出增长脉冲;vga_ctrl 将逻辑网格映射到像素坐标并生成 VGA 时序与颜色输出;display 与 BCD 模块负责将分数转换并驱动数码管;game_state_signal 管理游戏状态机(开始、游戏、死亡、重启)并生成死亡闪烁与重启脉冲。全局时序以 25 MHz 的 VGA 时钟为基准,游戏移动速率通过内部计数器与速度模式控制实现,可通过按键循环改变速度。
实现细节要点(摘要):
·采用固定网格坐标(X: 1…38, Y:1…28),蛇和食物位置以格为单位存储(6-bit/5-bit)。
·蛇身用定长数组表示(最多16段),使用 is_exist 位向量表示有效段数,增长通过设置对应 is_exist 位并递增块数实现。
·方向控制保护:在移动更新周期中,只允许与当前方向不直接相反的方向变换,避免瞬间掉头自撞。
·食物位置由线性递增伪随机数与简单边界校正产生,检测相同坐标则视为吃到并触发增长。
·VGA 显示层将每个逻辑格映射为 16x16 像素块(由 x_coord/y_coord 的高位决定格坐标,低位用于块内像素掩码),并在不同区域绘制墙体、蛇头/蛇体与食物。
·游戏状态机在死亡后产生多次闪烁再进入重启计时,重启期间短脉冲控制外设复位及显示重置。
代码结构:
·snake_game.vhd:顶层实体,实例化各子模块,处理按键、时钟分频及外设信号分配。
·key_jitter.vhd:按键去抖模块,检测按键上升沿并生成去抖后的脉冲信号。
·snake.vhd:核心游戏逻辑,维护蛇身数组、移动与转向逻辑、碰撞检测与增长处理。
·Snake_grow.vhd:食物位置与增长控制,包含伪随机数生成与吃食检测。
·VGA_ctrl.vhd:VGA 驱动与像素着色,把逻辑格映射到像素并生成 hsync/vsync 与 RGB 输出。
·display.vhd:数码管显示控制,负责得分计数、位选与段选驱动。
·BCD.vhd:二进制转 BCD(百/十/个位)用于数码管显示分离位数据。
·Game_State_Signal.vhd:管理游戏状态机(开始、进行、死亡、重启)与死亡闪烁/重启脉冲。
·其它(项目文件): .qsf/.qpf 等 Quartus 工程文件用于约束与引脚映射。
1、工程文件
2、程序文件
3、程序编译
4、RTL图
5、管脚分配
6、仿真图
Testbench
仿真图
顶层仿真图
Controller模块
Snake_entity
Snake_growth
Display
VGA_out
代码下载:
5725