树莓派RP2040 GAME Kit教程

——基于树莓派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有了初步的认识,通过游戏的移植锻炼了我的动手能力和编程能力,对嵌入式开发有了新的体会,受益匪浅。

电路图

TAG: 树莓派Zero 4G Cat1带USB HUB扩展板LTE/GPS/EA/EU也支持2W CM4 Openwrt 使用教程 树莓派PICO 1024x600 MiniPCIe接口CAN卡双通道 USB转Can带电气隔离和多重保护电路Linux/Windows ESP32 S3开发板2.1寸LCD触摸显示屏480 HMI LVGL带QMI8658 6轴加速度陀螺仪 树莓派5 POE PCIe转M.2 E KEY NGFF转接板WIFI7 WIFI6无线网卡PI5 荔枝派糖Lichee Tang Nano 9K高云FPGA GOAI Sipeed GW1NR-9 斑梨电子 ESP32-H2 树莓派5 PCIE转SSD 工业级USB转4路RS232/485/422/TTL多功能串口转换器FT4232HL 树莓派PICO 树莓派5 Cooler 斑梨 UART串口TTL转 RS232 B电气隔离型防雷浪涌多种保护导轨式 树莓派PICO键盘 树莓派原装Raspberry Pi HQ Camera摄像头M12型1230万IMX477 树莓派UGV Rover PT【四驱六轮】开源AI云台机器人小车OpenCV Jetson Orin Nano Super 人工智能(AI)开发套件内置8GB显存核心板 ESP32-S3开发板