浏览器打开游戏窗口(单一窗口)。游戏主界面的截图需要两个坐标(左上角坐标和右下角坐标)来确定。原点一般是屏幕的左上角。不确定坐标点值的同学可以全屏截图。使用图像编辑软件查看坐标值。
获取窗口句柄,这里是浏览器标题栏的标题(右键-查看源码-标题,加上软件名称),例如:“宠物连连看经典2、宠物连连看经典版2小游戏、4399小游戏-谷歌浏览器”。拿到窗户把手就可以出发了。
整体开发思路:截取游戏主图像--->将其分割成小图--->比较每个小图,比较图像的熟悉程度,并将数字存储在矩阵中--->进行可连接的计算矩阵--->模拟点击。
获取窗户把手并将窗户放在上面
Python可以使用win32gui模块调用WindowsAPI来操作窗口。使用FindWindow()方法获取窗口的句柄。需要传入两个参数,第一个是父窗口句柄(这里填0即可)。第二个参数是窗口的名称(选项卡标题-GoogleChrome)。获取句柄后,通过SetForegroundWindows()将窗口设置到前面。这里可以传入游戏窗口的报告。代码如下:
截取游戏界面、分割图标、图片对比
根据初始化设置的左上角和右下角两个坐标,使用ImageGrab.grab()方法进行截图,传入一个元组。然后将大图像分割成小图标并存储在images_list中。在数组中。
将上面代码切出的小图标转换为数值矩阵。如果图标已存储在image_type_list中,则返回索引。如果不存在,则会追加。那么当前的长度就是新添加的图标的编号。代码如下:
上面的getIndex是比较图片来判断图标是否出现过(image_type_list中是否已经存在,如果没有出现则添加)。这里使用汉明距离来判断两张图片的熟悉程度,阈值设置为10,当小于阈值时,就认为是同一张图片,具体代码如下:
程序核心-图标连接算法(寻路)
这里我们只简单分析一下算法代码。如果对程序不太理解,可以留言,我们稍后用图文结合的方式来分析。
简单分析一下代码实现过程:在isReachable()中传入需要比较的两个坐标值怎么制作游戏脚本,然后获取水平和垂直方向上两个点可以连接的坐标集(isRowConnect()、isColConnect())怎么制作游戏脚本,最后遍历集合。比较一下是否有可链接的。如果存在,则表示两个传入的坐标可以连接起来。
学习这样的游戏辅助脚本对于个人培养编程兴趣也是很有帮助的。也算是下班后很好的消遣。以后我会在这些方向上进行更多的学习和学习。