文章目录
- 界面动起来
- 定时刷新页面
- 移动俄罗斯方块
界面动起来
**功能:**如何让方块「动起来」?
分析过程:
要想让方块动起来,需要实现以下两点:
- 定时刷新页面
- 移动页面内部的俄罗斯方块
定时刷新页面
实现定时刷新页面,很简单写一个方法用于循环刷新,再定时调用此部分代码写在原来代码最后的win.mainloop之前就好
#页面刷新的毫秒间隔
FPS = 500def game_loop():windows.update()#用于展示刷新,后续删掉import timeprint(time.ctime())windows.after(FPS, game_loop)# 在FPS 毫秒后调用 game_loop方法
windows.after(FPS, game_loop)
运行结果:
Wed Feb 8 14:49:09 2023
Wed Feb 8 14:49:09 2023
Wed Feb 8 14:49:10 2023
Wed Feb 8 14:49:10 2023
Wed Feb 8 14:49:11 2023
Wed Feb 8 14:49:12 2023
Wed Feb 8 14:49:12 2023
移动俄罗斯方块
**功能:**让方块动起来!
思路分析:
对于某个俄罗斯方块,要绘制出来需要知道它的位置和类型,以及内部的各个方格。
这三个数据可以用字典存起来,这里我们规定格式如下:
#a_block是一个代表方块“O”的字典,它包含三个键:kind,cell_list和cr。kind代表方块的种类,即“O”;cell_list标识所有“O”方块的形状,由SHAPES['O']表示;cr则表示“O”变换的中心点,即[3, 3]。
a_block = {'kind': 'O', # 对应俄罗斯方块的类型'cell_list': SHAPES['O'], # 对应俄罗斯方块的各个方格'cr': [3, 3] # 对应横纵坐标,以左上角为原点,水平向右为横坐标轴正方向,竖直向下为纵坐标轴正方向
}
此时一个这样的字典其实就可以看做一个俄罗斯方块对象
然后我们再建一个专门的方法draw_block_move,来绘制俄罗斯方块的移动
其实移动也比较简单,就是清掉旧位置已经绘制的俄罗斯方块,再在新位置绘制新的俄罗斯方块就好
然后修改下game_loop方法
更新修改部分如下:
#创建一个俄罗斯方块对象
a_block = {'kind': 'O', # 对应俄罗斯方块的类型'cell_list': SHAPES['O'], # 对应俄罗斯方块的各个方格'cr': [3, 3] # 对应横纵坐标,以左上角为原点,水平向右为横坐标轴正方向,竖直向下为纵坐标轴正方向
}#def draw_block_move(canvas, block, direction=[0, 0]):"""绘制向指定方向移动后的俄罗斯方块:param canvas: 画板:param block: 俄罗斯方块对象:param direction: 俄罗斯方块移动方向:return:"""shape_type = block['kind']c, r = block['cr']cell_list = block['cell_list']# 移动前,先清除原有位置绘制的俄罗斯方块,也就是用背景色绘制原有的俄罗斯方块draw_cells(canvas, c, r, cell_list)dc, dr = directionnew_c, new_r = c+dc, r+drblock['cr'] = [new_c, new_r]# 在新位置绘制新的俄罗斯方块就好draw_cells(canvas, new_c, new_r, cell_list, SHAPESCOLOR[shape_type])def game_loop():windows.update()#用于展示刷新,后续删掉# import time# print(time.ctime())down = [0, 1]draw_block_move(canvas, a_block, down)windows.after(FPS, game_loop)
运行结果如下:
完整代码下载地址:Python基于thinker实现的简单的俄罗斯方块小游戏源代码