当前位置: 首页 > news >正文

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.lryc.cn/news/367362.html

相关文章:

  • 项目验收总体计划书(实际项目验收原件参考Word)
  • C++基础与深度解析 | 异常处理 | 枚举与联合 | 嵌套类与局部类 | 嵌套名字空间与匿名名字空间 | 位域与volatile关键字
  • 番外篇 | 利用华为2023最新Gold-YOLO中的Gatherand-Distribute对特征融合模块进行改进
  • python记录之字符串
  • Elasticsearch 认证模拟题 - 15
  • g++ 预处理 编译 汇编 链接 命令
  • 计算机视觉中的low-level与 high-level任务
  • 安徽京准NTP时钟系统:GPS北斗卫星授时下的生活重塑
  • 图论第8天
  • Python怎么配置环境变量:深度探索与实战指南
  • 计网期末复习指南(六):应用层(DNS、FTP、URL、HTTP、SMTP、POP3)
  • HTML做成一个炫酷跳动爱心的页面
  • React + SpringBoot实现图片预览和视频在线播放,其中视频实现切片保存和分段播放
  • Suse Linux ssh配置免密后仍需要输入密码
  • apifox 生成签名
  • 介绍建造者模式
  • 【全部更新完毕】2024全国大学生数据统计与分析竞赛B题思路代码文章教学数学建模-电信银行卡诈骗的数据分析
  • 【应用浅谈】Odoo的库存计价与产品成本(三)
  • 数据结构之ArrayList与顺序表(下)
  • openi启智社区 aarch64 npu环境安装飞桨paddlepaddle和PaddleNLP(失败)
  • 【漏洞复现】多客圈子论坛系统 httpGet 任意文件读取漏洞
  • 46-1 护网溯源 - 钓鱼邮件溯源
  • 鸿蒙低代码开发一个高频问题
  • 关于使用南墙waf防护halo网站主页请求404报错的解决方案
  • Elasticsearch 认证模拟题 - 13
  • Day25 首页待办事项及备忘录添加功能
  • SpringBoot——全局异常处理
  • SpringBoot+Vue教师工作量管理系统(前后端分离)
  • 华为OD技术面试-最长回文串-2024手撕代码真题
  • Python实现连连看8