内容介绍
内容介绍
寒假在家一起练
——基于树莓派RP2040实现俄罗斯方块游戏
1 项目需求
- 按下按键A后开始游戏
- 随机出现不同形状的俄罗斯方块,以一定初始速度下落
- 按下按键B后实现俄罗斯方块的旋转
- 通过遥杆控制俄罗斯方块的左右移动
- 俄罗斯方块落地后,方块每填满x行则所填满的x行方块消除(x>=1);消除后,消除行上所有方块整体下降x格,得50*x分
- 若俄罗斯方块堆积至屏幕最上端,则游戏结束,自动回到原游戏开始页面
- 设置游戏bgm
2 简单软硬件介绍
- 采用树莓派Pico核心芯片RP2040:双核Arm Cortex M0+内核,可以运行到133MHz;拥有264KB内存;性能强大、高度灵活的可编程IO可用于高速数字接口。
- 板上功能:240*240分辨率的彩色IPS LCD,SPI接口,控制器为ST7789;四向摇杆 + 2个轻触按键 + 一个三轴姿态传感器MMA7660用做输入控制;一个蜂鸣器;双排16Pin连接器,有SPI、I2C以及2路模拟信号输入;可以使用MicroPython、C、C++编程;USB Type C连接器用于供电、程序下载。
- 运用Thonny进行编程。
3 游戏设计思考流程
4 项目实现图片
- 游戏开始界面
- 操作摇杆使俄罗斯方块向左移动
- 操作摇杆使俄罗斯方块向右移动
- 按下按键B使俄罗斯方块旋转
- 游戏得分画面
- 游戏结束画面
5 代码解释
- 绘制不同类型的俄罗斯方块
boxo=[[1,1],[1,1]]
boxz_1=[[1,1,0],[0,1,1],[0,0,0]]
boxz_2=[[0,1,1],[1,1,0],[0,0,0]]
box7_1=[[1,1,0],[0,1,0],[0,1,0]]
box7_2=[[0,1,1],[0,1,0],[0,1,0]]
boxt=[[0,1,0],[1,1,1],[0,0,0]]
boxi=[[0,0,0,0,0],[0,0,0,0,0],[1,1,1,1,0],[0,0,0,0,0],[0,0,0,0,0]]
boxes=[boxo,boxz_1,boxz_2,box7_1,box7_2,boxt,boxi]
color=[0xFFE0,0x867f,0x7ef,0xfb08]
- 实现方块的掉落,若方块下面没有其余方块,则方块下落;若方块与其余方块相叠,则方块停止下落
def autodown():
global box_row,box_column,box,box_id
leave()
box_row+=1
if checkvalid()==False:
box_row-=1
enter()
clear()
box=newbox()
box_column=4
box_row=0
enter()
- 操作摇杆往不同方向以实现方块的左右移动、旋转和下落
if buttonB.value()==0:
up()
print("up")
elif yValue >40000:
right()
print("right")
elif yValue <1000:
left()
print("left")
elif xValue >40000:
down()
print("down")
else:
print("stop")
drawbox()
- 方块旋转、向左移动、向右移动、下落
def up():
leave()
clockwise()
if checkvalid()==False:
counter_clockwise()
enter()
def down():
global box_row
leave()
box_row+=1
if checkvalid()==False:
box_row-=1
enter()
def left():
global box_column
leave()
box_column-=1
if checkvalid()==False:
box_column-=1
enter()
def right():
global box_column
leave()
box_column+=1
if checkvalid()==False:
box_column-=1
enter()
- 游戏重新开始的循环
def restart():
display.fill(0x0000)
display.fill_rect(4,0,4,240,0x07FFF)
display.fill_rect(227,0,4,240,0x077FF)
display.text(font2,"muc hyy",30,10,color=0x4416)
display.text(font2,"A to start",30,130,color=0x7e0)
display.text(font2,"Tetris",70,60,color=0x471a)
buttonValueB=buttonB.value()
while True:
buttonValueA=buttonA.value()
if buttonValueA==0:
print("OK")
g=[]
for i in range(16):
g.append([0]*12)
enter()
game()
restart()
6 项目总结
通过本次项目,我对python有了初步的认识,通过游戏的移植锻炼了我的动手能力和编程能力,对嵌入式开发有了新的体会,受益匪浅。
附件下载
2022hanjiahyy.rar
团队介绍
本人黄彦宇和阎倩同学组成小组交流完成此项目,均来自中央民族大学
评论
0 / 100
查看更多
猜你喜欢
基于树莓派RP2040实现俄罗斯方块游戏移植完成实习项目,基于树莓派RP2040的嵌入式系统学习平台,可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用。
aji
1588
寒假在家一起练-基于树莓派rp2040实现复古游戏《俄罗斯方块》移植1.编写(移植)《俄罗斯方块》游戏的运行逻辑;
2.依托Arduino提供的TFT_eSPI库编写LCD屏幕显示界面;
3.编写《俄罗斯方块》游戏的背景音乐;
4.依托RP2040游戏机平台进行软硬件逻辑结合;
bird
1757
基于树莓派RP2040完成俄罗斯方块利用树莓派RP2040和Thonny实现复古游戏移植,设计制作俄罗斯方块小游戏
HYYG
1514