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

article/2025/8/21 5:56:54

文章目录

  • 界面动起来
  • 定时刷新页面
  • 移动俄罗斯方块

界面动起来

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

分析过程:

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

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

定时刷新页面

实现定时刷新页面,很简单写一个方法用于循环刷新,再定时调用此部分代码写在原来代码最后的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实现的简单的俄罗斯方块小游戏源代码


http://chatgpt.dhexx.cn/article/ZMkl7Cqm.shtml

相关文章

三、生成随机方块,Python基于thinker实现的简单的俄罗斯方块小游戏

文章目录 生成第一步:随机生成方块对象第二步:修改游戏运行方法 固定第一步:记录固定的方块第二步:修改check_move方法 左右移动第一步:左右移动方块第二步:绑定键盘 旋转第一步:添加旋转方法第…

【G-thinker】G-thinker部分源码解析

一、main 子图匹配程序run.cpp中主要使用到worker.h和comper.h分别对应线程和进程单位,接下来我们从main函数入手解析源码 从主函数可以看到,子图匹配程序中GMatchWorker继承了worker,主函数声明了workerparams并且传入了路径和线程参数&am…

python用thinker库制作一个进制转换器(可打包exe)

进制类型分为: 二进制 字母B表示 八进制 字母O表示 十进制 字母D表示 十六机制 字母H表示 进制转换之间很麻烦,还得计算,如果可以做一个进制转换器多nice,其实也不难,就利用一个tkinter库就能制作,废话不多…

Thinker Board 2开发板上使用奥比中光 astra 深度相机

Thinker Board 2 国产开发板 arm架构 上使用奥比中光 astra 深度相机 准备工作 1、下载astraSDK 选择linux_arm 下载 https://developer.orbbec.com.cn/download.html?id53 2、下载openNI https://dl.orbbec3d.com/dist/openni2/OpenNI_2.3.0.66.zip 开始安装 1、安装fre…

think

我167,97斤,胸d,腰很细,反手轻松摸肚脐那种,骨架小,总结就是身高刚好人瘦胸大屁股大腿细腰细肤白。走路腰杆能挺到天上,气质挺好。漂亮女生太多了,想取胜只能从气质下手了。脸呢&…

Python基于thinker实现的简单的俄罗斯方块小游戏源代码:一、搭建界面

文章目录 一、搭建界面搭建基础窗体第一步:创建画板大小第二步:在画板上作画 绘制俄罗斯方块第一步:绘制o形俄罗斯方块第二步:绘制其他形状方块 记录俄罗斯方块小游戏的游戏思路和过程 一、搭建界面 **目标:**搭建基础…

thinker board s debian系统安装配置

thinker board s debian系统安装配置 好多年前买了一块thinker board s,装安卓系统来用,结果经常性卡死不知道为啥,可能是供电问题,也可能是系统bug,之后就吃灰不怎么用了,最近想装一个计算服务器&#xff…

python利用thinker制作多页面切换的桌面应用实例教程

本篇文章主要讲解,python利用thinker制作多页面的桌面实例教程。可以在一个主界面中相互进行切换和设置相关的表单信息,布局等方法 代码片段的实际效果 视频演示: python使用thinker制作多窗口代码片段实例效果 gif动态图: 构建…

模型思维-THE MODEL THINKER

序言这本书是怎样写成的 Part1为什么需要模型思维 01做一个多模型思考者 使用模型来思考能够带给你的,远远不仅仅是工作绩效的提高。它还会使你成为一个更优秀的人,让你拥有更强的思考能力。你将更擅长评估层出不穷的经济事件和政治事件,更能…

展示一下用thinker做小软件的UI

有一个大坑给大家分享一下。ttk.Treeview可以改变列宽,却不能改变某一行的行高(可以改变整体的行高),其实就是Treeview没有自动换行功能,很痛苦,很折磨,......我一度放弃thinker,因为…

Python Thinker GUI的组件的简单总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Label二、Button三、Entry四、Text五、CheckButton六、RadioButton七、Menu八、Canvas九、Scale 前言 例如:随之前学过Java的基础,…

Thinker 使用详解

文章目录 Tinker基本介绍它主要包含以下几部分:为什么使用 Tinker Tinker 执行原理及流程简单的使用 Tinker1,在项目的gradle.properties 中添加2,在项目的 gradle中添加:3,在 app 中的 gradle 中添加:4,接着进行初始化,新建一个类…

python界面编程-thinker

一、介绍 thinker是python内置界面库不需要额外安装 二、控件使用 1、窗口 import tkintertop tkinter.Tk()#创建窗口 top.mainloop()#消息循环2、按钮 from tkinter import *def button_event():print("按钮按下\n")return#创建窗口 main_window Tk() #设置窗口…

python thinker(菜单,滚动条,回调函数,对话框)

菜单menu from tkinter import * root Tk() def lab():label0Label(root,text"hello world")label0.grid(column0) root.geometry("800x480")#窗口大小menu0Menu(root)#参数是父级控件 for x in [文件,编辑,视图]:menu0.add_command(labelx,commandlab)#…

永恒之蓝(勒索病毒)

1、要有一台靶机和一台攻击机,这里的攻击机为kali,靶机为Windows2008。 2、添加一个新的网卡,防止病毒传播到主机。 1、添加网卡: 注意:这里添加的子网ip不能和前面的重复。 3、给虚拟机设置网卡。 两台虚拟机要设置为…

老生常谈,永恒之蓝-winxp

老生常谈,永恒之蓝-winxp 环境说明: 攻击机:kali 靶机:windows xp sp2 靶机开放服务:无,IE浏览器版本 6.0 信息收集: 扫描当前网段存活主机,发现目标主机:IP&#xf…

msf渗透测试学习-与永恒之蓝漏洞案例

MSF是Metasploit Framework的缩写,是一款广泛使用的渗透测试工具,具有强大的攻击功能。它提供了一个模块化的平台,通过将各种攻击载荷、漏洞利用和辅助工具组装在一起,可用于模拟各种攻击,测试系统安全性,也…

永恒之蓝--Windows7

永恒之蓝是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。通过永恒之蓝漏洞会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务…

win7永恒之蓝

一 使用msfconsole命令开启MSF,并使用search命令搜索永恒之蓝模块 search ms17-010 二 :使用搜索出来的第三个模块来进行探测目标是否存在永恒之蓝漏洞,并设置好以下参数进行扫描测试 >>>use auxiliary/scanner/smb/smb_ms17_010 …

永恒之蓝从渗透的复现

永恒之蓝又称为勒索病毒,同样这个漏洞成为了黑客现在训练的好方式(记住千万不可以攻击别人的电脑),这个漏洞在win7中十分常见,而永恒之蓝对应的是445端口,所以说我们将用win7虚拟机(受害者&…