亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino TFT 触摸屏复刻 Flappy Bird 游戏完整教程

项目概述

基于 Arduino 与 TFT 触摸屏(如 3.2" SSD1289)复刻经典手游《Flappy Bird》。点击屏幕控制小鸟跳跃,躲避随机高度的移动柱子,分数越高速度越快,最高分掉电保存(EEPROM)。适合进阶学习图形编程、触摸交互与游戏逻辑。

Arduino TFT 触摸屏复刻 Flappy Bird 游戏完整教程

硬件与库准备

核心代码架构解析

初始化与对象创建

#include <UTFT.h>
#include <URTouch.h>
#include <EEPROM.h>

// 根据屏幕型号调整参数
UTFT myGLCD(SSD1289, 38, 39, 40, 41);
URTouch myTouch(6, 5, 4, 3, 2);

extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
extern unsigned int bird01[0x41A]; // 小鸟位图数组

// 游戏变量
int xP = 319, yP = 100;      // 柱子位置
int yB = 50;                 // 小鸟 Y 坐标
int movingRate = 3;          // 柱子移动速度
float fallRate = 0;          // 下落加速度
int fallRateInt = 0;
int score = 0, lastSpeedUpScore = 0, highestScore;
bool screenPressed = false, gameStarted = false;

void setup() {
  myGLCD.InitLCD(); myGLCD.clrScr();
  myTouch.InitTouch(); myTouch.setPrecision(PREC_MEDIUM);
  highestScore = EEPROM.read(0); // 读取最高分
  initiateGame();
}

游戏初始化界面 initiateGame()

绘制蓝天背景、绿地、分数栏、最高分、提示文字,调用 drawBird() 绘制小鸟。进入 while(!gameStarted) 循环等待触摸:点击右上角 "RESET" 清零最高分,点击其余区域开始游戏。

Arduino TFT 触摸屏复刻 Flappy Bird 游戏完整教程

主循环 loop() 逻辑

避免闪屏的绘图策略

TFT 刷新率低,全屏重绘会闪烁。采用脏矩形/增量绘制:

Arduino TFT 触摸屏复刻 Flappy Bird 游戏完整教程
Arduino TFT 触摸屏复刻 Flappy Bird 游戏完整教程

核心自定义函数

// 绘制柱子(增量更新)
void drawPillars(int x, int y) {
  if (x >= 270) { /* 屏幕右侧初始化绘制 */ }
  else {
    // 右侧擦除蓝条
    myGLCD.setColor(114,198,206); myGLCD.fillRect(x+51, 0, x+60, y);
    // 柱子本体
    myGLCD.setColor(0,200,20); myGLCD.fillRect(x+49, 1, x+1, y-1);
    myGLCD.setColor(0,0,0); myGLCD.drawRect(x+50, 0, x, y);
    // 左侧擦除蓝条
    myGLCD.setColor(114,198,206); myGLCD.fillRect(x-1, 0, x-3, y);
    // 下柱子同上,y+80 为缺口起始
    ...
  }
  // 绘制分数
  myGLCD.setColor(0,0,0); myGLCD.setBackColor(221,216,148);
  myGLCD.setFont(BigFont); myGLCD.printNumI(score, 100, 220);
}

// 绘制小鸟(位图+残影擦除)
void drawBird(int y) {
  myGLCD.drawBitmap(50, y, 35, 30, bird01);
  myGLCD.setColor(114,198,206);
  myGLCD.fillRoundRect(50, y, 85, y-6);    // 上擦除
  myGLCD.fillRoundRect(50, y+30, 85, y+36); // 下擦除
}

// 游戏结束处理
void gameOver() {
  delay(1000); myGLCD.clrScr();
  myGLCD.setColor(255,255,255); myGLCD.setBackColor(0,0,0);
  myGLCD.setFont(BigFont);
  myGLCD.print("GAME OVER", CENTER, 40);
  myGLCD.print("Score:", 100, 80); myGLCD.printNumI(score, 200, 80);
  myGLCD.print("Restarting...", CENTER, 120);
  // 倒计时 3,2,1
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(3, CENTER, 150); delay(1000);
  myGLCD.printNumI(2, CENTER, 150); delay(1000);
  myGLCD.printNumI(1, CENTER, 150); delay(1000);
  // 更新最高分
  if (score > highestScore) { highestScore = score; EEPROM.write(0, highestScore); }
  // 重置变量
  xP=319; yB=50; fallRate=0; score=0; lastSpeedUpScore=0; movingRate=3; gameStarted=false;
  initiateGame();
}

完整代码下载

文末提供完整 sketch、小鸟位图数组文件(bird01.c)打包下载。将 .c 文件置于 sketch 同目录即可编译。

常见问题与优化建议

代码逻辑清晰,适合作为 Arduino 图形游戏开发的入门范例。动手试做吧,祝你最高分破纪录!

制造工艺

  1. 用 Arduino 打造绚丽显示器 Ambilight 系统
  2. 用 Arduino UNO 和 OLED 显示屏制作经典 Pong 游戏:分步教程
  3. DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
  4. Arduino 触控打砖块:在 2.4 英寸 TFT LCD 上重现经典街机
  5. 自制巨型乐高迷你人偶动画操作游戏:Arduino 控制舵机与音效
  6. Arduino 音频频率检测:基于 FFT 测量最响亮声音峰值
  7. Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
  8. 使用 SparkFun 7 段数码管构建可靠的 Arduino 倒计时器
  9. Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏
  10. 自制 Arduino 遥控保时捷赛车:从改装底盘到手机 App 控制全攻略
  11. DIY LED 轮盘赌游戏机 —— Arduino Nano 打造单人桌面街机
  12. 低成本 Arduino 闪电探测器制作指南