制作坊python教程之micro:bit俄罗斯方块游戏 专区
python教程之micro:bit俄罗斯方块游戏

简介micro:bit挑战经典游戏之俄罗斯方块!重温经典图游戏,你小时候还玩过哪些游戏呢?
我们正在创建一个俄罗斯方块游戏,并在BBC micro:bit上运行。
游戏中落下的俄罗斯方块将基于以下四种形状:
游戏规则如下:
按钮A:将当前方块移动到左侧
按钮B:将当前方块移动到右侧
按钮A和B同时:顺时针旋转当前方块
视频演示
游戏将使用mico:bit的LED屏幕,其由5*5的25个LED组成。
每个LED可以打开(值:9表示最大亮度)或关闭(值:0)
并显示边界部分(未落下的方块)
Python代码将使用二维数组(Python中的列表)来存储主屏幕显示(7×5)和当前方块(2×2)
下载此代码,您可以使用micro:bit网站上的Python编辑器。
Python代码
from microbit import * from random import choice #Set up the tetris grid grid=[[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,1,1,1,1,1,1]] #Store a list of 4 bricks, each brick is a 2x2 grid bricks = [[9,9],[9,0]],[[9,9],[0,9]],[[9,9],[9,9]],[[9,9],[0,0]] #select a brick randomly and position it at the center/top of the grid (y=0,x=3) brick = choice(bricks) x=3 y=0 frameCount=0 #A function to return the maximum of two values def max(a,b): if a>=b: return a else: return b #A function to hide the 2x2 brick on the LED screen def hideBrick(): if x>0: display.set_pixel(x-1,y,grid[y][x]) if x0 and y<4: display.set_pixel(x-1,y+1,grid[y+1][x]) if x<5 and y0: display.set_pixel(x-1,y,max(brick[0][0],grid[y][x])) if x0 and y<4: display.set_pixel(x-1,y+1,max(brick[1][0],grid[y+1][x])) if x0) or (grid[y+1][x]>0 and pixel10>0) or (grid[y][x+1]>0 and pixel01>0) or (grid[y+1][x+1]>0 and pixel11>0)): hideBrick() brick[0][0] = pixel10 brick[1][0] = pixel11 brick[1][1] = pixel01 brick[0][1] = pixel00 showBrick() #A function to move/translate the brick def moveBrick(delta_x,delta_y): global x,y move=False #Check if the move if possible: no collision with other blocks or borders of the grid if delta_x==-1 and x>0: if not ((grid[y][x-1]>0 and brick[0][0]>0) or (grid[y][x+1-1]>0 and brick[0][1]>0) or (grid[y+1][x-1]>0 and brick[1][0]>0) or (grid[y+1][x+1-1]>0 and brick[1][1]>0)): move=True elif delta_x==1 and x0 and brick[0][0]>0) or (grid[y][x+1+1]>0 and brick[0][1]>0) or (grid[y+1][x+1]>0 and brick[1][0]>0) or (grid[y+1][x+1+1]>0 and brick[1][1]>0)): move=True elif delta_y==1 and y0 and brick[0][0]>0) or (grid[y+1][x+1]>0 and brick[0][1]>0) or (grid[y+1+1][x]>0 and brick[1][0]>0) or (grid[y+1+1][x+1]>0 and brick[1][1]>0)): move=True #If the move is possible, update x,y coordinates of the brick if move: hideBrick() x+=delta_x y+=delta_y showBrick() #Return True or False to confirm if the move took place return move #A function to check for and remove completed lines def checkLines(): global score removeLine=False #check each line one at a time for i in range(0, 5): #If 5 blocks are filled in (9) then a line is complete (9*5=45) if (grid[i][1]+grid[i][2]+grid[i][3]+grid[i][4]+grid[i][5])==45: removeLine = True #Increment the score (10 pts per line) score+=10 #Remove the line and make all lines above fall by 1: for j in range(i,0,-1): grid[j] = grid[j-1] grid[0]=[1,0,0,0,0,0,1] if removeLine: #Refresh the LED screen for i in range(0, 5): for j in range(0, 5): display.set_pixel(i,j,grid[j][i+1]) return removeLine gameOn=True score=0 showBrick() #Main Program Loop - iterates every 50ms while gameOn: sleep(50) frameCount+=1 #Capture user inputs if button_a.is_pressed() and button_b.is_pressed(): rotateBrick() elif button_a.is_pressed(): moveBrick(-1,0) elif button_b.is_pressed(): moveBrick(1,0) #Every 15 frames try to move the brick down if frameCount==15 and moveBrick(0,1) == False: frameCount=0 #The move was not possible, the brick stays in position grid[y][x]=max(brick[0][0],grid[y][x]) grid[y][x+1]=max(brick[0][1],grid[y][x+1]) grid[y+1][x]=max(brick[1][0],grid[y+1][x]) grid[y+1][x+1]=max(brick[1][1],grid[y+1][x+1]) if checkLines()==False and y==0: #The brick has reached the top of the grid - Game Over gameOn=False else: #select a new brick randomly x=3 y=0 brick = choice(bricks) showBrick() if frameCount==15: frameCount=0 #End of Game sleep(2000) display.scroll("Game Over: Score: " + str(score))
注意:测试此代码时,您可能希望删除一些#注释,尤其是当您的micro:bit返回“内存已满”错误时。

这个好玩(=・ω・=)
我是萌新,zip压缩后的文件是什么应用的啊,求解答,求解答嘛
我删过所有注释了,就是没用
( ̄▽ ̄)
为什么我打不开?
第28行代码少了一个左括号,还有pixel00,pixel01,pixel10,pixel11分别是什么变量,没有定义过
已修改,感谢您的指正@daydreaming
感觉玩这种休息的话,还是有点费劲,毕竟点阵太小了……哈哈……不过想法是很不错……
好玩有意思
内存太大(●¯(エ)¯●)
咋把注释删了还是下不进去,内存分配失败呀?
厉害!( ̄▽ ̄)
你好,我删除了注释好像还是无法刷入程序
elif delta_x==1 and x0 and brick[0][0]>0) or (grid[y][x 1 1]>0 and brick[0][1]>0) or (grid[y 1][x 1]>0 and brick[1][0]>0) or (grid[y 1][x 1 1]>0 and brick[1][1]>0)): 這行似乎有錯,也可以發給我嗎? 郵箱: calvin740724@gmail.com
求原文件2911895005@qq.com
zip压缩后的文件是什么应用的啊,求解答,求解答嘛 我删过所有注释了,就是没用 我的邮箱是2416071764@qq.com
求原文件 (方块) 2416071764@qq.com
求源文件,跪谢大佬拜托了qwq,我的邮箱是2921379347@qq.com
能不能发一下源代码给我,我也想要 (=・ω・=)
我的邮箱是2544155047@qq.com
大家一起加个qq
参见大佬╮( ̄▽ ̄)╭
哇,厉害,我也想要。2940838432@qq.com
求源文件572468549@qq.com
你好请发一下源代码,1229708071@qq.com