FPGA实现 贪吃蛇

article/2025/3/10 21:17:35

一. 硬件

  1. 黑金AX4010
  2. AN430显示屏(480*272)
  3. 蓝牙模块
  4. 安卓手机

采用app通过蓝牙模块来操作蛇的移动情况

二. 数据的存储

reg[18:0]	Snake[0:7];		//蛇 18:10 x 9:1 y 	0 :flag 是否是蛇身
reg[17:0]	Food;			//	食物

三. 蛇的移动的方向

  • 通过上下左右来控制蛇移动的方向
  • 上下左右的命令是app通过蓝牙发送过来的
//方向
always@(posedge clk or negedge rst)
beginif(rst == 1'b0)direct <= 2'b00;else if(up == 1'b1 && direct != 2'b01)direct <= 2'b00;else if(down == 1'b1 && direct != 2'b00)direct <= 2'b01;else if(left == 1'b1 && direct != 2'b11)direct <= 2'b10;else if(right == 1'b1 && direct != 2'b10)direct <= 2'b11;elsedirect <= direct;
end

四. 蛇的刷新

  • 通过观察移动情况可以知道,蛇的当前节下一时刻的位置是前一节的当前位置。
  • 蛇头除外,蛇头的位置需要根据方向来判断,然后计算
    于是就有了如下代码
//刷新蛇 18:10 x   9:1  yelse if(speed >= SPEED)begincase(direct)2'b00:Snake[0][9:1] <= Snake[0][9:1] - 'd25;2'b01:Snake[0][9:1] <= Snake[0][9:1] + 'd25;2'b10:Snake[0][18:10] <= Snake[0][18:10] - 'd25;2'b11:Snake[0][18:10] <= Snake[0][18:10] + 'd25;endcasefor(i = 1;i<= sub_index ;i=i+1)Snake[i] <= Snake[i-1];end

五. 食物的刷新

  • 当吃到食物之后,就刷新食物的位置,这里食物随机的数据不是很好,周期性重复,但不影响游戏的运行
//生成食物
always@(posedge clk or negedge rst)
beginif(rst == 1'b0)Food <= {9'd40,9'd50};else if(eated == 1'b1)Food <= {1'b0,Food[8]^Food[7]^Food[6]^Food[5],Food[7:1],1'b0,Food[16:10],Food[9]^Food[17]};
end

六. 蛇和食物的显示

  • 这里采用极为简单的方式来显示,通过几个if else块来判断是否有显示
always@(posedge clk)
begin		if(cur_x >= Snake[0][18:10] && cur_x < Snake[0][18:10] + 'd25 &&  cur_y >= Snake[0][9:1] && cur_y < Snake[0][9:1]+'d25 && cur_y >= Snake[0][9:1] && cur_y < Snake[0][9:1]+'d25 && Snake[0][0] == 1'b1)lcd_data_out = 24'hABCDEF;else if(cur_x >= Snake[1][18:10] && cur_x < Snake[1][18:10] + 'd25 &&  cur_y >= Snake[1][9:1] && cur_y < Snake[1][9:1]+'d25 && cur_y >= Snake[1][9:1] && cur_y < Snake[1][9:1]+'d25 && Snake[1][0] == 1'b1)lcd_data_out = 24'hFACDEB;else if(cur_x >= Snake[2][18:10] && cur_x < Snake[2][18:10] + 'd25 &&  cur_y >= Snake[2][9:1] && cur_y < Snake[2][9:1]+'d25 && cur_y >= Snake[2][9:1] && cur_y < Snake[2][9:1]+'d25 && Snake[2][0] == 1'b1)lcd_data_out = 24'hFACDEB;else if(cur_x >= Snake[3][18:10] && cur_x < Snake[3][18:10] + 'd25 &&  cur_y >= Snake[3][9:1] && cur_y < Snake[3][9:1]+'d25 && cur_y >= Snake[3][9:1] && cur_y < Snake[3][9:1]+'d25 && Snake[3][0] == 1'b1)lcd_data_out = 24'hFACDEB;else if(cur_x >= Snake[4][18:10] && cur_x < Snake[4][18:10] + 'd25 &&  cur_y >= Snake[4][9:1] && cur_y < Snake[4][9:1]+'d25 && cur_y >= Snake[4][9:1] && cur_y < Snake[4][9:1]+'d25 && Snake[4][0] == 1'b1)lcd_data_out = 24'hFACDEB;else if(cur_x >= Snake[5][18:10] && cur_x < Snake[5][18:10] + 'd25 &&  cur_y >= Snake[5][9:1] && cur_y < Snake[5][9:1]+'d25 && cur_y >= Snake[5][9:1] && cur_y < Snake[5][9:1]+'d25 && Snake[5][0] == 1'b1)lcd_data_out = 24'hFACDEB;else if(cur_x >= Snake[6][18:10] && cur_x < Snake[6][18:10] + 'd25 &&  cur_y >= Snake[6][9:1] && cur_y < Snake[6][9:1]+'d25 && cur_y >= Snake[6][9:1] && cur_y < Snake[6][9:1]+'d25 && Snake[6][0] == 1'b1)lcd_data_out = 24'hFACDEB;else if(cur_x >= Food[17:9] && cur_x < Food[17:9] + 'd25 &&  cur_y >= Food[8:0] && cur_y < Food[8:0]+'d25 && cur_y >= Food[8:0] && cur_y < Food[8:0]+'d25)lcd_data_out = 24'hFACDEB;elselcd_data_out = 24'hffffff;
end

效果图如下 下载链接
关注微信公众号 FPGA之旅 回复 FPGA贪吃蛇免费获取
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/jCeOuxNj.shtml

相关文章

黑金全部开发板资料(FPGA+ZYNQ)分享

黑金开发板 能找到的所有黑金开发板的资料&#xff0c;足够学习使用。 ALTERA CYCLONE 10 黑金开发板ZYNQ7020_2019 黑金zynq7015_2017 黑金zynq7010_2017 …

FPAG—UART串口实现与解析-黑金fpga资料解析

UART实现-黑金fpga开发板案例解析 uart 异步串口通讯 无需时钟线&#xff0c;俩根线一跟复制发数据一根负责收数据。 具体的时序如下图1&#xff1a; 图1&#xff1a;UART时序图 可以看到 当数据线由高位变为地位时&#xff0c;即遇到一个下降沿时刻&#xff0c;表示开始这一…

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十四:SD卡模块

驱动SD卡是件容易让人抓狂的事情,驱动SD卡好比SDRAM执行页读写,SD卡虽然不及SDRAM的麻烦要求(时序参数),但是驱动过程却有猥琐操作。除此此外,描述语言只要稍微比较一下C语言,描述语言一定会泪流满面,因为嵌套循环,嵌套判断,或者嵌套函数等都是它的痛。. 史莱姆模块是…

黑金AX7Z100 FPGA开发板移植LWIP库(二)PL端

前言 上一篇博文中实验了PS端移植LwIP库的演示程序。本篇接下来基于Vivado17.4整理比较详细的PL端移植过程。 一、Vivado 工程建立 1、新建一个空工程&#xff0c;名称为net_lwip_pl。 2、FPGA芯片选择xc7z100ffg900-2。 二、配置PS&PL系统硬件 1、工程建好以后&…

【FPGA从0开始系列】黑金EP4CE10F17C8开发板按键实验(二)

项目目录 1.实验目的2.准备阶段3.实验原理4.编写Verilog HDL程序5.配置引脚6.查看和分析RTL7.下载程序8.总结 1.实验目的 查阅AX4010黑金系列用户手册&#xff0c;编写按键程序&#xff0c;实验简单的按键控制LED的功能&#xff0c;同时学习 Quartus RTL Viewer 的使用 2.准备…

汉诺塔(C语言实现)

目录 汉诺塔的游戏规则&#xff1a; 当A只有一个环的时候&#xff1a; 当A只有两个环的时候&#xff1a; 当A只有三个环的时候&#xff1a; 思路&#xff1a; 当n1时&#xff1a; 当n2时&#xff1a; 当n3时&#xff1a; 当n4时&#xff1a; 见代码 运行截图 汉诺塔的游戏…

【C语言】汉诺塔问题

汉诺塔是一个非常经典的问题&#xff0c;其背后是一个传说故事&#xff1a; 在世界中心贝拿勒斯&#xff08;在印度北部&#xff09;的圣庙里&#xff0c;一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候&#xff0c;在其中一根针上从下到上地穿好了由大到小的6…

汉诺塔C语言步骤解析

汉诺塔问题在C语言中一般采用递归法来写&#xff0c;假设有A、B、C三根棒&#xff0c;A棒放着若干个圆盘&#xff0c;将其移动到C棒上&#xff0c;中途可在B棒中暂时放置圆盘。 分析&#xff1a; (1) 如果只有一个圆盘&#xff0c;则把该圆盘从A棒移动到C棒 (2) 如果圆盘数量…

汉诺塔递归的c语言实现(递归)

对于递归来讲, 汉诺塔实际是经典到不能再经典的例子了, 每个数据结构的教材对会提到. 但是到最后只给出一段类似下面的一段代码: #include<stdio.h>void move(int n,char a,char b,char c) {if(n1)printf("\t%c->%c\n",a,c); //当n只有1个的时候直接从…

C语言编程实现汉诺塔问题

C语言编程实现汉诺塔问题 1.首先解释一下&#xff0c;汉诺塔问题&#xff1a;古代梵塔内有A、B、C3个座&#xff0c;开始时A座上面有64个盘子&#xff0c;盘子大小不等&#xff0c;大的在下&#xff0c;小的在上。一个老和尚想把64个盘子从A移到C&#xff0c;规定移动过程中3个…

汉诺塔C语言实现(纯代码)

a、b、c三座塔&#xff0c;将n个从小到大&#xff08;自上而下&#xff09;的圆盘从a移动到c&#xff0c;移动期间小圆盘必须在大圆盘上面&#xff0c;问移动步骤。 #include<stdio.h>int main() {void hanoi(int n,char one,char two,char three);int m;printf("…

【汉诺塔】C语言递归解法,深层次地带你理解汉诺塔公式

目录 汉诺塔公式 汉诺塔问题在数学层面的公式&#xff1a; C语言递归公式 两层汉诺塔 三层汉诺塔 递归问题可谓是学习C语言以来的第一个拦路虎&#xff0c;而汉诺塔问题更是递归中对新手很不友好的一道经典题&#xff0c;我们接下来从公式角度和更深层的图解角度来让你理解…

汉诺塔c语言代码实现

汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重…

【C语言】汉诺塔超详解(脑把脑解释)

文章目录 一、前言二、准备工作关于递归函数 三、汉诺塔步数计算详解&#xff1a;函数的设计符合递归函数的两个基本条件&#xff1a; 四、汉诺塔步骤打印&#xff08;绝对详细&#xff0c;仔细看就能看懂 &#xff09;铺垫换个思路&#xff1a;柱子竟然是可以移动的&#xff0…

汉诺塔C语言实现

汉诺塔背景 文章目录 汉诺塔背景前言一、什么是汉诺塔&#xff1f;二、汉诺塔问题的背景三、汉诺塔问题的代码实现1.代码原理2.代码实现 前言 汉诺塔问题&#xff0c;是心理学实验研究常用的任务之一。该问题的主要材料包括三根高度相同的柱子和一些大小及颜色不同的圆盘&…

C语言汉诺塔详解

问题概述&#xff1a;在A柱子上从下往上按照大小顺序摞着N片黄金圆盘。要求把圆盘从下面开始按大小顺序重新摆放在另一根(B or C)柱子上。并且规定&#xff0c;在小圆盘上不能放大圆盘&#xff0c;在三根柱子之间一次只能移动一个圆盘。 如图所示&#xff1a; (ps&#xff1a;…

C语言实现汉诺塔详细步骤(递归与非递归)及代码

前言 C语言汉诺塔问题是一个经典的问题&#xff0c;在学习编程的初学者中非常流行。它涉及到了递归的思想&#xff0c;能够帮助我们理解递归的基本原理。 首先&#xff0c;我们来了解一下汉诺塔的问题。汉诺塔问题是指&#xff1a;有三根柱子A,B,C&#xff0c;A柱子上有n个盘…

汉诺塔(C语言)

文章目录 一、什么是汉诺塔问题&#xff1f; 二、实现步骤 三、代码实现 四、代码分析 一、什么是汉诺塔问题&#xff1f; 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金…

图文详解汉诺塔(附C语言实现代码)

关注、星标公众号&#xff0c;直达精彩内容 来源&#xff1a;http://a.nxw.so/1iDyQD 一、前言 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根…

C语言 - 汉诺塔详解(超详细)

文章目录 一、前言二、玩游戏三、汉诺塔打印步数四、汉诺塔打印步骤 一、前言 一、汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下…