零知开源——STM32F407VET6驱动Flappy Bird游戏教程

article/2025/7/29 20:46:01

简介

本教程使用STM32F407VET6零知增强板驱动3.5寸TFT触摸屏实现经典Flappy Bird游戏。通过触摸屏控制小鸟跳跃,躲避障碍物柱体,挑战最高分。项目涉及STM32底层驱动、图形库移植、触摸控制和游戏逻辑设计。

目录

简介

一、硬件准备

二、软件架构

三、代码解析

四、游戏机制

五、移植要点

六、常见问题解决

七、完整代码 & 资源——视频演示效果 


一、硬件准备

1.核心硬件
  • 零知增强板(主控:STM32F407VET6)

  • 3.5寸TFT直插扩展板(含ILI9328控制器 + XPT2046触摸芯片)

  • 直插连接说明:扩展板直接插入零知增强板,引脚自动对齐无需额外接线

2.关键芯片
  • W25Q64JVSIG:64MB SPI Flash(存储游戏素材)

  • XPT2046:电阻触摸屏控制器

3.硬件连接图

4.连接实物图 

 二、软件架构

核心库:
1. Adafruit_GFX        // 图形核心库
2. Adafruit_TFTLCD_16bit_STM32 // STM32专用TFT驱动
3. XPT2046_Touchscreen // 触摸驱动

游戏资源:
flappy_title.h    // 游戏标题图片
bird05.h          // 小鸟位图
pillar01.h        // 柱子位图
bottom_deco.h     // 地面装饰

 三、代码解析

1. 初始化设置 
void setup() {Serial.begin(9600);myGLCD.begin(0x9486); // 指定ILI9328控制器ts.begin();           // 初始化触摸// 校准触摸屏(示例中省略具体校准过程)myGLCD.fillScreen(WHITE);myGLCD.setTextSize(2);myGLCD.println("Calibration");// 游戏变量初始化highscore = 0;myGLCD.setRotation(1);  // 屏幕方向设置initiateGame();         // 启动游戏
}

 2. 游戏主循环
void loop() {// 触摸检测(控制小鸟跳跃)if (ts.touched() && !screenPressed) {p = ts.getPoint();x = p.y;  // 坐标转换(根据屏幕旋转)y = TFTWIDTH - p.x;fallRateInt = -10; // 负值使小鸟上升}// 游戏物理引擎(每50ms更新)if (millis()-prev_millis < 50) return;// 小鸟下落计算fallRate = tick*tick; yB += int(fallRate/15); // 下落速度随时间增加// 碰撞检测if (xP在柱子范围内 && (小鸟撞到柱子)) gameOver();// 绘制游戏元素drawPilars(xP, yP); // 绘制移动的柱子drawBird(yB);       // 绘制小鸟drawScore();        // 显示分数
}

3. 关键函数 

drawBird(int y): 

void drawBird(int y) {// 使用位图绘制小鸟myGLCD.drawBitmap(BIRD_X, y, BIRD_BMP_X, BIRD_BMP_Y, bird);// 清除小鸟移动轨迹if (fallRateInt > 0) myGLCD.fillRect(BIRD_X, y-fallRateInt, BIRD_BMP_X, fallRateInt, BIRD_BG);
}

drawPilars(int x, int y): 

void drawPilars(int x, int y) {// 绘制上下柱子myGLCD.drawBitmap(x, y-PILLAR_END_BMP_Y, PILLAR_END_BMP_X, PILLAR_END_BMP_Y, pillar_end);myGLCD.drawBitmap(x, y+PILLAR_GAP, PILLAR_END_BMP_X, PILLAR_END_BMP_Y, pillar_end);// 柱子主体(垂直填充)for (int i=0; i<PILLAR_BMP_X; i++) {myGLCD.drawFastVLine(x+i, 0, (y-PILLAR_END_BMP_Y), pillar[i]);myGLCD.drawFastVLine(x+i, y+PILLAR_GAP, (BOTTOM_AREA_Y-y-PILLAR_GAP), pillar[i]);}
}

gameOver(): 

void gameOver() {// 屏幕闪烁效果for (int i=0; i<10; i++) {myGLCD.invertDisplay(i&1);delay(100);}// 更新最高分if (score > highscore) highscore = score;initiateGame(); // 重启游戏
}

 四、游戏机制

物理系统

小鸟受重力影响:fallRate = tick²(下落速度随时间平方增加)

触摸时赋予上升速度:fallRateInt = -10

 难度递增
if ((score - lastSpeedUpScore) == 5) {movingRate++; // 柱子移动速度增加level++;
}
碰撞检测
// 边界检测
if (yB > (BOTTOM_AREA_Y-BIRD_BMP_Y) || yB < 0) gameOver();// 柱子碰撞
if (xP在柱子X范围内 && (小鸟Y位置在柱子间隙外)) gameOver();

五、移植要点

屏幕适配
  • 修改myGLCD.begin(0x9486)中的控制器ID

  • 调整setRotation()匹配硬件安装方向

性能优化
  • 使用drawFastVLine替代位图绘制柱子主体

  • 局部刷新(只重绘移动区域)

 触摸校准
// 示例中的简化校准流程
myGLCD.fillRect(TFTWIDTH-10, 0, 10, 10, GREEN); // 提示点击右上角
myGLCD.fillRect(0, TFTHEIGHT-10, 10, 10, GREEN); // 提示点击左下角

六、常见问题解决

屏幕白屏
  • 检查控制器ID(使用tft.readID()获取实际值)

  • 确认3.3V/5V电源跳线帽设置

触摸不准确
  • setup()中增加触摸校准代码

  • 调整坐标转换公式(根据屏幕旋转方向)

游戏卡顿
  • 降低TIME_UNIT值(游戏刷新间隔)

  • 优化drawPilars()中的循环逻辑

 七、完整代码 & 资源

  • 项目下载地址

https://pan.baidu.com/s/1Ip-HDgoOaPtJcOVtbwfZyA?pwd=cpvf 提取码: cpvf 

  • 素材提取工具

https://sourceforge.net/projects/image2code/

  • 视频演示效果 

STM32F407VET6驱动Flappy Bird游戏


通过本教程,您已掌握STM32F4的图形显示、触摸交互和游戏逻辑实现。可尝试扩展功能如添加音效、设计更多关卡等。遇到问题欢迎在零知论坛提问:www.lingzhilab.com/http://www.lingzhilab.com/ 

✔✔

零知开源是一个真正属于国人自己的开源软硬件平台,在开发效率以及上手难度上超越了Arduino平台。
零知开源在软件方面提供了完整的学习教程和丰富示例代码,让不懂程序的工程师也能非常轻而易举的搭建电路来创作产品,测试产品。快来动手试试吧! 


http://www.hkcw.cn/article/wTBXPEIsyE.shtml

相关文章

超高频RFID读写器天线分类及应用场景

超高频RFID(Radio Frequency Identification,射频识别)技术作为一种先进的自动识别技术,已经在多个领域得到了广泛应用。作为RFID系统的重要组成部分,超高频RFID读写器天线不仅影响着系统的读取距离、读取速度和准确性,还决定了RFID系统的适应性和灵活性。本文将详细介绍…

第J2周:ResNet50V2算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 batch_size32&#xff1a;每次训练取32张图像组成一个 batch img_size(224, 224)&#xff1a;图像输入大小匹配 ResNet50 的输入要求 epochs10&#xff1a;训练…

界面控件DevExpress WinForms中文教程:Banded Grid View - 如何固定Bands?

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

安全帽检测

通过百度网盘分享的文件&#xff1a;工地项目 链接&#xff1a;https://pan.baidu.com/s/1pVxriAKKodwrcf_4Ou-OZg?pwdn2rv 提取码&#xff1a;n2rv --来自百度网盘超级会员V2的分享 YOLOv5训练自定义模型 YOLOv5需要安装pytorch、cuda、cudnn&#xff0c;可以参考我的环…

晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册

晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册 晨控CK-UR08系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题&#xff1a;围绕…

windows无法安装到这个磁盘,选中的磁盘采用gpt分区仪式

解决办法&#xff1a; 我才用的是一个网友分享的微软官方解决办法&#xff0c;成功了&#xff0c;但是不知道会不会i有什么影响。将所有分区删掉&#xff0c;这时磁盘变成为分配的空间。我个人是两块固态&#xff0c;一块m.2&#xff0c;一块sata&#xff1b;所以我直接将500g…

JVM内存模型

JVM内存模型 说明&#xff1a; 1、JVM由装载子系统、运行时数据区&#xff08;jvm内存模型&#xff09;、字节码执行引擎&#xff1b; 2、运行时数据区包含堆、元空间、栈、本地方法栈和程序计数器&#xff1b; 3、堆、元空间是线程共享&#xff1b;方法栈、程序计数器是线程…

【Python】第一弹:对 Python 的认知

目录 一、Python 的背景 1.1. Python 的由来 1.2 Python 的作用 1.3 Python 的优缺点 1.4 Python 的开发工具 一、Python 的背景 1.1. Python 的由来 Python 由荷兰数学和计算机科学研究学会的吉多・范罗苏姆 &#xff08;Guido van Rossum&#xff09;在 20 世纪 80 年代…

动态规划基础

动态规划是一种算法思想&#xff0c;关键是理解思想和什么时候用。 算法思想 动态规划用于解决多阶段决策最优化问题&#xff0c;这类问题类似递推。 1.阶段 将问题分为多个阶段&#xff0c;每个阶段之间有联系&#xff0c;即可递推。一般可按问题求解次序或问题的递归性质划…

WEB3——什么是ABI

怎么获得ABI&#xff1f; 在编译完合约后&#xff0c;可以在左边下面点击复制ABI ABI&#xff08;Application Binary Interface&#xff0c;应用二进制接口&#xff09;是用来让前端或服务端 JavaScript 代码与智能合约进行交互的桥梁&#xff0c;它描述了合约的函数、事件和…

本地部署Ollama DeepSeek-R1:8B,接入Cherry Studio

本地部署Ollama DeepSeek-R1:8B&#xff0c;接入Cherry Studio 本教程为本地部署ollama 环境&#xff0c;运行deepseek-r1:8B 模型&#xff0c;并完成cherry studio接入调用。 实现无网环境也可提问模型 一、ollama 环境安装 通过网盘分享的文件&#xff1a;OllamaSetup.ex…

彻底解决Win11文件资源管理器预览窗格无法预览问题

国内某几个流氓软件&#xff08;W*S、*狗PDF...&#xff09;&#xff0c;耗子尾之&#xff01;&#xff01;&#xff01; &#xff08;转载&#xff09;Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全 https://zhuanlan.zhihu.com/p/4542…

竞争加剧,美团的战略升维:反内卷、科技与全球化

5月26日&#xff0c;美团发布2025年第一季度业绩报告&#xff0c;交出了一份兼具韧性与创新性的成绩单。 报告显示&#xff0c;公司一季度总营收866亿元&#xff0c;同比增长18%&#xff1b;核心本地商业收入643亿元&#xff0c;同比增长18%&#xff1b;季度研发投入58亿元&a…

【unity游戏开发——编辑器扩展】AssetPostprocessor和AssetImporter对导入的资源进行统一的预处理

注意&#xff1a;考虑到编辑器扩展的内容比较多&#xff0c;我将编辑器扩展的内容分开&#xff0c;并全部整合放在【unity游戏开发——编辑器扩展】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、AssetPostprocessor1、主要特点2、常用回调方法3、…

代码随想录算法训练营 Day61 图论ⅩⅠ Floyd A※ 最短路径算法

图论 题目 97. 小明逛公园 本题是经典的多源最短路问题。 在这之前我们讲解过&#xff0c;dijkstra朴素版、dijkstra堆优化、Bellman算法、Bellman队列优化&#xff08;SPFA&#xff09; 都是单源最短路&#xff0c;即只能有一个起点。 而本题是多源最短路&#xff0c;即求多…

CATIA高效工作指南——测量分析篇(一)

一、精准重心分析与实时更新技术 1.1 材料属性与几何体重心关联 在复杂零件设计中&#xff0c;重心控制直接影响产品性能。通过CATIA的材料属性系统可实现动态重心跟踪&#xff1a; ​​密度赋值​​&#xff1a;应用材料 → 选择单个几何体 /依次选择多个几何体→ 指定材质…

【PCB工艺】PCB设计中的基本概念

此文结合实例讲解PCB的设计流程和一些基本概念。 🧱 PCB 是什么? PCB(Printed Circuit Board)(即印制线路板) 是电子元器件的载体,是没有焊接任何器件的“裸板”。 PCB只是板子,没有焊接元件,而PCBA可以理解为焊接好元件的完成板子。 简单点说,PCB 只包含:铜线、电源…

深度学习|pytorch基本运算

【1】引言 pytorch是深度学习常用的包&#xff0c;顾名思义&#xff0c;就是python适用的torch包&#xff0c;在python里面使用时直接import torch就可以调用。 需要注意的是&#xff0c;pytorch包与电脑配置、python版本有很大关系&#xff0c;一定要仔细阅读安装要求、找到…

[Windows] 千库/六图素材下载工具

下载链接 夸克网盘分享&#xff08;点击蓝色自己自行保存下载&#xff09; 由吾爱大神分享一块下载工具 核心功能&#xff1a;无水印下载&#xff0c;圈网站素材覆盖&#xff0c;下载速度飞起&#xff0c;还能同时下载100个素材 使用方法&#xff1a; 双击运行 千库六图下…

SolidWorks 文件打开时电脑卡顿问题分析与解决

最近遇到一个问题就是我点击solid work的文件的时候会将电脑卡住然后电脑开始飞速的加载内存&#xff0c;鼠标移动很卡顿 解决办法&#xff1a; 1.找到资源管理器 当遇到这种情况时&#xff0c;可以尝试通过资源管理器来解决问题。首先&#xff0c;找到任务管理器&#xff08…