基于STM32和OLED的小恐龙游戏项目设计与实现【免费开源】

简介: 小恐龙游戏最初是作为浏览器离线小游戏而广为人知,其简单的操作与生动的画面使其深受用户喜爱。本项目将经典的小恐龙跳跃游戏移植到嵌入式平台上,使用STM32微控制器作为核心控制器,OLED屏幕进行显示,搭配按键或触摸实现用户交互。通过本项目,既可以体验游戏开发在嵌入式系统上的实现方式,又能掌握STM32 GPIO、定时器、OLED驱动、按键扫描及简单动画实现技术。

基于STM32和OLED的小恐龙游戏项目设计与实现【免费开源】

免费开源,本文项目源码放在文末

一、项目概述

小恐龙游戏最初是作为浏览器离线小游戏而广为人知,其简单的操作与生动的画面使其深受用户喜爱。本项目将经典的小恐龙跳跃游戏移植到嵌入式平台上,使用STM32微控制器作为核心控制器,OLED屏幕进行显示,搭配按键或触摸实现用户交互。通过本项目,既可以体验游戏开发在嵌入式系统上的实现方式,又能掌握STM32 GPIO、定时器、OLED驱动、按键扫描及简单动画实现技术。

项目核心功能包括:

  • 基于OLED显示的动态小恐龙动画
  • 用户输入控制跳跃动作
  • 随机生成障碍物
  • 分数记录和显示
  • 简单碰撞检测,实现游戏结束逻辑

通过该项目,开发者能够掌握嵌入式图形显示、定时器中断、状态机设计以及简单游戏逻辑实现的方法。
在这里插入图片描述


二、硬件设计

2.1 主控芯片选择

本项目采用STM32F103C8T6微控制器,其优势包括:

  • 32位ARM Cortex-M3核心,主频72MHz
  • 丰富的GPIO、定时器、SPI/I2C接口
  • 内存充足,适合存储小型游戏图形数据
  • 支持低功耗模式,适合便携式设备

2.2 显示模块

OLED屏幕是游戏显示核心,选择0.96寸128x64分辨率的I2C OLED屏:

  • 通过I2C接口与STM32通信
  • 支持像素级显示,可实现简单动画
  • 占用GPIO少,适合嵌入式小型项目

2.3 用户交互

  • 按键输入:单按键控制小恐龙跳跃
  • 可扩展触摸输入或按钮组合,实现更丰富交互

2.4 电源设计

  • 使用3.7V锂电池供电或USB供电
  • STM32及OLED低功耗设计,可持续运行数小时

在这里插入图片描述

三、软件架构设计

3.1 系统模块划分

本项目软件系统划分为以下模块:

  1. OLED驱动模块:初始化OLED、绘制像素、图形和文字
  2. 按键扫描模块:检测用户跳跃操作
  3. 游戏逻辑模块:小恐龙动作、障碍物生成、碰撞检测
  4. 定时器模块:实现动画刷新、游戏速度控制
  5. 得分显示模块:记录和显示游戏分数

模块间通过函数调用和全局状态结构体进行数据传递,保持逻辑清晰。

3.2 OLED显示逻辑

OLED屏幕采用单色点阵显示,通过刷新像素实现小恐龙和障碍物动画。每帧游戏逻辑更新后,调用OLED刷新函数绘制新画面。为了提高效率,使用缓冲区(Buffer)绘制后统一发送至OLED,减少闪烁。

uint8_t OLED_Buffer[128 * 8]; // 128x64 OLED,每页8行
void OLED_DrawPixel(uint8_t x, uint8_t y, uint8_t color) {
   
    if(color)
        OLED_Buffer[x + (y/8)*128] |= (1 << (y%8));
    else
        OLED_Buffer[x + (y/8)*128] &= ~(1 << (y%8));
}
void OLED_Refresh(void) {
   
    for(uint8_t page=0; page<8; page++){
   
        OLED_Command(0xB0 + page);
        OLED_Command(0x00);
        OLED_Command(0x10);
        HAL_I2C_Mem_Write(&hi2c1, OLED_ADDR, page*128, I2C_MEMADD_SIZE_8BIT, &OLED_Buffer[page*128], 128, HAL_MAX_DELAY);
    }
}

在这里插入图片描述

四、游戏逻辑实现

在这里插入图片描述

4.1 小恐龙状态机

小恐龙状态主要包括:

  • 地面状态:正常行走
  • 跳跃状态:按键触发跳跃
  • 下降状态:跳跃结束返回地面

使用结构体保存状态及高度信息,通过定时器周期更新位置。

typedef struct {
   
    uint8_t state; // 0: 地面, 1: 跳跃, 2: 下降
    uint8_t y;     // 垂直坐标
} Dino;

Dino player = {
   0, GROUND_Y};

4.2 障碍物生成

  • 障碍物通过数组管理,定时移动
  • 随机间隔生成障碍物
  • 与小恐龙坐标比较实现碰撞检测
typedef struct {
   
    uint8_t x;
    uint8_t type;
    uint8_t active;
} Obstacle;

Obstacle obs[5];
void UpdateObstacle(void) {
   
    for(int i=0;i<5;i++){
   
        if(obs[i].active){
   
            obs[i].x--;
            if(obs[i].x==0) obs[i].active = 0; // 移出屏幕
        } else if(rand()%50==0){
    // 随机生成
            obs[i].x = 127;
            obs[i].active = 1;
            obs[i].type = rand()%2;
        }
    }
}

4.3 碰撞检测

判断小恐龙与障碍物坐标是否重叠,实现游戏结束逻辑。

bool CheckCollision(Dino *d, Obstacle *o){
   
    if(o->active && o->x < DINO_WIDTH && o->x + OBSTACLE_WIDTH > 0){
   
        if(d->y < OBSTACLE_HEIGHT) return true;
    }
    return false;
}

五、定时器与动画控制

使用STM32定时器中断,实现动画刷新和游戏节奏控制:

  • 定时器周期50ms,更新小恐龙和障碍物位置
  • 每帧刷新OLED缓冲区
  • 控制跳跃高度变化,实现平滑动画
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
   
    UpdateDino(&player);
    UpdateObstacle();
    if(CheckCollision(&player, obs)){
   
        GameOver();
    }
    DrawFrame();
    OLED_Refresh();
}

六、按键控制

按键通过GPIO中断或轮询实现跳跃触发,按下时改变小恐龙状态为“跳跃”,触发定时器逻辑更新高度,实现跳跃动作。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
   
    if(GPIO_Pin == BUTTON_PIN && player.state==0){
   
        player.state = 1; // 跳跃
    }
}

七、得分记录

  • 每帧障碍物成功避开,分数加1
  • 分数显示在OLED屏幕顶部
  • 游戏结束时显示最高分
uint16_t score = 0;
void UpdateScore(void){
   
    for(int i=0;i<5;i++){
   
        if(obs[i].active && obs[i].x==0) score++;
    }
    OLED_ShowNum(100, 0, score, 3, 1);
}

八、项目测试与优化

8.1 游戏运行效果

  • 小恐龙按键跳跃流畅
  • 障碍物随机生成,游戏难度适中
  • OLED显示无明显闪烁

8.2 优化策略

  • 使用OLED缓冲区减少I2C通信闪烁
  • 定时器周期优化动画平滑度
  • 限制障碍物数量和生成频率,提高游戏可玩性
  • 按键消抖和状态机设计保证跳跃精准

九、总结

本项目通过STM32微控制器和OLED屏幕,实现了嵌入式小恐龙游戏的完整功能,涵盖:

  • 嵌入式OLED显示控制
  • 定时器中断与动画实现
  • 小恐龙状态机和跳跃逻辑
  • 随机障碍物生成与碰撞检测
  • 按键交互与分数记录

该项目不仅是嵌入式游戏开发的入门实践案例,也锻炼了硬件接口控制、显示刷新、定时器管理及游戏逻辑设计能力。开发者可在此基础上扩展更多功能,例如背景滚动、多种障碍类型、音效播放以及蓝牙联网排行榜等。

源码

https://blog.csdn.net/weixin_52908342/article/details/150593282

相关文章
|
2月前
|
JSON 数据可视化 物联网
基于STM32和FreeRTOS的实时天气系统设计与实现【免费开源】
随着物联网(IoT)技术的发展,实时数据监测系统逐渐成为日常生活和工业环境中不可或缺的组成部分。其中,气象监测系统不仅可以提供温度、湿度、天气状况等信息,还可以通过数据分析为农业、城市管理和个人生活提供智能化建议。本项目以STM32F407为核心控制器,结合FreeRTOS实时操作系统和ESP8266 Wi-Fi模块,实现一套高可靠、实时更新的智能气象监测系统。同时,系统集成了计时功能,通过串口屏将实时数据可视化展示,为用户提供直观的操作体验。
基于STM32和FreeRTOS的实时天气系统设计与实现【免费开源】
|
2月前
|
传感器 数据采集 人工智能
基于STM32单片机的智能晾衣架设计与实现【开源免费】
随着智能家居的发展,传统晾衣架已经难以满足现代家庭对便捷、智能化的需求。基于STM32单片机的智能晾衣架能够实现自动升降、光照检测、风干控制、远程控制等功能,为家庭用户提供更智能、更舒适的晾晒体验。本项目以STM32F103C8T6为核心控制器,通过电机驱动模块、光照传感器、温湿度传感器、蓝牙/Wi-Fi通信模块,实现晾衣架的自动化与远程控制。
基于STM32单片机的智能晾衣架设计与实现【开源免费】
|
2月前
|
传感器 数据采集 算法
【免费开源】基于 STM32F4 的四轴飞行器设计与实现——从零开始到成功起飞(项目源码打包分享)
四轴飞行器作为一种低空、低成本的遥感平台,已经在多个领域展现出广泛的应用潜力。相比其他类型的飞行器,它在硬件上结构紧凑、安装方便,但在软件层面却充满挑战——从传感器数据融合到姿态解算,再到快速且稳定的控制算法,每一环节都需要精心设计,也正因此让四轴飞行器更具技术魅力。
281 73
|
2月前
|
传感器 机器人 物联网
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
通过本项目,你可以系统掌握STM32外设控制、蓝牙通信、电机驱动和传感器数据处理技术,实现一辆可远程控制并具备避障功能的智能小车。该项目具有高度可扩展性,后续可增加循迹、自动寻路、摄像头等高级功能。
330 42
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
|
2月前
|
传感器 数据采集 物联网
基于STM32和FreeRTOS的智能手环项目设计与实现【免费开源】
随着可穿戴设备的普及,智能手环逐渐成为健康管理、运动监测和生活便捷的重要工具。本项目旨在设计一款基于STM32微控制器和FreeRTOS实时操作系统的智能手环,具备心率监测、运动计步、睡眠分析以及蓝牙通信功能。通过FreeRTOS实现多任务调度,提高系统响应效率和资源利用率,同时保证低功耗设计,延长手环续航。
基于STM32和FreeRTOS的智能手环项目设计与实现【免费开源】
|
2月前
|
存储 物联网 关系型数据库
基于STM32和ESP8266的智慧考勤系统设计与实现【免费开源】
本文介绍了一个基于 STM32F103ZET6 + ESP8266 Mesh 的智慧考勤系统,涵盖了硬件架构、软件设计、网络组网、服务器端实现与数据导出。该系统不仅实现了考勤自动化,还支持多点分布式部署,具有良好的扩展性与应用价值。
|
2月前
|
传感器 数据采集 安全
基于STM32与ESP8266的智能家居控制系统【免费开源】
通过本项目的开发,不仅加深了对 STM32 外设编程的理解,还掌握了物联网系统的整体设计思路。从传感器数据采集,到通信协议实现,再到云端与APP交互,完整地体验了智能家居系统的开发流程。这为后续更复杂的 IoT 项目打下了坚实基础。
基于STM32与ESP8266的智能家居控制系统【免费开源】
|
2月前
|
传感器 数据采集 安全
STM32与传感器技术结合打造智能行李箱 | 自动跟随与报警系统【免费开源】
本项目成功实现了基于STM32的智慧行李箱设计,采用了超声波测距、重力传感器和报警系统等技术,打造了一款智能且安全的行李箱。通过超声波测距模块,行李箱能够实时跟随主人并根据距离变化调整电机的速度与方向,确保小车始终保持与主人的相对位置。此外,重力测量模块能够检测行李箱内物品的重量,若超重则及时通过LED和蜂鸣器提醒主人,避免物品过重对行李箱造成损害或不便。
STM32与传感器技术结合打造智能行李箱 | 自动跟随与报警系统【免费开源】
|
8月前
|
存储 安全 数据安全/隐私保护
STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
本文介绍了基于STM32的Customer BootLoader刷新项目的第一部分:使用STM32CubeMX搭建UART串口通信工程。项目采用正点原子探索者v2开发板,通过USB串口与上位机通信,实现固件刷新功能。主要内容包括: 1. 硬件原理图介绍:详细描述了开发板的串口连接方式及电路图。 2. STM32CubeMX工程搭建:从创建新工程、配置系统时钟、USART串口设置到生成代码,一步步详细说明。 3. 代码编写:展示了如何使用HAL库实现串口接收和发送数据,并提供了main.c的完整代码。 4. 工程下载和调试:编译并下载工程到开发板,通过串口调试助手验证通信功能。
STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
|
8月前
|
芯片 内存技术
STM32 Customer BootLoader 刷新项目 (二) 方案介绍
本项目设计了一款基于STM32的二级BootLoader,旨在为客户自定义启动过程提供软件更新和操作后门。BootLoader架构分为三层:ST自带Boot(SB)、客户定制化Boot(CB)和应用层(APP)。CB通过USART与MCU通信,支持多种指令如版本查询、擦除扇区、写入数据等,实现灵活的软件管理和更新功能。Flash空间分配为Sector 0-1用于CB,Sector 2-11用于APP。整个方案详细介绍了内存布局、跳转逻辑及支持的指令集,确保系统稳定运行并支持未来的扩展需求。
 STM32 Customer BootLoader 刷新项目 (二) 方案介绍