4399小游戏—宠物连连看经典版2—游戏辅助脚本VanHope

期末的时候看到一篇博客,写的宠物连连看的辅助脚本,感觉很有意思,就自己跟着博客自己实现了一遍,开发过程中遇到了一些问题,也体会到了解决问题的乐趣,遂在此记录一下。

这篇博客给出了完整版的代码,大体上我是根据他的思路实现的,只有部分细节按照我自己的想法做了修改。

具体流程如下:

窗口句柄:简单理解就是窗口的id,可以根据这个id识别已经打开的窗口

在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口最小化等等。

--《百度百科》

可以使用winspy,spy++等工具获取某个窗口的句柄。

使用360浏览器打开宠物连连看小游戏后,我用winspy获取到的句柄是"宠物连连看经典版2小游戏,在线玩,4399小游戏-360安全浏览器10.0"

获取到窗口的句柄之后,就可以使用python的库操纵窗口了,使用的库是win32gui

#获取窗口的句柄self.hwnd=win32gui.FindWindow(0,wdname)ifself.hwnd==0: print('nosuchhwnd') exit(1)#将该窗口显示在最前面win32gui.SetForegroundWindow(self.hwnd)执行之后,连连看的窗口就显示到最前面了,下一步就可以截图了

主要使用到的库是PIL的ImageGrab,PIL现在官网上不去,pillow好像和PIL功能是差不多的,文档可以参考pillow的。

这一步的重点是要计算出每个图标的左上角、右下角的坐标,准确将其从截图中分割出来。

'''获取屏幕截图,并将图标分割'''defscreen_grab(self):#获取整个屏幕截图image_grab=ImageGrab.grab()#获取截图中间所有动物图标的截图box=(399,305,1247,873)animals_iamge=image_grab.crop(box)#将每个动物图像分割,得到图像矩阵images_list=[]offset=71#将截图用windows自带的画图打开,就可以查看某个点的位置, #计算出每个图标的大小大约是71px,不是特别准确,但是基本可以分割出每个图标了x0=0y0=0foriinrange(8):images_row=[]forjinrange(12):#小图标左上角的坐标x1=x0+j*offsety1=y0+i*offset#小图标右下角的坐标x2=x1+offsety2=y1+offset#5px的偏移是为了去掉小图标周围,只保留中间,这样区分不同的图片更容易images_row.append(animals_iamge.crop((x1+5,y1+5,x2-5,y2-5)))images_list.append(images_row)returnimages_list3、将图标矩阵转换成数字矩阵这一步是比较复杂的,主要的目标是将每个图标转换成一个数字,要求相同的图标数字相同。

这里分为两步:

首先将每个图标转成一个灰度图标,然后将这个灰度图标转换成01字符串。

然后比较两个字符串各个位置0、1的区别,记录不同的个数,然后设定一个阈值,不同的个数如果低于这个阈值(即两个图标相差不多),可以认为它们是同一种图标,否者不是。

比较麻烦的是阈值的确定,只能将两个图片的灰度值慢慢比较,找到一个threshold,高于这个threshold能区分为两个不同的图片;低于这threshold保证两个图标相同。

我用到的一个技巧就是,在创建图标矩阵的时候(上一步),每个图标截取的时候往中间多收缩了5px,这样就可以去掉截取的图标周围的一些"杂质",更容易确定阈值。

[[00000000000000][01223245677180][0949108311231150][06126312941281130][0312101112385966100][07471148125127520][01014211766115530][011958421091011990][010127112107641880][00000000000000]]4、判断两个点是否可以点击消除根据游戏规则,对一个点(x1,y1)得到它可以直接到达的点的集合list1,所谓直接到达,指的是从(x1,y1)出发上下左右连续为0的点;对于(x2,y2)得到list2,然后判断list1中每个点和list2中每个点有没有可以直接到达(即两个点在同一行或同一列,且中间都是0),如果存在这样地点,就说明(x1,y1)、(x2,y2)可以到达。

THE END
1.宠物连连看可爱版小游戏宠物连连看可爱版在线玩礼包论坛 类型:休闲益智 特征:消除 更新时间:2023-09-12 手机扫码下载游戏 宠物连连看可爱版在线玩介绍 【宠物连连看可爱版在线玩游戏玩法】 鼠标操作 鼠标点击两个相同图标,如果图标间的连线转折不超过两次并且不经过其他图标,即可消除。点击上方的“洗牌”道具可以重新布局,点击“提示”道具可以进行帮助。 https://www.18183.com/down/897091.html?soucre=bdald
2.宠物连连看2.5版逗游小游戏为你提供最新的宠物连连看2.5版小游戏,免费下载宠物连连看2.5版小游戏,并同时提供最新宠物连连看2.5版小游戏操作方法,助你顺利闯关。在线免费玩宠物连连看2.5版小游戏,马上来逗游小游戏吧,玩游戏其实可以很轻松!https://www.doyo.cn/flash/game/529979
3.宠物连连看游戏免费下载最新宠物连连看游戏免费大全宠物连连看游戏免费大全汇集了所有的宠物连连看游戏免费下载资源,不断更新最... 展开 朕要上房揭瓦 B站知名游戏UP主 宠物连连看 休闲益智 18.7M 这是一个很不错的游戏 高速下载 需优先下载九游 大家都喜欢的游戏了解一下 宠物 连连看 休闲 | 5.3M 6.0 画面大方简单而不单调,各种可爱的小动物。游戏有提示功...https://a.9game.cn/topic/cwllkyxmf/
1.宠物连连看2.63.1肿么关闭声音对于网页,您可以通过右键单击窗口并选择关闭声音来实现。一般来说,小游戏会有一个小喇叭的图标位于右...https://ask.zol.com.cn/x/25322265.html
2.宠物连连看下载宠物连连看V2.6下载单机游戏下载(暂未上线)游戏概述 配置要求 安装说明 相关下载 新闻攻略 资源地址 游戏介绍 宠物连连看最新版本 修正以前版本的作弊 更多精彩连连看,请访问:http://www.yxdown.com/tags_%C1%AC%C1%AC%BF%B4.html 界面预览: 游戏已更新,能下载,体积小,好用 资源地址 版本说明我要报错 ...https://down.ali213.net/mini/game_3619.html
3.安卓连连看单机版下载手机连连看小游戏大全手机连连看游戏一直都是大家必备的休闲精品,这类游戏题材多样,玩不腻,最适合无聊的时候打发时间了,这个小编深有体会,此次腾牛安卓网游戏速递特别为大家免费提供各类好玩的安卓手机连连看游戏免费下载,保证不会让您失望.https://www.qqtn.com/az/azllkyx/
4.宠物连连看经典版连连看小游戏Apple Store Mac iPad iPhone Watch AirPods TV & Home Entertainment Zubeh?r Support 0+App Store Vorschau 宠物连连看-经典版连连看小游戏 Das gef?llt dir vielleicht auch 宠物连连看 共享版 Spiele Spot The Difference Puzzle Spiele Fruit Link - Pair Match Puzzle Spiele 黄金矿...https://apps.apple.com/de/app/%E5%AE%A0%E7%89%A9%E8%BF%9E%E8%BF%9E%E7%9C%8B-%E7%BB%8F%E5%85%B8%E7%89%88%E8%BF%9E%E8%BF%9E%E7%9C%8B%E5%B0%8F%E6%B8%B8%E6%88%8F/id1063787744?see-all=customers-also-bought-apps
5.十大经典好玩的连连看游戏最火的连连看小游戏推荐Q萌可爱、益智休闲的消除类连连看小游戏,40多种Q萌宠物带你进入一个可爱萌宠乐园,和你一起嗨翻天。游戏特色:1500多个关卡,10个以上的变换模式,其乐无穷;单机游戏,无需联网,坐飞机也可畅玩;多种游戏模式,挑战眼力和手速的双重极限;40多个萌宠尽收囊中,一个也不放过;上手简易,老少皆宜。 https://www.maigoo.com/citiao/list_118077.html
6.连连看游戏下载合集连连看单机 31.94MB 连连看单机版是一款休闲好玩的经典连连看单 益智 宠物连连看 63.84MB 《宠物连连看》是一款消除类休闲游戏,关卡 休闲 乐游连连看 96.65MB 《疯狂连连看》是一款连连看消除类小游戏。 休闲 Q版水果连连看 29.27MB 好玩的水果连连看上线啦!本游戏 ...https://www.7723.cn/special/205995