网站建设制作 南京公司wordpress 激活

web/2025/9/28 14:38:51/文章来源:
网站建设制作 南京公司,wordpress 激活,厦门互联网公司排名,学校门户网站流程建设方案文章目录 连连看小游戏#xff1a;用Python Tkinter打造的精彩游戏体验游戏简介技术背景MainWindow类:职责:方法:Point类: 主执行部分:完整代码#xff1a;总结#xff1a; 连连看小游戏#xff1a;用Python Tkinter打造的精彩游戏体验 在丰富多彩的游戏世界中#xff0c… 文章目录 连连看小游戏用Python Tkinter打造的精彩游戏体验游戏简介技术背景MainWindow类:职责:方法:Point类: 主执行部分:完整代码总结 连连看小游戏用Python Tkinter打造的精彩游戏体验 在丰富多彩的游戏世界中连连看作为一种经典的解谜游戏一直备受欢迎。连连看的玩法简单却富有挑战性通过消除相同图标的配对玩家可以不断地挑战自己的观察力和反应速度。 游戏简介 连连看是一种考验玩家眼力和逻辑思维的益智游戏也是一种常见的休闲娱乐方式。游戏的基本规则是通过连接两个相同图标的路径消除所有的图标。路径连接可以是直线、一次拐弯或两次拐弯。只有在路径不被其他图标遮挡的情况下连接才会有效。 技术背景 本次实现采用了Python编程语言并利用Tkinter库作为图形用户界面的构建工具。Tkinter是Python内建的GUI工具包它提供了创建窗口、按钮、菜单等常见GUI元素的功能极大地简化了图形界面的开发过程。通过结合Python的易读性和Tkinter的灵活性我们可以迅速实现一个简单而有趣的连连看小游戏。 MainWindow类: 职责: 代表游戏的主窗口。使用Tkinter处理GUI元素。管理游戏的初始化、地图绘制、处理用户点击以及检查游戏结束条件。 代码示例 class MainWindow():# ... (其他代码)def __init__(self):self.root tk.Tk()# ... (其他初始化代码)def __addComponets(self):self.menubar tk.Menu(self.root, bglightgrey, fgblack)# ... (其他菜单初始化代码)self.canvas tk.Canvas(self.root, bgwhite, width450, height450)self.canvas.pack(sidetk.TOP, pady5)self.canvas.bind(Button-1, self.clickCanvas)# ... (其他画布初始化代码)def centerWindow(self, width, height):# ... (屏幕居中代码)def file_new(self, eventNone):# ... (新游戏初始化代码)def clickCanvas(self, event):# ... (处理画布点击事件的代码)# ... (其他方法)方法: __init__: 初始化主窗口并设置组件。__addComponets: 添加组件如菜单和画布到窗口。centerWindow: 将窗口居中于屏幕。file_new: 初始化并开始新游戏。clickCanvas: 处理游戏画布上的鼠标点击。isGameEnd: 检查游戏是否结束。extractSmallIconList: 从较大的图像中加载并提取小图标。iniMap: 使用随机图标初始化游戏地图。drawMap: 在画布上绘制游戏地图。 包含用于坐标计算、绘制选定区域、清除连接块以及检查地图中空白区域的各种辅助方法。 Point类: 表示游戏网格上的二维点。提供用于检查有用性、相等性、克隆和更改坐标的方法。 class Point():def __init__(self, x, y):self.x xself.y ydef isUserful(self):return self.x 0 and self.y 0def isEqual(self, point):return self.x point.x and self.y point.ydef clone(self):return Point(self.x, self.y)def changeTo(self, point):self.x point.xself.y point.y方法: __init__: 使用x和y坐标初始化点。isUserful: 检查点的坐标是否为非负数。isEqual: 检查两个点是否相等。clone: 创建点的克隆。changeTo: 更改点的坐标以匹配另一个点。 主执行部分: 创建MainWindow类的实例以启动游戏。 MainWindow()完整代码 #!/usr/bin/env python # -*- coding: utf-8 -*- # Date : 2017-10-02 15:19:24 # Author : Salamander (1906747819qq.com) # Link : http://blog.51lucy.comimport os, random import tkinter as tk import tkinter.messagebox from PIL import Image, ImageTkclass MainWindow():__gameTitle 连连看游戏__windowWidth 700__windowHeigth 500__icons []__gameSize 10 # 游戏尺寸__iconKind __gameSize * __gameSize / 4 # 小图片种类数量__iconWidth 40__iconHeight 40__map [] # 游戏地图__delta 25__isFirst True__isGameStart False__formerPoint NoneEMPTY -1NONE_LINK 0STRAIGHT_LINK 1ONE_CORNER_LINK 2TWO_CORNER_LINK 3def __init__(self):self.root tk.Tk()self.root.title(self.__gameTitle)self.centerWindow(self.__windowWidth, self.__windowHeigth)self.root.minsize(460, 460)self.__addComponets()self.extractSmallIconList()self.root.mainloop()def __addComponets(self):self.menubar tk.Menu(self.root, bglightgrey, fgblack)self.file_menu tk.Menu(self.menubar, tearoff0, bglightgrey, fgblack)self.file_menu.add_command(label新游戏, commandself.file_new, acceleratorCtrlN)self.menubar.add_cascade(label游戏, menuself.file_menu)self.root.configure(menuself.menubar)self.canvas tk.Canvas(self.root, bg white, width 450, height 450)self.canvas.pack(sidetk.TOP, pady 5)self.canvas.bind(Button-1, self.clickCanvas)def centerWindow(self, width, height):screenwidth self.root.winfo_screenwidth()screenheight self.root.winfo_screenheight()size %dx%d%d%d % (width, height, (screenwidth - width)/2, (screenheight - height)/2)self.root.geometry(size)def file_new(self, eventNone):self.iniMap()self.drawMap()self.__isGameStart Truedef clickCanvas(self, event):if self.__isGameStart:point self.getInnerPoint(Point(event.x, event.y))# 有效点击坐标if point.isUserful() and not self.isEmptyInMap(point):if self.__isFirst:self.drawSelectedArea(point)self.__isFirst Falseself.__formerPoint pointelse:if self.__formerPoint.isEqual(point):self.__isFirst Trueself.canvas.delete(rectRedOne)else:linkType self.getLinkType(self.__formerPoint, point)if linkType[type] ! self.NONE_LINK:# TODO Animationself.ClearLinkedBlocks(self.__formerPoint, point)self.canvas.delete(rectRedOne)self.__isFirst Trueif self.isGameEnd():tk.messagebox.showinfo(You Win!, Tip)self.__isGameStart Falseelse:self.__formerPoint pointself.canvas.delete(rectRedOne)self.drawSelectedArea(point)# 判断游戏是否结束def isGameEnd(self):for y in range(0, self.__gameSize):for x in range(0, self.__gameSize):if self.__map[y][x] ! self.EMPTY:return Falsereturn True提取小头像数组def extractSmallIconList(self):root_dir os.getcwd()imagePath os.path.join(root_dir, images, NARUTO.png)imageSouce Image.open(imagePath)for index in range(0, int(self.__iconKind)):region imageSouce.crop((self.__iconWidth * index, 0, self.__iconWidth * index self.__iconWidth - 1, self.__iconHeight - 1))self.__icons.append(ImageTk.PhotoImage(region))初始化地图 存值为0-24def iniMap(self):self.__map [] # 重置地图tmpRecords []records []for i in range(0, int(self.__iconKind)):for j in range(0, 4):tmpRecords.append(i)total self.__gameSize * self.__gameSizefor x in range(0, total):index random.randint(0, total - x - 1)records.append(tmpRecords[index])del tmpRecords[index]# 一维数组转为二维y为高维度for y in range(0, self.__gameSize):for x in range(0, self.__gameSize):if x 0:self.__map.append([])self.__map[y].append(records[x y * self.__gameSize])根据地图绘制图像def drawMap(self):self.canvas.delete(all)for y in range(0, self.__gameSize):for x in range(0, self.__gameSize):point self.getOuterLeftTopPoint(Point(x, y))im self.canvas.create_image((point.x, point.y), imageself.__icons[self.__map[y][x]], anchornw, tags im%d%d % (x, y))获取内部坐标对应矩形左上角顶点坐标def getOuterLeftTopPoint(self, point):return Point(self.getX(point.x), self.getY(point.y))获取内部坐标对应矩形中心坐标def getOuterCenterPoint(self, point):return Point(self.getX(point.x) int(self.__iconWidth / 2), self.getY(point.y) int(self.__iconHeight / 2))def getX(self, x):return x * self.__iconWidth self.__deltadef getY(self, y):return y * self.__iconHeight self.__delta获取内部坐标def getInnerPoint(self, point):x -1y -1for i in range(0, self.__gameSize):x1 self.getX(i)x2 self.getX(i 1)if point.x x1 and point.x x2:x ifor j in range(0, self.__gameSize):j1 self.getY(j)j2 self.getY(j 1)if point.y j1 and point.y j2:y jreturn Point(x, y)选择的区域变红point为内部坐标def drawSelectedArea(self, point):pointLT self.getOuterLeftTopPoint(point)pointRB self.getOuterLeftTopPoint(Point(point.x 1, point.y 1))self.canvas.create_rectangle(pointLT.x, pointLT.y, pointRB.x - 1, pointRB.y - 1, outline red, tags rectRedOne)消除连通的两个块def ClearLinkedBlocks(self, p1, p2):self.__map[p1.y][p1.x] self.EMPTYself.__map[p2.y][p2.x] self.EMPTYself.canvas.delete(im%d%d % (p1.x, p1.y))self.canvas.delete(im%d%d % (p2.x, p2.y))地图上该点是否为空def isEmptyInMap(self, point):if self.__map[point.y][point.x] self.EMPTY:return Trueelse:return False获取两个点连通类型def getLinkType(self, p1, p2):# 首先判断两个方块中图片是否相同if self.__map[p1.y][p1.x] ! self.__map[p2.y][p2.x]:return { type: self.NONE_LINK }if self.isStraightLink(p1, p2):return {type: self.STRAIGHT_LINK}res self.isOneCornerLink(p1, p2)if res:return {type: self.ONE_CORNER_LINK,p1: res}res self.isTwoCornerLink(p1, p2)if res:return {type: self.TWO_CORNER_LINK,p1: res[p1],p2: res[p2]}return {type: self.NONE_LINK}直连def isStraightLink(self, p1, p2):start -1end -1# 水平if p1.y p2.y:# 大小判断if p2.x p1.x:start p2.xend p1.xelse:start p1.xend p2.xfor x in range(start 1, end):if self.__map[p1.y][x] ! self.EMPTY:return Falsereturn Trueelif p1.x p2.x:if p1.y p2.y:start p2.yend p1.yelse:start p1.yend p2.yfor y in range(start 1, end):if self.__map[y][p1.x] ! self.EMPTY:return Falsereturn Truereturn Falsedef isOneCornerLink(self, p1, p2):pointCorner Point(p1.x, p2.y)if self.isStraightLink(p1, pointCorner) and self.isStraightLink(pointCorner, p2) and self.isEmptyInMap(pointCorner):return pointCornerpointCorner Point(p2.x, p1.y)if self.isStraightLink(p1, pointCorner) and self.isStraightLink(pointCorner, p2) and self.isEmptyInMap(pointCorner):return pointCornerdef isTwoCornerLink(self, p1, p2):for y in range(-1, self.__gameSize 1):pointCorner1 Point(p1.x, y)pointCorner2 Point(p2.x, y)if y p1.y or y p2.y:continueif y -1 or y self.__gameSize:if self.isStraightLink(p1, pointCorner1) and self.isStraightLink(pointCorner2, p2):return {p1: pointCorner1, p2: pointCorner2}else:if self.isStraightLink(p1, pointCorner1) and self.isStraightLink(pointCorner1, pointCorner2) and self.isStraightLink(pointCorner2, p2) and self.isEmptyInMap(pointCorner1) and self.isEmptyInMap(pointCorner2):return {p1: pointCorner1, p2: pointCorner2}# 横向判断for x in range(-1, self.__gameSize 1):pointCorner1 Point(x, p1.y)pointCorner2 Point(x, p2.y)if x p1.x or x p2.x:continueif x -1 or x self.__gameSize:if self.isStraightLink(p1, pointCorner1) and self.isStraightLink(pointCorner2, p2):return {p1: pointCorner1, p2: pointCorner2}else:if self.isStraightLink(p1, pointCorner1) and self.isStraightLink(pointCorner1, pointCorner2) and self.isStraightLink(pointCorner2, p2) and self.isEmptyInMap(pointCorner1) and self.isEmptyInMap(pointCorner2):return {p1: pointCorner1, p2: pointCorner2}class Point():def __init__(self, x, y):self.x xself.y ydef isUserful(self):if self.x 0 and self.y 0:return Trueelse:return False判断两个点是否相同def isEqual(self, point):if self.x point.x and self.y point.y:return Trueelse:return False克隆一份对象def clone(self):return Point(self.x, self.y)改为另一个对象def changeTo(self, point):self.x point.xself.y point.yMainWindow()总结 在这个充满创造力和乐趣的项目中我们不仅实现了一个简单的连连看小游戏更体验了Python和Tkinter在游戏开发领域的强大潜力。可以作为初学者学习Python GUI编程和游戏开发的绝佳实例。希望这个项目能够激发更多人对编程和游戏开发的兴趣开启一个全新的学习之旅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

唐山网站设计最专业的微网站开发

类  /  对象 【《快学Scala》笔记】 一、类 1、Scala中的类是公有可见性的,且多个类可以包含在同一个源文件中; 1 class Counter{ 2 private var value 0  //类成员变量必须初始化,否则报错 3 4 def increment(){ //类中的…

如何给网站添加搜索关键字论坛网站建设用工具软件

概述 根据硬件摩尔定律,硬件成本随时间越来越低,性能较之前越来越高,尤其是随着pcie全闪灯普及,理论上作为云服务的基础设施,存储应该越来越便宜。然而,购置商用sds产品的成本却一直居高不下,越…

忘记网站后台用户名好动词做的网站能行吗

联合体 联合体的创建 联合体的关键字是union union S {char a;int i; };除了关键字和结构体不一样之外,联合体的创建语法形式和结构体的很相似,如果不熟悉结构体的创建,可以看一下我上一篇的博客关于结构体知识的详解。 联合体的特点 联合…

单页网站源码下载水墨背景风格企业网站模板

参考链接: hooks:pre_get_sources_script 功能简介 hooks:pre_get_sources_script 是gitlab CICD中的一个功能,该功能可以指定在克隆 Git 仓库和任何子模块之前要在执行器上执行的某些命令。例如: 调整 Git 配置导出跟踪变量 下来简单给…

网站开发人员工具下载视频html在线编辑

简介 之前的文章我们讲了count排序,但是count排序有个限制,因为count数组是有限的,如果数组中的元素范围过大,使用count排序是不现实的,其时间复杂度会膨胀。 而解决大范围的元素排序的办法就是基数排序。 基数排序…

我想创建一个网站外国教程网站有哪些

JavaScript中有很多用于操作数组的内置函数。以下是一些常用的数组函数: 1. Array.prototype.push(): 向数组末尾添加一个或多个元素,并返回新数组的长度。 2. Array.prototype.pop(): 删除并返回数组的最后一个元素。 3. Array.prototype.unshift(): 向…

陕西企业网站建设哪家好如何做阿里巴巴网站

EBSE专题连载共分为“五个”篇章。此文为该连载系列的“第四”篇章,在之前的“篇章(三)”中已经结合具体研究实践阐述了“步骤二,通过系统调研确定改进方案”等内容。那么,在本篇章(四)中&#…

怎么建立企业网站平台网站建设项目进度表

个人记录 Gitee创建账号 以KS进销存系统为例,下载到本地电脑解压。 新建私有仓库 仓库名称:ks-vue3,选择‘私有’ 本地配置 下载安装git配置git 第一次配置可以在本地目录右键【Open Git Bash here】输入【Git 全局设置】再输入【创…

2015百度竞价单页面网站模板源码设计中国铁路保险网站

目录 一.ChatGPT的发展历程 二.Attention is all you need 三.对于GPT-4的智能水平评估 四.大语言模型的技术演化 1.从符号主义到连接主义 2.特征工程 2.1数据探索 2.2数据清洗 2.3数据预处理 2.3.1无量纲化 2.3.1.1标准化 2.3.1.2区间缩放法 2.3.1.3标准化与归一…

国内做优秀的农业信息网站金属材料东莞网站建设

字符串类的charAt() 方法可返回指定位置的字符。 stringObject.charAt(index)从键盘输入获取了一个字符串,将其数据类型转换为字符型。 Scanner scan new Scanner(System.in); String str scan.next(); char ca str.charAt(0);示例: import java.u…

长春网站建设公司哪个好专业建站培训

树莓派2代的Model B采用Broadcom BCM2836 900MHz的四核SoC,1GB内存,是新一代开拓者,兼容1代B。相比之下,树莓派2的性能比1代提升6倍,内存翻了一番。Raspberry Pi 2不仅能跑全系列ARM GNU/Linux发行版,而且支…

ps网站首页效果图实例创意营销策划案例

C 实现 定义以下三个类; 狼类(Wolf):成员变量姓名:stringName,成员变量爪子锋利度:intShape,成员函数:voidPrintStateO,按照姓名、爪子锋利度格式输出两个成员变量的值。←人类(Human):成员变量姓名:stringName,成员变量智力:intIntell,成员函…

高埗做网站做h5的网站页面设计

终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直到登录接口的参数…

网站微营销公司哪家好网站找谁做

Alibaba分布式事务组件Seata实战 事务 本地事务 对于操作单一数据库的场景下的事务,ACIO特性是数据库直接支持的 分布式事务 在分布式情况下,需要的操作资源分布在多个资源服务上,而应用需要保证对于多个资源服务器的数据操作要么全部成…

古德设计官网网站建设网站优化相关资讯文章

第一个罚球,戴维斯出手后,听到哐当医生,皮球掉了出来。我又紧张了。微信群了很多人开始发消息,说詹姆斯队又要输了。回到比赛。戴维斯当时没有任何微笑,我估计他内心也是紧张的,他有点埋怨哈登,…

企业网站接入微信支付千锋教育培训

码到三十五 : 个人主页 目录 一、引言二、享元设计模式的概念1. 对象状态的划分2. 共享机制 三、享元设计模式的组成四、享元设计模式的工作原理五、享元模式的使用六、享元设计模式的优点和适用场景结语 [参见]: Java设计模式:核心概述&…

咸阳做网站托管浏览器网址导航大全

文章目录 持久化配置慢查询命令及安全配置内存配置 持久化配置 慢查询 命令及安全配置 漏洞:Redis未授权访问配合SSH key文件利用分析-腾讯云开发者社区-腾讯云 (tencent.com) 漏洞出现的核心的原因有以下几点 Redis未设置密码利用了Redis的config set命令动态修…

河北建设厅网站登陆怎么找附件有什么做兼职的好的网站吗

PureFlash云原生存储 PureFlash是一个开源存储系统,它能为云计算和传统应用提供块存储服务。PureFlash最显著的优势是其高性能,每节点能提供超过100万IOPS随机写IO。 PureFlash可以以云原生的方式部署,并为云原生应用提供持久存储。 PureFl…

上海市建设质量协会网站怀化市优化办电话

前言 刚开始,以为做性能测试,就是做些脚本、参数化、关联,压起来之后,再扔出一个结果。 但实际上不止这些内容,还要加上性能分析,关注调优之后响应时间有多大的提升,TPS 有多大的提高&#xf…

建卖手机网站大连信息网

netbeans调试使用NetBeans的Java EE开发人员习惯于直接在NetBeans所选择的应用程序服务器中运行和调试其瘦战应用程序。 在开发打包为ber或镂空jars的微服务时,您期望使用相同的轻松方式进行运行和调试。 好消息是您可以。 在本文中,我将逐步介绍如何在N…