LCD Hill Run v2 —— 基于 Arduino 的互动跑酷游戏(16x2 LCD 与蜂鸣器)
项目简介
这是一个运行在 Arduino 上的趣味跑酷游戏,使用 16x2 字符 LCD 显示画面,通过两个按钮控制角色跳跃与下蹲,躲避小山和乌鸦。游戏包含音效反馈、分数记录和游戏结束重启机制,代码结构清晰,适合初学者学习游戏逻辑、中断处理和 LCD 自定义字符的使用。
作者年仅 12 岁,代码风格紧凑,利用中断响应按键,实现了流畅的游戏体验。项目开源,提供完整接线说明、代码和库文件下载链接。
所需材料
- Arduino Mega 2560(或 Arduino Uno,需修改代码中的 DUCK_PIN 为 3 并相应改接)
- 16x2 字符 LCD(白字蓝底)
- 10 kΩ 电位器(用于调节 LCD 对比度)
- 两个按钮(跳跃、下蹲)
- 两个 10 kΩ 下拉电阻
- 无源蜂鸣器(有源蜂鸣器或压电蜂鸣器也可能工作,仅用于音效)
- 面包板(建议全尺寸)
- 杜邦线若干(约 20 根)
软件与库
- Arduino IDE
- LiquidCrystal 库(内置)
- pitches.h(音调定义,随代码提供)
- 项目库文件:GitHub 下载
接线指南
LCD 接线(标准 16 脚并口)
- VSS → GND
- VDD → 5V
- V0 → 电位器中间引脚(两端分别接 5V 和 GND)
- RS → 数字引脚 7
- RW → GND
- E → 数字引脚 8
- D4-D7 → 数字引脚 9-12
- A → 5V(背光阳极)
- K → GND(背光阴极)
按钮与蜂鸣器
- 跳跃按钮:一端接 5V,另端接 10 kΩ 下拉电阻到 GND,同时接数字引脚 2(支持外部中断)
- 下蹲按钮:接线同上,接数字引脚 18(Mega 2560 的中断引脚;Uno 请改接引脚 3 并修改代码)
- 蜂鸣器:一端接 GND,另端接 PWM 引脚 5
核心代码逻辑
游戏主循环以固定时间步长(默认 90ms)推进:
- 绘制角色(跑步、跳跃、下蹲动画)
- 移动障碍物(小山在底行,乌鸦在顶行)
- 碰撞检测:跳跃越过小山、下蹲躲避乌鸦得分,否则游戏结束
- 蜂鸣器播放跳跃、下蹲、死亡音效
- 游戏结束显示分数,按跳跃键重启
关键技术点:
- 使用
attachInterrupt()响应按键,避免轮询延迟 - 自定义 8 个字符(角色动作、小山、乌鸦翅膀扇动)
- 通过
millis()实现非阻塞闪烁提示
代码示例(核心片段)
const int JUMP_PIN = 2;
const int DUCK_PIN = 18; // Uno 改为 3
const int BUZZER_PIN = 5;
const int TICKSPEED = 90;
const int JUMP_LENGTH = 3;
volatile int jumpPhase = JUMP_LENGTH + 1;
volatile bool ducking = LOW;
int hillX = 25, crowX = 40;
int score = 0;
void setup() {
pinMode(JUMP_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
lcd.begin(16, 2);
// 创建自定义字符...
attachInterrupt(digitalPinToInterrupt(JUMP_PIN), seeJumping, RISING);
attachInterrupt(digitalPinToInterrupt(DUCK_PIN), seeDucking, CHANGE);
}
void loop() {
// 游戏主循环:绘制、移动、碰撞检测、延时
drawSprites();
// ... 省略完整逻辑
delay(TICKSPEED);
}
void seeJumping() {
if (jumpPhase > (JUMP_LENGTH + 2) && !ducking) {
jumpPhase = 0;
tone(BUZZER_PIN, JUMP_PITCH, JUMP_PITCH_DURATION);
}
}
void seeDucking() {
ducking = digitalRead(DUCK_PIN);
if (ducking) {
jumpPhase = JUMP_LENGTH;
tone(BUZZER_PIN, DUCK_PITCH, DUCK_PITCH_DURATION);
}
}
扩展建议
- 增加难度等级:随时间加快
TICKSPEED或增加障碍物密度 - 添加最高分存储(EEPROM)
- 设计 3D 打印外壳,做成便携游戏机
- 移植到 Arduino Uno 或 Nano,注意中断引脚限制
项目地址
完整代码、库文件和原理图请访问:Arduino Project Hub
制造工艺
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- 用 Arduino UNO 和 OLED 显示屏制作经典 Pong 游戏:分步教程
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- Arduino 触控打砖块:在 2.4 英寸 TFT LCD 上重现经典街机
- Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏
- Arduino 自动化 Chrome 恐龙游戏 - LDR 光敏电阻 + Python 实现全自动跳跃
- DIY LED 轮盘赌游戏机 —— Arduino Nano 打造单人桌面街机
- 打造 Arduino 掌上游戏机:A-Maze 紧凑型可刷新迷宫游戏
- 打造可靠的 Arduino 气象站:DHT 传感器 + LCD + RTC
- 用蜂鸣器和摇杆制作经典 Arduino LCD 街机游戏
- Arduino 智能盲杖:超声波避障与声光提醒