Python实现连连看9

(2)标识选中的图片

在判断出玩家选中的是哪一张图片之后,接下来就可以标识选中的图片了,即在该选中的图片外围画矩形。代码如下所示。

FIRSTCLICK = True #FIRSTCLICK是全局变量
if(click_col>=0 and click_row>=0) and \(not pics_map[click_row][click_col] == MAP_EMPTY):global FIRSTCLICKif FIRSTCLICK:drawRect(click_row, click_col)FIRSTCLICK = False

其中,第1行中if语句的作用是保证玩家的鼠标是否点在图片上,并且选中的该图片不是MAP_EMPTY。在“3.2 显示图片”中提到,游戏进行中,如果图片被玩家消除掉,则该图片在图片地图中对应位置的值就设置为MAP_EMPTY,如果该图片已经被消除,则无需将其标识出来。

因为要修改全局变量FIRSTCLICK,因此第3行代码对该变量进行说明,第4行的if语句确定玩家是第一次点击图片,之后调用自定义函数drawRect()在指定的图片外围画矩形,最后将FIRSTCLICK 设置为False。

(3)实现图片标识

通过自定函数drawRect()实现图片标识,代码如下所示。

def drawRect(row, col):lu_posX = col*MAP_WIDTH + MAP_XDELTAlu_posY = row*MAP_HEIGHT + MAP_YDELTArd_posX = (col+1)*MAP_WIDTH + MAP_XDELTArd_posY = (row+1)*MAP_HEIGHT + MAP_YDELTAcanvas.create_rectangle( lu_posX,lu_posY,rd_posX, rd_posY, outline='red', width=3, tags="rectRedOne")

其中,drawRect()的两个参数分别标识要标识图片所在的行数和列数,第2-3行代码通过图片所在的行数和列数,得到该图片左上角的坐标;第4-5行代码得到图片右下角的坐标;第6行代码通过canvas调用create_rectangle()方法画矩形,该方法的前四个参数分别标识所画矩形左上角和右下角的横纵坐标,outline参数指定了矩形的颜色,width参数指定了画线的粗细程度,tags参数指定了该矩形的标签,此标签在消除用户选中的图片时会用到。

通过以上代码,当玩家点击游戏中的某张图片时,就会标记该图片,如图10所示。

图10 标记选中图片

(4)完整代码

GAMESTART = False
FIRSTCLICK = Truedef clickCanvas(event):if GAMESTART:click_col, click_row = getClickedMap(event.x, event.y)if(click_col>=0 and click_row>=0) \and (not pics_map[click_row][click_col] == MAP_EMPTY):global FIRSTCLICKif FIRSTCLICK:drawRect(click_row, click_col)FIRSTCLICK = Falsedef drawRect(row, col):lu_posX = col*MAP_WIDTH + MAP_XDELTAlu_posY = row*MAP_HEIGHT + MAP_YDELTArd_posX = (col+1)*MAP_WIDTH + MAP_XDELTArd_posY = (row+1)*MAP_HEIGHT + MAP_YDELTAcanvas.create_rectangle( lu_posX,lu_posY,rd_posX, rd_posY, outline='red', width=3, tags="rectRedOne")
def getClickedMap(xpos, ypos):x = -1y = -1for i in range(0, ROW_PIC):x1 = i*MAP_WIDTH + MAP_XDELTAx2 = (i+1)*MAP_WIDTH + MAP_XDELTAif xpos>=x1 and xpos<=x2:x = ifor j in range(0, COL_PIC):y1 = j*MAP_HEIGHT + MAP_YDELTAy2 = (j+1)*MAP_HEIGHT + MAP_YDELTAif ypos>=y1 and ypos<=y2:y = jreturn x, ydef file_new():getPic()initMap()drawMap()global GAMESTARTGAMESTART = Trueroot.configure(menu=menubar)
canvas.bind('<Button-1>', clickCanvas) #本行代码为新添加代码
canvas.pack()root.mainloop()

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

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

相关文章

【进程调度的基本过程】初步认识进程和线程的区别与联系:计算机是如何工作的

​ &#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 &#x1f43a;一.冯诺依曼体系结构 认识计算机的祖师爷 -- 冯诺依曼 冯诺依曼&#xff08;John von Neumann&#xff0c;1903年12⽉28⽇-1957年2⽉8⽇&…

使用 Clang-Tidy 进行C++静态代码分析:一个完整的配置实例

文章目录 使用 Clang-Tidy 进行静态代码分析&#xff1a;一个完整的配置实例0. Clang-Tidy简介1. 安装 Clang-Tidy2. 配置 .clang-tidy3. 检查项详解3.1 静态分析器&#xff08;Static Analyzer&#xff09;3.2 现代化&#xff08;Modernize&#xff09;3.3 Google 代码风格&am…

调用华为API实现语音合成

目录 1.作者介绍2.华为云语音合成2.1 语音合成介绍2.2 华为语音合成服务2.3 应用场景 3. 实验过程以及结果3.1 获取API密钥3.2 调用语音合成算法API3.3 实验代码3.4 运行结果 1.作者介绍 袁斌&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2023级研究生 研究…

SpringBoot整合Skywalking

下载Java Agent 官网&#xff1a;https://skywalking.apache.org/downloads/ 提示&#xff1a;Agent最好到网上找一找之前的版本&#xff0c;新版本可能有bug&#xff0c;如果出现了并且网上也几乎没有这个版本的解决方法那么就切换之前的版本 本地启动时 -javaagent:d:\opt\…

建筑特种工高处作业吊篮安装拆卸工题库

1、施工现场外租吊篮设备&#xff0c;在施工前应由( )编制专项施工方案&#xff0c;并由( )技术负责人和现场总监理工程师签字后实行。 A 使用单位 使用单位 B 使用单位 租赁单位 C 租赁单位 使用单位 D 租赁单位 租赁单位 2、施工现场外租吊篮…

java基础语法整理 ----- 上

java基础语法 一、变量二、数据类型三、标识符四、键盘录入五、判断语句1. 三种格式2. 练习题 六、switch语句七、循环八、循环控制语句九、方法 一、变量 1.什么是变量&#xff1a; 在程序运行过程中&#xff0c;其值可以发生改变的量从本质上讲&#xff0c;变量是内存中的一…

[C++] 小游戏 斗破苍穹 2.2.1至2.11.5所有版本(中) zty出品

目录 2.8.2 2.9.1 2.10.1 2.10.2 2.10.3 2.10.4 2.10.5 2.8.2 #include<stdio.h> #include<iostream> #include<ctime> #include<bits/stdc.h> #include<time.h> //suiji #include<windows.h> //SLEEP函数 using namespace std; st…

axios的基本使用

axios 是一个功能强大且易于使用的 HTTP 客户端库&#xff0c;提供了丰富的功能和配置选项。以下是 axios 的完整使用示例&#xff1a; 发送 GET 请求&#xff1a; axios.get(https://jsonplaceholder.typicode.com/posts).then(response > {console.log(response.data);}…

MineAdmin 前端打包后,访问速度慢原因及优化

前言&#xff1a;打包mineadmin-vue前端后&#xff0c;访问速度很慢&#xff0c;打开控制台&#xff0c;发现有一个index-xxx.js文件达7M&#xff0c;加载时间太长&#xff1b; 优化&#xff1a; 一&#xff1a;使用文件压缩&#xff08;gzip压缩&#xff09; 1、安装compre…

360数字安全:2024年3月勒索软件流行态势分析报告

勒索软件传播至今&#xff0c;360 反勒索服务已累计接收到数万勒索软件感染求助。随着新型勒索软件的快速蔓延&#xff0c;企业数据泄露风险不断上升&#xff0c;勒索金额在数百万到近亿美元的勒索案件不断出现。勒索软件给企业和个人带来的影响范围越来越广&#xff0c;危害性…

java基础练习题

1、一个".java"源文件中是否可以包括多个类&#xff1f;有什么限制&#xff1f; 可以包含多个类。但是只有一个类可以声明为public&#xff0c;且要求声明为public的类的类名与源文件名相同。 2、java的优势&#xff1f; a、跨平台性 b、安全性高 c、简单性 d、…

无延迟,持续畅玩 - Wi-Fi 6 助力打造游戏厅极致体验

1、需求背景&#xff1a; 连锁游戏厅行业竞争激烈&#xff0c;顾客对高品质的游戏体验有着高要求。网络是游戏厅的核心基础设施之一&#xff0c;需要确保游戏过程中的网络连接稳定性和顾客满意度。 长时间稳定连接 为保证顾客的游戏体验感&#xff0c;游戏厅要确保网络连接长…

介绍建造者模式

建造者模式 将一个复杂对象的创建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示 四种角色 Product 产品角色 指的是一个具体的产品对象Builder 抽象建造者 创建一个产品对象的各个部件的接口/抽象类ConcreteBuilder 具体建造者 实现或继承抽象建造者接口…

Python量化交易学习——Part6:多因子选股策略实战(1)

在上一节中,我们学习了基于IC值的多因子计算方法,说白了就是先选择我们认为与股票收益率影响大的因子(如市盈率、净资产收益率、净利润增长率等),之后计算各个因子与股票收益率之间的相关系数,选择相关系数大的因子进行加权得到新的因子,之后求得新因子与收益率之间的相…

Leetcode:删除链表的倒数第N个结点

题目链接&#xff1a;19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;统计结点 头删 中间删除&#xff09; 主旨&#xff1a;对于链表的删除要考虑头删和尾删的结果 /*** Definition for singly-linked list.* struct ListNo…

使用 CloudFlare Turnstile 解决跨境电商站的垃圾邮件侵扰

最近明月一个跨境电商代维客户的网站被垃圾邮件侵扰了,从最开始的每天几封疯狂到每天几百上千封垃圾邮件,几乎所有可拦截屏蔽的关键词都是随机可变的,简单的邮件客户端拦截基本已经没有任何效果了,在收到用户的求助后经过分析发现主要是利用网站在线咨询页面里的邮件发送造…

SMS-GSM

SMS-GSM 短信模块&#xff0c;不想通过第三方的接口&#xff0c;自己搭建短信模块&#xff0c;提高信息安全。 /**/ package sms;import com.diagcn.smslib.CMessage; import com.diagcn.smslib.COutgoingMessage; import com.diagcn.smslib.SZHTOCService;/*** 短信模块** au…

汇编:头文件

汇编头文件&#xff08;header files&#xff09;在汇编语言编程中类似于高层语言中的头文件&#xff0c;它们通常包含宏定义、常量定义、数据结构定义、函数声明以及其他在多个汇编源文件中共享的代码&#xff1b;使用头文件可以提高代码的可维护性和可读性&#xff0c;并使代…

【全开源】云调查考试问卷系统(FastAdmin+ThinkPHP+Uniapp)

便捷、高效的在线调研与考试新选择​ 云调查考试问卷是一款基于FastAdminThinkPHPUniapp开发的问卷调查考试软件&#xff0c;可以自由让每一个用户自由发起调查问卷、考试问卷。发布的问卷允许控制问卷的搜集、回答等各个环节的设置&#xff0c;同时支持系统模板问卷&#xff…

11、架构-从类库到服务之客户端负载均衡

目录 主要概念 客户端负载均衡的定义与重要性 历史背景 技术细节 客户端负载均衡的实现方式 工作原理 常见的客户端负载均衡策略 实际应用 Netflix Ribbon Spring Cloud LoadBalancer 服务网格&#xff08;Service Mesh&#xff09; 代理负载均衡器 工作原理 优点…