二、让界面动起来,Python基于thinker实现的简单的俄罗斯方块小游戏

界面动起来

**功能:**如何让方块「动起来」?

分析过程:

要想让方块动起来,需要实现以下两点:

  1. 定时刷新页面
  2. 移动页面内部的俄罗斯方块

定时刷新页面

实现定时刷新页面,很简单写一个方法用于循环刷新,再定时调用此部分代码写在原来代码最后的win.mainloop之前就好

#页面刷新的毫秒间隔
FPS = 500

def game_loop():
    windows.update()

    #用于展示刷新,后续删掉
    import time
    print(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 = direction
    new_c, new_r = c+dc, r+dr
    block['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实现的简单的俄罗斯方块小游戏源代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员柳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值