2025寒假练 - 基于带显示屏的RP2040调试平台设计小游戏
该项目使用了MicroPython语言,实现了小游戏的设计,它的主要功能为:基于带显示屏的RP2040调试平台上的lcd显示屏通过三个人机交互按钮可以进行一个小游戏。
标签
显示
两仪生未那
更新2025-03-24
北京理工大学
18

(视频加了字幕)

项目介绍

本项目是基于树莓派RP2040微控制器的2D太空射击游戏系统。RP2040是树莓派基金会推出的首款自研微控制器芯片,基于双核ARM Cortex-M0+架构(主频133MHz),配备264KB SRAM和灵活的外部Flash扩展能力,最大亮点是独创的8个可编程I/O(PIO)状态机,允许用户自定义硬件协议(如驱动LED、视频输出等),大幅降低对外设芯片的依赖。

玩家通过物理按钮控制太空飞船,在240×240分辨率的LCD屏幕上进行实时战斗,具有以下核心功能:

  • 玩家飞船的左右移动控制
  • 激光子弹发射系统
  • 自动生成的敌方单位
  • 实时碰撞检测机制
  • 动态分数统计系统
  • 游戏状态管理系统


硬件介绍

硬件组件

规格参数

连接方式

RP2040开发板

双核ARM Cortex-M0+ @133MHz

主控单元

ST7789 LCD屏

240x240 IPS,SPI接口

SCK=GP2, MOSI=GP3

交互按钮

轻触开关


电源系统

5V USB供电

通过Micro USB接口

系统设计框图

image.png

1实时性保障方案

采用差分刷新技术降低渲染延迟

中断优先级的合理分配

2游戏机制设计

概率型敌人生成算法

碰撞盒优化设计

软件流程图和关键代码介绍

image.png

1SPI显示初始化

spi0 = SPI(0, baudrate=60_000_000, phase=1, polarity=1,

sck=Pin(2), mosi=Pin(3))

display = st7789.ST7789(spi0, 240, 240,

reset=Pin(0, Pin.OUT),

dc=Pin(1, Pin.OUT))

2碰撞检测算法

def check_collision(bullet, enemy):

    return (bullet[0]+2 > enemy[0] and

           bullet[0] < enemy[0]+20 and

           bullet[1]+8 > enemy[1] and

           bullet[1] < enemy[1]+20)

3游戏主循环

while True:

if not game_over:

# 检测按钮状态

buttonM_value = debounce(buttonM)

buttonS_value = debounce(buttonS)

buttonR_value = debounce(buttonR)

# 左轻触按钮按钮M:左移

if buttonM_value == 0:

player_x = max(0.0, player_x - player_speed)

# 右轻触按钮按钮S:右移

if buttonS_value == 0:

player_x = min(screen_width - player_width, player_x + player_speed)

# 拨轮R:射击

if buttonR_value == 0:

bullets.append([player_x + player_width/2 - 1, player_y - 8])

time.sleep(0.3)

# 清除屏幕

display.fill(BLACK)

# 更新游戏状态

spawn_enemies()

update_bullets()

update_enemies()

# 绘制游戏元素

draw_player()

draw_bullets()

draw_enemies()

draw_score()

# 检测游戏结束条件

if game_over:

draw_game_over()

功能展示图及说明

微信图片_20250316124148.jpg

如图所示,由显示频顶端的三个按钮可控制“”行为;屏幕顶端显示获得分数(每次“子弹”与“敌人”碰撞加10分);“敌人”(蓝色方块)通过屏幕下边缘或与飞船接触则弹出游戏结束画面,此时拨动摇杆可重置游戏。游戏启动后时实检测碰撞箱。


项目中遇到的难题和解决方法

难题描述

解决方案

实现效果

画面撕裂现象

引入双缓冲渲染机制

刷新率提升至60FPS+

高速移动物体碰撞检测失效

采用扫描线分区检测法

检测准确率>85%

SPI通信不稳定

优化PIO状态机配置

传输成功率100%

按钮响应延迟

硬件消抖+软件滤波算法

响应时间<10ms


对本次活动的心得体会

掌握了嵌入式图形系统的开发范式,深入理解了实时系统的调度原理,积累了硬件/软件协同调试经验

附件下载
main.py
主程序
vga2_8x8.py
字体格式
st7789.py
LCD驱动
团队介绍
个人创建项目,由于缺少信号发生器等设备,本项目仅使用rp2040及其自带的lcd屏。
团队成员
两仪生未那
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号