python tkinter实现俄罗斯方块基础版——二、界面动起来

python俄罗斯方块教程-100行代码 使用tkinter库实现基础窗体,不加入任何功能只需如下三行代码运行代码生成的窗口如下接下来我们需要在窗体里面,添加一个画布容器用来“装”俄罗斯方块,就是让这个画布作为面板,俄罗斯方块的移动和绘制均在这个画板上实现。这里我们设定一些俄罗斯方块游戏参数行数为R(取20)列数为C(取12)俄罗斯方块的边长为cell_size(取30)通过tkinger的画布类Canvas实现的代码如下运行代码生成的窗口如下,此时界面的长宽就变成我们所需要的了接下来在画板上绘制俄罗斯方块空白位。 阅读详情

总目录

一、基础界面

二、界面动起来

三、生成、移动、固定、消除

四、消除与得分

======================= 大爽歌作,made by big shuang =======================

0、思路

要让游戏界面动起来,需要实现两点

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

这块说一下,光实现一的话理论上页面也算动起来了,但是如果界面内容不变,每次新的页面和旧的界面看起来是一样的,给人的观看感觉跟没有动没有区别

所以必须要实现2,来更改界面内容,给人“动”起来的感觉

1、定时刷新页面

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

FPS = 500  # 刷新页面的毫秒间隔
def game_loop():
    win.update()
 
    # ===用于展示刷新,后续会删掉===
    import time
    print(time.ctime())
    # ===========================
 
    win.after(FPS, game_loop)
 
win.update()
win.after(FPS, game_loop) # 在FPS 毫秒后调用 game_loop方法

此时运行发现命令行中会有如下输出,说明这个页面确实是每隔500ms刷新了一次

Thu Nov 28 23:32:50 2019
Thu Nov 28 23:32:51 2019
Thu Nov 28 23:32:51 2019
Thu Nov 28 23:32:52 2019
Thu Nov 28 23:32:52 2019
Thu Nov 28 23:32:53 2019
Thu Nov 28 23:32:53 2019

但是由于我之前说的,每次刷新后页面的内容是没有变化的,给观众的感觉还是更没动一样
所以需要配合每次刷新,移动俄罗斯方块的位置

2、移动俄罗斯方块

对于某个俄罗斯方块,要绘制出来需要知道它的位置和类型,以及内部的各个方格。
这三个数据可以用字典存起来,这里我们规定格式如下

a_block = {
    'kind': 'O',  # 对应俄罗斯方块的类型
    'cell_list': SHAPES['O'],  # 对应俄罗斯方块的各个方格
    'cr': [3, 3]  # 对应横纵坐标,以左上角为原点,水平向右为横坐标轴正方向,竖直向下为纵坐标轴正方向
}

此时一个这样的字典其实就可以看做一个俄罗斯方块对象
然后我们再建一个专门的方法draw_block_move,来绘制俄罗斯方块的移动
其实移动也比较简单,就是清掉旧位置已经绘制的俄罗斯方块,再在新位置绘制新的俄罗斯方块就好
然后修改下game_loop方法
更新修改部分如下

# 在draw_blank_board(canvas)语句下面添加如下语句
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])
 
 
a_block = {
    'kind': 'O',  # 对应俄罗斯方块的类型
    'cell_list': SHAPES['O'],  # 对应俄罗斯方块的各个方格
    'cr': [3, 3]  # 对应横纵坐标,以左上角为原点,水平向右为横坐标轴正方向,竖直向下为纵坐标轴正方向
}
 
draw_block_move(canvas, a_block)
 
 
# 修改原来的game_loop方法如下
def game_loop():
    win.update()
 
    down = [0, 1]
    draw_block_move(canvas, a_block, down)
 
    win.after(FPS, game_loop)

此时的完整代码已上传github,点击查看,运行代码就发现界面中的俄罗斯方块动起来了,动画如下
在这里插入图片描述

【Python】用Python实现一个俄罗斯方块游戏  俄罗斯方块游戏,使用Python实现,总共有350+行代码,实现了俄罗斯方块游戏的基本功能,同时会记录所花费时间,消去的总行数,所得的总分,还包括一个排行榜,可以查看最高记录。排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等。 附源码:from Tkinter import *from tkMessageBox import *import rand 阅读详情

相关推荐

Tetris:俄罗斯方块教程,基于python tkinter实现

俄罗斯方块 俄罗斯方块教程,基于python tkinter实现 1基础版 对应文件夹:1_BASIC本项目基础版最终效果见本人b站投稿部分 本文已录制的视频教程上传b站: ://www.bilibili.com/video/av81480858。视频部分讲解的比较详细,觉得文字版不够详细的可以去看视频。 3 AI自动玩俄罗斯方块 对应文件夹:3_AI运行效果见本人b站投稿 其中multi_tetris.py对应宽屏多个 tetris_by_class.py对应分开竖屏

python tkinter实现俄罗斯方块基础版——四、消除与得分

1、消除与得分 最后,要实现俄罗斯方块的消除,就是当一行满了的时候,需要消除这行,同时在通过窗口标题展示得分情况 这里需要添加check_row_completed方法判断指定行是否可以消除 同时添加check_and_clear方法检查所有行并消除 而消除之后,我们需要在画板上重新绘制一遍消除后剩余的俄罗斯方块 这里最好将之前的draw_blank_board方法修改为,可以绘制面板上残留的俄罗...

大爽老师的博客 4675

python实现简易3D方块动画

实现了3D方块动画旋转,自己也可以输出角度来控制。

Python: 实现鼠标点击tkinter窗口任意位置拖动

实现鼠标点击tkinter窗口任意位置进行拖动

ningqingzy的博客 3814

python实现简单俄罗斯方块

主要为大家详细介绍了python实现简单俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

推荐系统公平性之流行度偏差(fairness in recommender systems -- popularity bias)

主要参考论文:《The Unfairness of Popularity Bias in Recommendation》 RMSE@RecSys 2019 流行度偏差是什么 先定义流行物品和非流行物品。下图是(Movielens 1M)数据集中物品的评分情况。 图的横坐标表示不同物品,纵坐标表示物品的评分次数。可以看出只有少部分物品得到了很多的评分,大部分曲线尾部的物品都只有少量的评分,我们也把这部分物品称为长尾物品。在本文中,我们取曲线的前20%对应的物品为流行物品,剩余的为非流行物品(长尾物品)。 然

beilizhang的博客 5275

用python自带的tkinter做游戏(二)—— 俄罗斯方块 篇

俄罗斯方块相信大家都玩过

znix1116的博客 6496

谷粒商城 - 个人笔记(集群部署篇一)

电商后台管理系统+电商系统,掌握微服务的全套方案。该系统有商品服务、仓储服务、订单服务、购物车服务、检索服务、认证中心服务、网关服务、用户服务、秒杀服务、第三方服务。使用SpringBoot+SpringCloud并配套SpringCloud Alibaba系列,引入全套微服务治理方案:Nacos注册中心/配置中心、Feign远程调用、Gateway网关、Redisson缓存、基于ElasticSearch7全文检索、异步编排与线程池、RabbitMQ柔性事务方案、Redisson分布式锁、分布式信号量等。

知行 4008

python tkinter实现俄罗斯方块拓展——四种游戏模式

本文代码基于python tkinter实现俄罗斯方块基础版——四、消除与得分 的最终代码, 建议先读懂基础版的代码。 对于基础很好的,可以简单阅读这里的核心梳理 0、核心代码梳理 俄罗斯方块中的核心方法如下,该方法实现界面的刷新,可以认为是整个代码的核心(粗略比喻为控制中心)。后面的四种模式基本上或多或少是与该方法关联的。 def game_loop(): win.update() global current_block if current_block is None:

大爽老师的博客 2147

Gromacs基础教程一:入门建议

本系列教程针对的群体:非计算化学专业,而是偏生物方向的、有少量分子动力学模拟需求的人群。

m0_67843839的博客 8574

从打印攻击到视频重放:手把手用OULU-NPU训练你的第一个活体检测模型

本文详细介绍了如何使用OULU-NPU数据集训练活体检测模型,以应对打印攻击和视频重放等安全威胁。通过PyTorch框架,从环境准备、数据加载、预处理到模型架构设计,手把手教你构建一个高效的双流网络,结合CNN和LSTM技术,提升模型在多种攻击场景下的检测准确率。

weixin_29092031的博客 385

python tkinter实现俄罗斯方块基础版——一、基础界面

本教程为我在b站投稿的视频教程av81480858 对应的文字版,项目最终效果见投稿简介部分,视频部分讲解的比较详细,觉得文字版不够详细的可以去看视频。 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 。其中1234分别对应本项目教程每一部分的最终代码,所以想看完整代码直接看004.py就好。 本项目通过pyt...

大爽老师的博客 1万+

Quartus Prime 软件 USB-blaster 驱动安装失败【已解决】

一、安装步骤 1、将FPGA 开发板插入电脑时,未安装驱动的电脑会提示安装usb-Blaster驱动。Windows搜索框打开设备管理器,在“其他设备”下会发现黄色感叹号的“USB-Blaster”的设备驱动。 2、Quartus系列软件的安装目录下自带USB-blaster的驱动程序,右键更新驱动,选择驱动目录:(D:\intelFPGA\18.1\quartus\drivers\usb-blaster,文件位置和版本请按照自己安装的路径选择),点击Next开始安装。 3、安装成功,重启电脑即可使

adolphwang_909086的博客 6万+

Python课程设计之俄罗斯方块

Python课程设计之俄罗斯方块 软件需求:Python环境 压缩包内含:源代码、打包好的可执行文件、文档报告

满天星的博客 1万+

【浅读论文-红外和可见光图像融合-CNN】Infrared and Visible Image Fusion using a Deep Learning Framework

1.这篇是2018年ICPR会议上发表的一篇文章1。博主个人觉得这算比较早期在VIF(红外光和可见光图像融合)中加入了深度学习这一模型的论文。2.这篇文章并不是完全使用深度学习的模型,模型主体在图像分解和融合仍然采用传统的方法,只有其中一个分支在特征提取和重建方面用到了VGG网络。3.论文地址4.代码地址本文提出了基于深度学习框架的一种新算法。本文提出使用下述论文中Image fusion with guided filtering2中的分解方法将源图像分解为基本部分和细节内容。

一枚博鼠的博客 1708

单细胞转录组数据分析中的基因ID注释转换问题:如何解决才能注释所有的UMIcount数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1126

python制作俄罗斯方块

python制作俄罗斯方块

jakelihua 1万+

YOLOv8【第七章:损失函数篇·第1节】一文搞定,IoU系列损失函数!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1199

用python写的俄罗斯方块游戏

python,俄罗斯方块,游戏,基础,漂亮

hongccsdn的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

用100行python代码制作俄罗斯方块游戏,俄罗斯方块游戏教程-附完整代码

本项目通过python自带库tkinter实现,无需安装第三方库本项目基于python3版本开发(如果你的是python2.x,运行可能会有问题)

2401_85737382的博客 1641

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python tkinter实现俄罗斯方块基础版——三、生成、移动、固定、消除

1、随机生成俄罗斯方块 这里需要导入python自带的随机库random 使用其中的choice方法,从俄罗斯方块形状列表中随机选出一个。 该方法源码说明如图 首先我们需要删除原来的位于game_loop方法上面的a_block = ... 和draw_block_move(canvas, a_block)这2行代码(这两行代码俄罗斯方块是在固定位置,按照指定形状生成的,需要删掉这部分代码), ...

大爽老师的博客 6369

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

用100行Python代码,制作游戏《俄罗斯方块》!

用100行Python代码,制作游戏《俄罗斯方块》!

m0_75067840的博客 1868

python俄罗斯方块教程_python tkinter实现俄罗斯方块 基础版

本项目最终效果见本人b站投稿av81480858 简介部分本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 。其中1234分别对应本项目教程每一部分的最终代码,所以想看完整代码直接看004.py就好。本文已录制视频教程上传b站:https://www.bilibili.com/video/av81480858 。视频...

weixin_39517520的博客 885

【Python游戏】用Python制作一个俄罗斯方块游戏

本项目基于python3版本开发(如果你的是python2.x,运行可能会有问题)

GLB_0627的博客 3101
上一篇: python tkinter实现俄罗斯方块基础版——三、生成、移动、固定、消除
下一篇: python tkinter实现俄罗斯方块基础版——四、消除与得分
大爽歌
博客等级 码龄9年 422粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值