源地址:http://eyehere.net/2012/python-game-bot-autopy-1/

悲剧成我这样的人,我知道肯定不止我一个,所以我一点都不悲伤:-( 所以我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜单做好端给他便好~ 为啥这么有难度?8种菜单记不清,点点就点错,鼠标还不好使肌肉劳损啥的伤不起啊……

首先要声明,这里的游戏外挂的概念,和那些大型网游里的外挂可不同,不能自动打怪,不能喝药不能躲避GM…… 那做这个外挂有啥用?问的好,没用,除了可以浪费你一点时间,提高一下编程技术,增加一点点点点点点的做外挂的基础以外,毫无用处,如果您是以制作一个惊天地泣鬼神不开则已一开立刻超神的外挂为目标过来的话,恐怕要让您失望了,请及早绕道。我的目的很简单,就是自动玩这款小游戏而已。

工具的准备

这篇文章需要您有Python基础,我不会讲解Python语法啥的~

Python
需要安装autopyPIL以及pywin32包。autopy是一个自动化操作的python库,可以模拟一些鼠标、键盘事件,还能对屏幕进行访问,本来我想用win32api来模拟输入事件的,发现这个用起来比较简单,最厉害的是它是跨平台的,请搜索安装;而PIL那是大名鼎鼎了,Python图像处理的No.1,下面会说明用它来做什么;pywin32其实不是必须的,但是为了方便(鼠标它在自己动着呢,如何结束它呢),还是建议安装一下,哦对了,我是在win平台上做的,外挂大概只有windows用户需要吧?
截屏和图像处理工具
截屏是获取游戏图像以供分析游戏提示,其实没有专门的工具直接Print Screen粘贴到图像处理工具里也可以。我用的是PicPick,相当好用,而且个人用户是免费的;而图像处理则是为了获取各种信息的,我们要用它得到点菜图像后保存起来,供外挂分析判断。我用的是PhotoShop… 不要告诉Adobe,其实PicPick中自带的图像编辑器也足够了,只要能查看图像坐标和剪贴图片就好饿了,只不过我习惯PS了~
编辑器
这个我就不用说了吧,写代码得要个编辑器啊!俺用VIM,您若愿意用写字板也可以……

原理分析

外挂的历史啥的我不想说啦,有兴趣请谷歌或度娘(注:非技术问题尽可以百度)。

看这个游戏,有8种菜,每种菜都有固定的做法,顾客一旦坐下来,头顶上就会有一个图片,看图片就知道他想要点什么菜,点击左边原料区域,然后点击一下……不知道叫什么,像个竹简一样的东西,菜就做完了,然后把做好的食物拖拽到客户面前就好了。

顾客头上显示图片的位置是固定的,总共也只有四个位置,我们可以逐一分析,而原料的位置也是固定的,每种菜的做法更是清清楚楚,这样一来我们完全可以判断,程序可以很好的帮我们做出一份一份的佳肴并奉上,于是钱滚滚的来:)

autopy介绍

github上有一篇很不错的入门文章,虽然是英文但是很简单,不过我还是摘几个这次用得到的说明一下,以显示我很勤劳。

移动鼠标

 
 
 
 
 

Python

 
1
2
3
import autopy
autopy.mouse.move(100, 100) # 移动鼠标
autopy.mouse.smooth_move(400, 400) # 平滑移动鼠标(上面那个是瞬间的)

这个命令会让鼠标迅速移动到指定屏幕坐标,你知道什么是屏幕坐标的吧,左上角是(0,0),然后向右向下递增,所以1024×768屏幕的右下角坐标是……你猜对了,是(1023,767)。

不过有些不幸的,如果你实际用一下这个命令,然后用autopy.mouse.get_pos()获得一下当前坐标,发现它并不在(100,100)上,而是更小一些,比如我的机器上是(97,99),和分辨率有关。这个移动是用户了和windows中mouse_event函数,若不清楚api的,知道这回事就好了,就是这个坐标不是很精确的。像我一样很好奇的,可以去读一下autopy的源码,我发现他计算绝对坐标算法有问题:

 
 
 
 
 

C

 
1
point.x *= 0xFFFF / GetSystemMetrics(SM_CXSCREEN);

这里先做除法再做乘法,学过一点计算方法的就应该知道对于整数运算,应该先乘再除的,否则就会产生比较大的误差,如果他写成:

 
 
 
 
 

C

 
1
point.x = point.x * 0xffff / GetSystemMetrics(SM_CXSCREEN);

就会准多了,虽然理论上会慢一点点,不过我也懒得改代码重新编译了,差几个像素,这里对我们影响不大~咱要吸取教训呀。

点击鼠标

 
 
 
 
 

Python

 
1
2
3
4
import autopy
autopy.mouse.click() # 单击
autopy.mouse.toggle(True) # 按下左键
autopy.mouse.toggle(False) # 松开左键

这个比较简单,不过记得这里的操作都是非常非常快的,有可能游戏还没反应过来呢,你就完成了,于是失败了…… 所以必要的时候,请sleep一小会儿。

键盘操作

我们这次没用到键盘,所以我就不说了。

本来我想一篇文章说完的,貌似有点难度太长了懒得看,所以也做个上中下篇吧,这次是基础,下次是图像分析,最后是实现,敬请期待。

分类 Python 标签:autopyPython游戏游戏开发

用Python制作游戏外挂(上)的更多相关文章

  1. 一步步用python制作游戏外挂【转】

    转自:http://www.cnblogs.com/xsmhero/archive/2013/01/03/2842973.html 玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过 ...

  2. C#简单游戏外挂制作(以Warcraft Ⅲ为例)

    网上有很多外挂制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包.反汇编.C++的知识综合.事实也如此,常见的外挂都是使用VC++写的,从来没有过C#或者其他.NET语言编写的外挂. 作为微软. ...

  3. Python论做游戏外挂,Python输过谁?

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢? 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜 ...

  4. three.js 制作逻辑转体游戏(上)

    今天郭先生又出来制作游戏了,最近有小伙伴要做一个逻辑转体小游戏,我怎么能不先来试试呢.玩法可以看上面的连接,下面附几张图.线案例请点击博客原文. 游戏规则不懂得可以看自行百度哈,其实玩起来还挺有难度的 ...

  5. 2015/11/1用Python写游戏,pygame入门(1):pygame的安装

    这两天学习数据结构和算法,有时感觉并不如直接做项目来的有趣.刚刚学完python的基本使用,现在刚好趁热打铁做个小项目. 由于本人一直很想制作一款游戏,就想使用Python制作一个基础的游戏.搜了一下 ...

  6. Python制作AI贪吃蛇,很多很多细节、思路都写下来了!

    前提:本文实现AI贪吃蛇自行对战,加上人机对战,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什么了,思路都一样) 实现效果: 很多人学习python,不知道从何学 ...

  7. 如何用python制作贪吃蛇以及AI版贪吃蛇

    用python制作普通贪吃蛇 哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...

  8. Unity中制作游戏的快照游戏支持玩家拍快照

    Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...

  9. python+pygame游戏开发之使用Py2exe打包游戏

    最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本. 这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编 ...

随机推荐

  1. 02-OC方法、属性

    目录: 一.方法 二.实例变量 三.属性(点语法) 四.初始化方法(自定义构造方法) 回到顶部 一.方法 1 函数与方法有什么区别? 函数只是一个程序的代码段,与类无关. 方法,类的一部分,代表对象可 ...

  2. admin嵌套在spring mvc项目里,菜单栏点击新连接每次都会重置

    <ul class="treeview-menu" id="ul_schedule"> <li><a href="#&q ...

  3. Windows Azure 网站的 IP 和域限制

    编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. 配置 Azure 网站 (WAWS) 的 IP 和域限制一直是用户最迫切希望我们提供 ...

  4. cocos2d-x游戏开发系列教程-坦克大战游戏之敌方坦克AI的编写

    在上篇我们完成了子弹和地图碰撞的检测,在这篇我们将完成敌方坦克AI的编写. 具体思路是屏幕中保持有四个敌方坦克,然后坦克随机方向运动,并且子弹消失后1秒发射一次 1.我们新建一个敌方坦克的AI类来控制 ...

  5. 浅析SSH核心原理(二)

    Hibernate是一个开放源代码的ORM(对象-关系映射)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任 ...

  6. spark集群安装配置

    spark集群安装配置 一. Spark简介 Spark是一个通用的并行计算框架,由UCBerkeley的AMP实验室开发.Spark基于map reduce 算法模式实现的分布式计算,拥有Hadoo ...

  7. Android-x86 4.4-r5 发布,PC 上的安卓系统

    Android x86 即运行于 x86 PC上的Android操作系统,目前已经支持大部分安卓程序. Android X86平台是由Beyounn和Cwhuang主持设计的.项目的主要目的在于为X8 ...

  8. cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄控制坦克移动

    上篇显示了控制手柄,但是还不能用来控制坦克, 这篇将会讲手柄和坦克的移动结合起来. 1.先在CityScene场景中实现场景的虚函数virtual void onEnter(); onEnter在进入 ...

  9. Google的Java经常使用类库 Guava

    Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包括很多 Google 核心的 Java 经常使用库. 1. 基本工具 [Basic utilities]     让使用Java ...

  10. CCNP交换实验(5) -- 网关热备冗余

    HSRP:1.启用HSRP功能,并设置虚拟地址IP, 1为standby的组号.2.相同组号的路由器属于同一个HSRP组,所有属于同一个HSRP组的路由器的虚拟地址必须一致.3.HSRP的优先级默认为 ...