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

article/2025/8/21 5:55:38

文章目录

  • 一、搭建界面
  • 搭建基础窗体
    • 第一步:创建画板大小
    • 第二步:在画板上作画
  • 绘制俄罗斯方块
    • 第一步:绘制o形俄罗斯方块
    • 第二步:绘制其他形状方块

记录俄罗斯方块小游戏的游戏思路和过程

一、搭建界面

**目标:**搭建基础界面,并在固定位置显示7种形状的俄罗斯方块

搭建基础窗体

使用tkinter库实现基础窗体,不加入任何功能只需如下三行代码

import tkinter as tk
#它可以用来创建一个新的图形界面(GUI)窗口。 tk.Tk() 调用这个函数并创建一个新的Tkinter窗口,可以用来添加其他gui组件,如按钮,文本框,标签等
windows = tk.Tk()#mainloop()函数是python中tkinter模块的主要方法,它将一个python程序作为GUI应用程序运行,该函数可以让你的程序在循环中保持运行,以便捕获用户的输入事件和重绘GUI。
windows.mainloop()

运行结果如下:

image-20230207175943785

第一步:创建画板大小

接下来我们需要在窗体里面,添加一个画布容器用来“装”俄罗斯方块,就是让这个画布作为面板,俄罗斯方块的移动和绘制均在这个画板上实现。

#定义一些参数:
#画板的行数:R=20
#画板的列数:C=12
#俄罗斯方块的大小cell_size=30
#俄罗斯方块的高度:Height=cell_size*C
#俄罗斯方块的宽度:Width=cell_size*R
R=20
C=12
cell_size=30
height=cell_size*R
width=cell_size*C#创建画板
canvas = tk.Canvas(windows, width=width, height=height)# pack()是一个tkinter模块中的函数,它可以自动调整画布大小来适应其中包含的元素。
canvas.pack()
windows.mainloop()

运行结果如下:

image-20230207181848273

第二步:在画板上作画

现在我们可以在画板上作画了,接下里就是把俄罗斯方块画上去

这里分为两个步骤:

第一步:画出一个方块

第二步:画出所有方块

#画出一个方块
def draw_cell_by_cr(canvas, c, r, color="#CCCCCC"):""":param canvas:画板,用于绘制一个方块的Canvas对象:param c:方块的列数:param r:方块的行数:color:方块的颜色:return"""x0 = c * cell_sizey0 = r * cell_sizex1 = c * cell_size + cell_sizey1 = r * cell_size + cell_size# 用于在Canvas上绘制矩形。参数x0,y0,x1,y1是矩形的左上角和右下角的坐标;fill=color设置矩形的填充颜色;outline="white"设置矩形轮廓的颜色;width=2设置矩形边框的粗细。。canvas.create_rectangle(x0, y0, x1, y1, fill=color, outline="white",width=2)#画出所有的方块
#通过两层for循环遍历出画板所有方块
def draw_blank_board(canvas):for ri in range(R):for ci in range(C):draw_cell_by_cr(canvas, ci, ri)

运行效果如下:

image-20230207192010371

绘制俄罗斯方块

俄罗斯方块一共有7种形状

第一步:绘制o形俄罗斯方块

先从最简单的o型俄罗斯方块(即田字格,如下图)

图片

如何确定田字格的位置?

分析过程:

田字型方块由四个格子组成,如果确定了4个格子的坐标,那么就可以确定田字型方块的位置

解决方案:

取4个格子的左下角坐标表示该格子的坐标

4个格子的左下角左边分别为:方块一(-1,0)、方块二(0,0)、方块三(0,-1)、方块四(-1,-1)

以田字格中点为原点,则田字型俄罗斯方块的四个格子的坐标如下图所示

image-20230208104806192

用列表和元组记录为

[(-1, -1), (0, -1), (-1, 0), (0, 0)
]

我们将俄罗斯方块形状字符串和坐标列表的映射关系存到字典SHAPES里(映射关系这里可以理解为一一对应的关系),

同时建立一个字典SHAPESCOLOR,来记录俄罗斯方块形状字符串和颜色的一一对应关系。

由于一个形状可以看成多个方格组成的,所以我们可以新建函数draw_cells用来绘制这个形状

最后选择一个地方来绘制这个形状。

# 定义形状
SHAPES = {"O": [(-1, -1), (0, -1), (-1, 0), (0, 0)],
}# 定义形状的颜色
SHAPESCOLOR = {"O": "blue",
}#该函数的作用是在给定的画布上绘制特定数量的单元格,单元格列表指定了单元格的位置,而颜色指定了单元格的颜色
def draw_cells(canvas, c, r, cell_list, color="#CCCCCC"):"""绘制指定形状指定颜色的俄罗斯方块:param canvas: 画板:param r: 该形状设定的原点所在的行:param c: 该形状设定的原点所在的列:param cell_list: 该形状各个方格相对自身所处位置:param color: 该形状颜色:return:"""for cell in cell_list:cell_c, cell_r = cellci = cell_c + cri = cell_r + r# 判断该位置方格在画板内部(画板外部的方格不再绘制)if 0 <= c < C and 0 <= r < R:draw_cell_by_cr(canvas, ci, ri, color)# 下面这行代码放在draw_blank_board(canvas) 下面
# 任取一个位置,如(3,3)绘制一个o型俄罗斯方块,用于展示
draw_cells(canvas, 3, 3, SHAPES['O'], SHAPESCOLOR['O'])

运行结果如下:

image-20230208111818050

第二步:绘制其他形状方块

俄罗斯方块主流分七种,除去上面的O型,其他六俄罗斯方块如图所示

图片

对应的,要在SHAPES和SHAPESCOLOR中添加其他方块的坐标和颜色,添加后如下

# 定义各种形状
SHAPES = {"O": [(-1, -1), (0, -1), (-1, 0), (0, 0)],"S": [(-1, 0), (0, 0), (0, -1), (1, -1)],"T": [(-1, 0), (0, 0), (0, -1), (1, 0)],"I": [(0, 1), (0, 0), (0, -1), (0, -2)],"L": [(-1, 0), (0, 0), (-1, -1), (-1, -2)],"J": [(-1, 0), (0, 0), (0, -1), (0, -2)],"Z": [(-1, -1), (0, -1), (0, 0), (1, 0)],
}# 定义各种形状的颜色
SHAPESCOLOR = {"O": "blue","S": "red","T": "yellow","I": "green","L": "purple","J": "orange","Z": "Cyan",
}

将原来绘制O型俄罗斯方块处的代码改成如下代码,将这七种俄罗斯方块绘制出来

draw_cells(canvas, 3, 3, SHAPES['O'], SHAPESCOLOR['O'])
draw_cells(canvas, 3, 8, SHAPES['S'], SHAPESCOLOR['S'])
draw_cells(canvas, 3, 13, SHAPES['T'], SHAPESCOLOR['T'])
draw_cells(canvas, 8, 3, SHAPES['I'], SHAPESCOLOR['I'])
draw_cells(canvas, 8, 8, SHAPES['L'], SHAPESCOLOR['L'])
draw_cells(canvas, 8, 13, SHAPES['J'], SHAPESCOLOR['J'])
draw_cells(canvas, 5, 18, SHAPES['Z'], SHAPESCOLOR['Z'])

运行结果如下:

image-20230208112226225完整代码下载地址:Python基于thinker实现的简单的俄罗斯方块小游戏源代码


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

相关文章

thinker board s debian系统安装配置

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

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

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

模型思维-THE MODEL THINKER

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

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

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

Python Thinker GUI的组件的简单总结

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

Thinker 使用详解

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

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、要有一台靶机和一台攻击机&#xff0c;这里的攻击机为kali&#xff0c;靶机为Windows2008。 2、添加一个新的网卡&#xff0c;防止病毒传播到主机。 1、添加网卡&#xff1a; 注意&#xff1a;这里添加的子网ip不能和前面的重复。 3、给虚拟机设置网卡。 两台虚拟机要设置为…

老生常谈,永恒之蓝-winxp

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

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

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

永恒之蓝--Windows7

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

win7永恒之蓝

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

永恒之蓝从渗透的复现

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

永恒之蓝(Eternal Blue)复现

永恒之蓝介绍 什么是永恒之蓝 永恒之蓝&#xff08;Eternal Blue&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子通过改造“永恒之蓝…

kali与永恒之蓝

kali永恒之蓝攻击 写在前面一、永恒之蓝是何方神圣&#xff1f;二、神马是SMB协议&#xff1f;三、MSF四、攻击步骤1、攻击主机与靶机配置2、攻击步骤 五、种植后门 写在前面 这是我的第一篇CSDN博客&#xff0c;最近又参加了一个CTF比赛&#xff0c;当然&#xff0c;纯属兴趣爱…

利用虚拟机复现漏洞 “永恒之蓝”

利用虚拟机复现漏洞“永恒之蓝” 攻击&#xff1a;kali Linux 2020.3 靶机&#xff1a;Windows Server 2008 R2 x64 下面详细讲述测试的过程。 —— —— “ 永恒之蓝 ”简介 利用 Windows 系统的 SMB 漏洞可以获取系统最高权限。于 2017 年在全球的范围内大面积爆发&#…

永恒之蓝简介

永恒之蓝是指2017年4月14日晚&#xff0c;黑客团体Shadow Brokers&#xff08;影子经纪人&#xff09;公布一大批网络攻击工具&#xff0c;其中包含“永恒之蓝”工具&#xff0c;“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日&#xff0c;不法分子通过改…

永恒之蓝-永恒之蓝漏洞(linux)

扫描存活主机 fping -a -g 192.168.52.1 192.168.56.254 &#xff0c;因为kali是192.168.52.134&#xff0c;所以win2003是192.168.52.133 像192.168.52.2或者192.168.52.1这种不用管&#xff0c;一般是网关 开启msfconsole 搜索载荷&#xff0c;永恒之蓝的载荷是ms17_010 …

永恒之蓝漏洞复现

一&#xff0c;永恒之蓝 一、漏洞简介\n1、永恒之蓝介绍:\n永恒之蓝漏洞&#xff08;MS17-010&#xff09;&#xff0c;它的爆发源于 WannaCry 勒索病毒的诞生&#xff0c;该病毒是不法分子利用NSA&#xff08;National Security Agency&#xff0c;美国国家安全局&#xff09…