当前位置:首页 > 游戏资讯

gm手游平台源码

2023-09-15 10:57:16

玩过电脑游戏的同学当然对很熟悉,但是你在使用的时候有没有想过如何制作一个呢?

我打开4399小游戏网,点开了一个不知名的游戏。嗯,寿司师傅一边有材料,客人过来就说要求。

按菜单给他端上来就行了~

首先需要说明的是,这里的游戏概念和那些大型网游的是不一样的。不能自动打怪物,不能喝药,不能躲避GM………做这个插件有什么用?这个问题问得好。没用的。除了可以浪费一点时间,提高自己的编程技巧,为插件增加一点点基础之外,没什么用。如果你是抱着做一个打不开的插件的目标来的,你会失望的。请尽快绕道。我的目的很简单,就是自动玩这个小游戏。

1.

工具的准备

需要安装Autopy和PIL和pywin32软件包。

Autopy是一个自动化的python库,可以模拟一些鼠标和键盘事件,访问屏幕。最初,我想使用win32api来模拟输入事件,但我发现这是相对简单的使用。最糟糕的是它是跨平台的。请搜索并安装它。

PIL,这是著名的Python图像处理1号,下面将解释如何使用它。

其实pywin32不是必须的,但是为了方便(鼠标自行移动,如何结束),建议安装。哦,对了,我是在win平台上做的,插件大概只有windows用户需要。

截图和图像处理工具

截屏是获取游戏图像,用于分析游戏提示。事实上,没有专门的工具可以将打印屏幕直接粘贴到图像处理工具中。我用的是PicPick,挺好用的,个人用户免费。图像处理就是获取各种信息,我们需要用它来得到排序的图像,保存下来供外界分析判断。我用的是PhotoShop…不要告诉Adobe,其实PicPick自带的图像编辑器就够了,只要能查看图像坐标和剪切粘贴图片就行,不过我习惯PS了~

看这个游戏,有8种菜式,每种菜式都有固定的做法。一旦顾客坐下,他的头上会有一幅画。看看这幅画,你就知道他想要什么了。点选左边的原料区域,然后点选…不知道叫什么。像竹简一样,菜做好了,再把准备好的菜拖到顾客面前。

客户头上显示的图片位置是固定的,总共只有四个位置,所以我们可以一个一个的分析,而且原料的位置也是固定的,每一道菜的做法也更清晰,所以我们可以判断程序可以帮我们做出一顿美味的饭菜并端上来,所以钱滚滚而来:)

2.

移动鼠标

该命令将使鼠标快速移动到指定的屏幕坐标。你知道屏幕坐标是什么吧?左上角是(0,0),然后向右下方递增,所以1024×768屏幕的右下角坐标是…你猜对了,是(1023767)。

遗憾的是,如果你实际使用这个命令,然后用autopy.mouse.get_pos()获取当前坐标,你会发现它不是在(100,100)上,而是更小,比如我机器上的(97,99),这和分辨率有关。这个动作就是windows中的用户和mouse_event函数。如果不知道api,知道就好,但是这个坐标不是很准确。虽然我很好奇,但我能看懂autopy的源代码,我发现他计算绝对坐标的算法有问题:

point . x * = 0x ffff/GetSystemMetrics( _ CX screen);这里先做除法再做乘法,学过一点计算方法的人应该知道,对于整数运算,要先乘后除,否则会有很大误差。如果他写道:

point . x = point . x * 0x ffff/GetSystemMetrics( _ CX screen);会精确很多,虽然理论上会慢一点,但是我懒得改代码重新编译。差了几个像素,在这里对我们影响不大~要吸取教训。

3.

点击鼠标

这个相对简单,但是要记住这里的操作非常非常快。也许你还没反应过来就完成了游戏,所以你失败了…所以如果有必要,请睡一会儿。

4.

键盘操作

这次我们没有用键盘,我就不说了。

怎么会?分析一下客户头上的形象就好了。来,先从获取图像开始~

打开你喜欢的图片编辑器,开始测量~我们需要知道图片在屏幕上的具置,可以用尺子测量。本来直接测量也是可以的,但是我用的是图片左上角的位置(也就是点1)作为参考位置,所以一旦图片发生变化,我们只需要修改一个点的坐标,否则每一个点都要重写,不是一件开心的事情。

看最左边客户头部的图像,我们需要两个点来确定这个范围,分别是图像的左上角和右下角,也就是点2和点3。后面还有三个客户位,只需简单加一个增量,for循环就是为此而生的!

同样,我们的原材料的位置,“竹席”的位置等等都可以通过这种方式获得。注意游戏画面左上角的相对位置。至于抓图的方法,PIL的ImageGrab非常好用,autopy也能抓图。为什么不呢?下面我就来说说。

5.

分析图像

我们的插件出现了一个非常棘手的问题。我们如何知道我们获得的图像是哪道菜呢?对于人眼来说…即使是狗眼,这也是一个很容易的问题,“一眼就能看出来”!没错,这就是人比机器强的地方。我们做简单的事情,但是电脑很笨,分不清楚。

自动解剖图像限制

如果你看过autopy的api,你会发现它有一个带有find_bitmap方法的位图包,就是在一个大图中寻找一个小样图。如果你够聪明,你可以认为我们可以把整个游戏画面切掉,然后准备所有菜品的小图像。我们可以通过这种方法找出哪道菜叫。

的确,一开始我也有过这样做的冲动,但马上就放弃了…这个方法速度就更不用说了。它有一个“完全匹配”的条件。如果图像上某个像素的RGB值为1,就找不到了。

我们知道flash是矢量图。它缩放后在屏幕上显示一个点阵图片,这里的变量非常大。理论上,同样的输入,同样的算法,得到的结果肯定是一样的,但是因为画图背景的原因,总会有一点差距,导致这个奇妙的功能无法使用…

嗯,不能用是好事。不然我怎么能推导出我们高明的图像分析算法呢?

相似图像搜索原理

相信你一定用过谷歌的“以图搜图”功能。如果没有,你就落伍了。试试看!当你进入一张图片时,它会给你展示所有和这张图片相似的图片,所以当你找到一张喜欢的图片,又觉得它太小不适合做壁纸时,基本上可以通过这个方法找到合适的~

我们会用类似于此的原理来判断用户的点餐。当然,我们的算法不可能像谷歌的那么复杂。知乎上有一篇非常好的文章描述了这个问题。有兴趣的可以看看。我会直接给出实现:

gm手游平台源码

gm手游平台源码

因为这是类的一个方法,所以有个self参数,无视它。这里的img应该传入一个Image对象,可以使读入图像文件后的结果,也可以是截屏后的结果。而缩放的尺寸(18,13)是我根据实际情况定的,因为顾客头像上的菜的图像基本就是这个比例。事实证明这个比例还是挺重要的,因为我们的菜有点儿相似,如果比例不合适压缩后就失真了,容易误判(我之前就吃亏了)。因为这是类的一个方法,有一个self参数,所以忽略它。这里的img要传入一个Image对象,可以是读取图像文件后的结果,也可以是截屏后的结果。缩放尺寸(18,13)是我根据实际情况确定的,因为菜在顾客头上的形象基本就是这个比例。原来这个比例挺重要的,因为我们的菜有点相似。比例不合适,压缩后会失真,容易误判(我之前吃过亏)。

得到一张图片的“指纹”后,我们就可以和标准的图片指纹进行对比了。怎么比较?我们要用“汉明距离”,即两个字符串对应位置上不同字符的个数。实现也非常简单…

Defhamming _ dist (self,hash1,hash2):返回sum (ITERTools。IMAP(操作员。NE,hash1,hash2))好吧,我们可以用准备好的标准图像,然后提前读取存储计算特征码,然后截图对比。距离最小的就是对应的菜。代码如下:

初始距离为50。如果抓取的图像与任何菜单相比都大于50,说明什么?

说明当前位置的形象不是菜,说明客户还没有坐到那个位置,或者我们已经把游戏最小化了(老板在这里),所以处理起来很重要,不要随意找一个最接近但完全不相关的菜。

6.

自动烹饪

这个问题很简单,我们只需要记录下菜单的原材料,然后点击相应的位置。我把它写成一个类来调用:

这是这个插件里技术含量最低的一个类:)请原谅我没有写评论和doc,因为它们很简单,相信你懂。

“我是一个从事开发多年的老Python程序员。我辞掉了工作,目前正在做自己的Python个人裁缝课程。今年年初,我花了一个月的时间整理了一本最适合2019年的干货Python学习,从最基础的到各种框架,送给每一个喜欢Python的小伙伴。如果想获取,可以在后台01给我写信免费获取。”

标签 源码   平台   gm
今日推荐
显卡价格飙升,玩家升级计划受阻
显卡价格飙升,玩家升级计划受阻

显卡市场的持续高热让众多玩家头疼不已。根据Liquid W...[详细]

独家专栏
精彩推荐
热门排行
热门标签