基于树莓派RP2040完成俄罗斯方块
利用树莓派RP2040和Thonny实现复古游戏移植,设计制作俄罗斯方块小游戏
标签
嵌入式系统
USB
2022寒假在家练
HYYG
更新2022-03-07
北京理工大学
1518

一、完成项目

本项目是硬禾学堂发布的“2022寒假一起在家练”活动中用树莓派RP2040的嵌入式系统学习平台完成俄罗斯方块游戏移植。

二、环境配置

1、Thonny

Thonny为官方推荐的开发环境,可使用C、C++、Micropython等语言,适合初学者快速上手,RP2040板卡自带Micropython解释器

2、硬禾学堂树莓派RP2040嵌入式系统学习平台

RP2040是硬禾学堂发布的嵌入式系统学习平台,其原理图如下

FnJF8vI6wkI0S9gPp2nyhZM0iBFK

功能图如下

Fo_bQewUYVRVxvSA5ClIGJ8PyagJ

在此次项目中,我使用了树莓派RP2040的嵌入式系统学习平台的240*240分辨率的彩色IPS LCD,SPI接口,控制器为ST7789,使用开源代码中的st7789.py驱动LCD,四向摇杆和2个轻触按键,蜂鸣器,使用ADC和Pin读取摇杆方向键和A、B键的数据

三、流程图

FrNpemkeiXxYkp8dKkdWOqdwD2jU

四、主要代码解释

def game():
    global reachtop,song
    mySong = music(song, pins=[Pin(23)])
    while True:
        timeaxis(mySong, 400)
        xValue = xAxis.read_u16()#获取摇杆纵轴位置
        yValue = yAxis.read_u16()#获取摇杆横轴位置
        f=4
        if buttonB.value()==0:#检测是否按下B键
            turn()            #按B键旋转
        elif xValue in range(50000, 70000):#摇杆向下
            down()                         #加速下落
        elif yValue in range(0, 10000):#摇杆y轴向左
            left()                     #向左平移方块
        elif yValue in range(50000, 70000):#摇杆y轴向右
            right()                        #向右平移方块
        else:
            print("stop" )

根据mySong每次游戏刷新时读取摇杆和B键的输入,并依据输入进入函数,依据函数对方块进行变换,分别有旋转、左移、右移、加速下落四种情况,旋转是最优先的判断。

def timeaxis (mySong, time):
    l = 0
    time0 = time/40
    while l<time0:
        l+=1
        mySong.tick()
        sleep(0.04)

控制时间轴刷新的程序段,在刷新的时候才会读取按键,连续点击操作无效。因为板子上的输入是摇杆,方块的下落方向是由摇杆控制,而不是方向按键,摇杆相比起按键来缺少单次判定的灵敏度,如果摇杆范围正好在判定临界范围容易造成误触,多次输入方向指令,所以使用了按时间读取命令的方式。

def clear():
    global score,reachtop
    i = 0
    c = 0
    while i<16:#检测一整行是否都填满
        if 0 in g[i]:
            i+=1
        else:
            c+=1
            del g[i]
            g.insert(0,[0]*12)
    if c>0:#凑齐一整行,可以进行消除
        score+=10*(2**(c-1))#分数计算
        if score >1000:#防分数溢出,设置了最大值
            score=999
    if 1 in g[0]:#判定方格是否进入了最上层
        reachtop = True#触顶标志立起

每次方格落下时都会进行一次判定,凑齐填满的一整行是会进行消除,计算分数累加起来显示在屏幕上。如果发现方格达到了最顶端就会判断为触顶失败,进入游戏结束的界面。

def Tetris():
    display.fill(0x0000)#背景
    display.text(font2,"Press A", 30, 40, color=0x7e0)#主界面文字
    display.text(font2,"To Start", 30, 80, color=0x7e0)
    buttonValueB = buttonB.value()
    while True:
        buttonValueA = buttonA.value()#A键
        if buttonValueA==0:
            print("OK" )
            g=[]
            for i in range(16):#生成方格背景
                g.append([0]*12)
            enter()
            game()#游戏函数

主界面以及按A键进入游戏。

FjV1tpPnD6hne128C_XUazgbAoNS

五、后记

这次树莓派RP2040教程中讲解的游戏就是俄罗斯方块,讲师在网上讲解了一些思路,网上也有不少开源代码,经过多方学习才实现了这个成品。Micropython确实是很适合新手上手入门的语言,可以看出它不仅有Python更清晰易懂的结构与语法,而且有更加精简实用的库。在大学期间我在课堂上只学过C语言,Python也是专业实习时临时抱佛脚学习过部分,了解一些特定的功能如何实现,没能完全掌握,这次硬禾学堂的学习机会给了很大帮助,再一次锻炼了自己对于程序语言的运用,将来我还会对Python进行更加深入的学习。

这一次的活动非常有趣,寓教于乐,将来有兴趣的话我还会继续深入研究树莓派RP2040这块板子,争取实现更多功能,等到摸透全部功能之后相信我也能在自己的编程路上迈出一大步。

附件下载
Tetris.rar
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号