DF创客社区
发现
DF创客商城
教程
产品资料库
搜索
热门搜索
人工智能
视觉传感器
AI 人工智能
行空板
主控板
二哈识图
热门活动
关闭
DF创客社区
发现
DF创客商城
教程
产品资料库
【花雕学编程】Arduino动手做(249)---GC9A01小球避障游戏
2025-04-22
1523
驴友花雕
UID: 1737
2964
文章
158
粉丝
1.1万
获取喜欢
0
0
创作许可协议
本项目采用
None(不开放任何权利,保留所有权利)
进行许可。
其他主题
Arduino
添加到合集
0
0
相关推荐
DF创客社区2014年度编辑选择奖 教程篇
Ash1
3.9万
3
我的Q&A问答专栏
陈德熹
4
0
BLE Arduino开发神器 Bluno Beetle开启免费试用啦!
Ash1
2.3万
0
评论(6)
驴友花雕
作者
回复
驴友花雕
作者
实验场景图 动态图
回复
驴友花雕
作者
这段代码
模拟了一款小球避障游戏
,小球从
顶部不断下降
,而障碍物
随机出现并阻挡路径
。玩家的目标是让小球成功穿越障碍物,以获得更高分数 。
[b]代码结构
[/b]1️⃣
初始化游戏
[list]
[*]TFT_eSPI 让 ESP32
控制 GC9A01 显示屏
,设定
黑色背景
。
[*]随机设定
小球位置(顶部)
和
障碍物位置(底部)
。
[/list]2️⃣
绘制游戏画面
[list]
[*]drawGame() 用
黄色小球
表示下落物体,
红色方块
作为障碍物。
[*]
显示分数
,让玩家知道当前成绩。
[/list]3️⃣
更新游戏状态
[list]
[*]updateGame() 让
小球不断下降
,模拟重力效果。
[*]
检测碰撞
:如果小球触碰障碍物,则分数归零,游戏重置。
[*]
成功穿越
:小球顺利通过底部,分数增加,并重新生成障碍物。
[/list]4️⃣
循环刷新
[list]
[*]loop() 让游戏
持续运行
,不断更新小球和障碍物的状态。
[*]delay(50); 控制
动画速度
,确保流畅度。
[/list]
[b]最终效果
[/b]
小球不断下降,尝试穿越障碍
红色方块随机出现,阻挡路径
成功避开障碍后得分增加
小球碰撞后游戏重置,继续挑战
回复
驴友花雕
作者
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之一百一十七:ESP32+GC9A01之模拟一款小球避障游戏
实验开源代码
[code]/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之一百一十七:ESP32+GC9A01之模拟一款小球避障游戏
*/
// GC9A01---------- ESP32
// RST ------------ NC(复位引脚,此处未连接)
// CS ------------- D4(片选引脚,连接到ESP32的D4引脚)
// DC ------------- D2(数据/命令选择引脚,连接到ESP32的D2引脚)
// SDA ------------ D23 (green)(主数据输出引脚,连接到ESP32的D23引脚,绿色线)
// SCL ------------ D18 (yellow)(时钟信号引脚,连接到ESP32的D18引脚,黄色线)
// GND ------------ GND(接地引脚,连接到ESP32的接地端)
// VCC -------------3V3(电源引脚,连接到ESP32的3.3V电源)
#include
#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 240
#define BALL_SIZE 10 // 小球大小
#define OBSTACLE_WIDTH 40 // 障碍物宽度
#define OBSTACLE_HEIGHT 20 // 障碍物高度
#define BALL_SPEED 30 // 小球下落速度
TFT_eSPI tft = TFT_eSPI();
int ballX = random(20, SCREEN_WIDTH - 20); // **小球随机生成**
int ballY = 0; // **小球从顶部开始下降**
int obstacleX = random(20, SCREEN_WIDTH - OBSTACLE_WIDTH); // **障碍物随机出现**
int obstacleY = SCREEN_HEIGHT - 50; // **障碍物靠近底部**
int score = 0; // **记录分数**
void setup() {
Serial.begin(115200);
tft.init();
tft.setRotation(2);
tft.fillScreen(TFT_BLACK);
}
void drawGame() {
tft.fillScreen(TFT_BLACK);
// **绘制黄色小球**
tft.fillCircle(ballX, ballY, BALL_SIZE, TFT_YELLOW);
// **绘制红色障碍物**
tft.fillRect(obstacleX, obstacleY, OBSTACLE_WIDTH, OBSTACLE_HEIGHT, TFT_RED);
// **显示分数**
tft.setCursor(70, 30);
tft.setTextColor(TFT_WHITE);
tft.setTextSize(2);
tft.print("Score: " + String(score));
}
void updateGame() {
ballY += BALL_SPEED; // **小球不断向下移动**
// **检测碰撞**
if (abs(ballX - obstacleX) < BALL_SIZE && abs(ballY - obstacleY) < OBSTACLE_HEIGHT) {
score = 0; // **碰撞后重置分数**
ballY = 0; // **小球回到顶部**
ballX = random(20, SCREEN_WIDTH - 20); // **重新随机生成小球**
obstacleX = random(20, SCREEN_WIDTH - OBSTACLE_WIDTH); // **障碍物重新随机出现**
}
// **小球成功通过底部,增加分数**
if (ballY > SCREEN_HEIGHT) {
score += 1;
ballY = 0; // **小球回到顶部**
ballX = random(20, SCREEN_WIDTH - 20); // **随机生成新小球**
obstacleX = random(20, SCREEN_WIDTH - OBSTACLE_WIDTH); // **障碍物重新随机出现**
}
}
void loop() {
updateGame();
drawGame();
delay(10);
}[/code]
回复
驴友花雕
作者
回复
驴友花雕
作者
回复
- 没有更多了 -
驴友花雕
UID: 1737
2964
文章
158
粉丝
1.1万
获取喜欢
创作许可协议
本项目采用
None(不开放任何权利,保留所有权利)
进行许可。
相关推荐
DF创客社区2014年度编辑选择奖 教程篇
Ash1
3.9万
3
我的Q&A问答专栏
陈德熹
4
0
BLE Arduino开发神器 Bluno Beetle开启免费试用啦!
Ash1
2.3万
0
[b]代码结构[/b]1️⃣ 初始化游戏
[list]
[*]TFT_eSPI 让 ESP32 控制 GC9A01 显示屏,设定 黑色背景。
[*]随机设定 小球位置(顶部) 和 障碍物位置(底部)。
[/list]2️⃣ 绘制游戏画面
[list]
[*]drawGame() 用 黄色小球 表示下落物体,红色方块 作为障碍物。
[*]显示分数,让玩家知道当前成绩。
[/list]3️⃣ 更新游戏状态
[list]
[*]updateGame() 让 小球不断下降,模拟重力效果。
[*]检测碰撞:如果小球触碰障碍物,则分数归零,游戏重置。
[*]成功穿越:小球顺利通过底部,分数增加,并重新生成障碍物。
[/list]4️⃣ 循环刷新
[list]
[*]loop() 让游戏持续运行,不断更新小球和障碍物的状态。
[*]delay(50); 控制动画速度,确保流畅度。
[/list]
[b]最终效果[/b]
小球不断下降,尝试穿越障碍
红色方块随机出现,阻挡路径
成功避开障碍后得分增加
小球碰撞后游戏重置,继续挑战
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之一百一十七:ESP32+GC9A01之模拟一款小球避障游戏
实验开源代码
[code]/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之一百一十七:ESP32+GC9A01之模拟一款小球避障游戏
*/
// GC9A01---------- ESP32
// RST ------------ NC(复位引脚,此处未连接)
// CS ------------- D4(片选引脚,连接到ESP32的D4引脚)
// DC ------------- D2(数据/命令选择引脚,连接到ESP32的D2引脚)
// SDA ------------ D23 (green)(主数据输出引脚,连接到ESP32的D23引脚,绿色线)
// SCL ------------ D18 (yellow)(时钟信号引脚,连接到ESP32的D18引脚,黄色线)
// GND ------------ GND(接地引脚,连接到ESP32的接地端)
// VCC -------------3V3(电源引脚,连接到ESP32的3.3V电源)
#include
#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 240
#define BALL_SIZE 10 // 小球大小
#define OBSTACLE_WIDTH 40 // 障碍物宽度
#define OBSTACLE_HEIGHT 20 // 障碍物高度
#define BALL_SPEED 30 // 小球下落速度
TFT_eSPI tft = TFT_eSPI();
int ballX = random(20, SCREEN_WIDTH - 20); // **小球随机生成**
int ballY = 0; // **小球从顶部开始下降**
int obstacleX = random(20, SCREEN_WIDTH - OBSTACLE_WIDTH); // **障碍物随机出现**
int obstacleY = SCREEN_HEIGHT - 50; // **障碍物靠近底部**
int score = 0; // **记录分数**
void setup() {
Serial.begin(115200);
tft.init();
tft.setRotation(2);
tft.fillScreen(TFT_BLACK);
}
void drawGame() {
tft.fillScreen(TFT_BLACK);
// **绘制黄色小球**
tft.fillCircle(ballX, ballY, BALL_SIZE, TFT_YELLOW);
// **绘制红色障碍物**
tft.fillRect(obstacleX, obstacleY, OBSTACLE_WIDTH, OBSTACLE_HEIGHT, TFT_RED);
// **显示分数**
tft.setCursor(70, 30);
tft.setTextColor(TFT_WHITE);
tft.setTextSize(2);
tft.print("Score: " + String(score));
}
void updateGame() {
ballY += BALL_SPEED; // **小球不断向下移动**
// **检测碰撞**
if (abs(ballX - obstacleX) < BALL_SIZE && abs(ballY - obstacleY) < OBSTACLE_HEIGHT) {
score = 0; // **碰撞后重置分数**
ballY = 0; // **小球回到顶部**
ballX = random(20, SCREEN_WIDTH - 20); // **重新随机生成小球**
obstacleX = random(20, SCREEN_WIDTH - OBSTACLE_WIDTH); // **障碍物重新随机出现**
}
// **小球成功通过底部,增加分数**
if (ballY > SCREEN_HEIGHT) {
score += 1;
ballY = 0; // **小球回到顶部**
ballX = random(20, SCREEN_WIDTH - 20); // **随机生成新小球**
obstacleX = random(20, SCREEN_WIDTH - OBSTACLE_WIDTH); // **障碍物重新随机出现**
}
}
void loop() {
updateGame();
drawGame();
delay(10);
}[/code]