基于树莓派RP2040实现俄罗斯方块游戏移植
完成实习项目,基于树莓派RP2040的嵌入式系统学习平台,可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用。
标签
嵌入式系统
MicroPython
俄罗斯方块
thonny
aji
更新2022-03-04
中央民族大学
1589

基于树莓派RP2040实现俄罗斯方块游戏移植

  • 项目内容

基于树莓派RP2040的嵌入式系统学习平台,可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用。可以实现的功能有:

游戏开始时播放音乐

按下按键开始游戏

通过按键控制方块的移动和旋转

消除方块得分发生改变

方块占满屏幕游戏结束

 

  • 软硬件介绍

软件:Thonny —— 一个面向初学者的 Python IDE Thonny 由爱沙尼亚的 Tartu 大学开发,它采用了不同的方法,因为它的调试器是专为学习和教学编程而设计的。

基于树莓派RP2040的嵌入式系统学习平台,可以通过C/C++以及MicroPython编程来学习嵌入式系统的工作原理和应用。

硬件:采用树莓派Pico核心芯片RP2040:

双核Arm Cortex M0+内核,可以运行到133MH

264KB内存

性能强大、高度灵活的可编程IO可用于高速数字接口片内温度传感器、并支持外部4路模拟信号输入,内部ADC采样率高达500Ksps、12位精度

支持MicroPython、C、C++编程

 

  • 流程框图

Fk0QJfzEvJGte-PbGSLzXHtv2u7o

  • 部分代码解析
  • 初始化,参数接口配置
  • song= '0 E5 2 14;4 B4 2 14;6 C5 2 14;8 D5 2 14;10 E5 1 14;11 D5 1 14;12 C5 2 14;14 B4 2 14;16 A4 2 14;20 A4 2 14;22 C5 2 14;24 E5 2 14;28 D5 2 14;30 C5 2 14'   
    st7789_res=0
    st7789_dc=1
    disp_width=240
    disp_height=240
    spi_sck=machine.Pin(2)
    spi_tx=machine.Pin(3)
    spi0=machine.SPI(0,baudrate=900000000,phase=1,polarity=1,sck=spi_sck,mosi=spi_tx)
    display=st7789.ST7789(spi0,disp_width,disp_width,                      reset=machine.Pin(st7789_res,machine.Pin.OUT),                      dc=machine.Pin(st7789_dc,machine.Pin.OUT),                      xstart=0,ystart=0,rotation=0)
    xAxis=ADC(Pin(28))
    yAxis=ADC(Pin(29))
    display.fill(st7789.BLACK)
    buttonB=Pin(5,Pin.IN,Pin.PULL_UP)
    buttonA=Pin(6,Pin.IN,Pin.PULL_UP)

 

  • 设置不同类型方块
  • 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 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 game():    
      global gameover,song    
      mysong =music(song,pins=[Pin(23)])    
      while True:       
        playmusic(mysong,400)        
        xValue=xAxis.read_u16()        
        yValue=yAxis.read_u16()        
        f=4        
        if buttonB.value()==0:            
           up()            
           print("up")        
        elif xValue in range(50000,70000):            
           down()            
           print("down")        
        elif yValue in range(0,10000):            
           left()            
           print("left")        
        elif yValue in range(50000,70000):            
           right()            
           print("right")        
        else:            
           print("stop")

 

  • 成果截图

开始界面:

FjKB8qln1RozmQX1dNF_fbUUecCx

游戏界面:

FgX0avRetK9UdfGpeUy5p1yySQmb

图块旋转移动:

Fhzre7OaM2RkQ0pyOOKMFBunL9V8

得分:

FkK2VEhlQcGorO7jW3I1nXQkb_hj

游戏结束:

FpyRpEoo7sEDR5XY0zmzIwszMz1F

  • 项目总结

  通过本次活动,我对micropython有了进一步的了解,对thonny的使用也更加熟练,编码能力也有所提升,感到收获颇多

 

软硬件
元器件
RP2040
树莓派基金会推出的双核Arm Cortex M0+微控制器,133MHz时钟速率,264KB SRAM,支持C/C++、MicroPython编程
附件下载
代码.zip
团队介绍
中央民族大学 阎倩 (与黄彦宇同学交流沟通完成)
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号