机器人,他们是如何工作的? 难道他们告诉视频游戏键被按下或单击鼠标?
如果不是有没有办法让你的程序告诉另一个方案是按一个键? 我想提出一个方案,以打一些比赛。 因此,任何资源或实例赞赏。
更新:所以一个办法就是效仿按键,所以都有些什么方法来做到这一点(在任何语言)?
机器人,他们是如何工作的? 难道他们告诉视频游戏键被按下或单击鼠标?
如果不是有没有办法让你的程序告诉另一个方案是按一个键? 我想提出一个方案,以打一些比赛。 因此,任何资源或实例赞赏。
更新:所以一个办法就是效仿按键,所以都有些什么方法来做到这一点(在任何语言)?
我在同一时间或其他(从Pogo游戏到Yohoho益智盗)写了一堆僵尸程序。 对于Windows,你通常会要么被发送Win32事件,模拟鼠标的移动,或欺骗窗口之间发送的实际低级别的消息,当鼠标在实际点击。 很多这真的取决于程序如何反应(通过接受消息的坐标,或在Java的情况下,立即读取鼠标坐标)。 “自动化”部分通常包括阅读屏幕和写入启发式或算法,用于确定的状态下,但也可以是一样好分组嗅探(大量的信息有在差扑克实现)或作为如哈克直接读取存储器位置。 相当大的“场”,并记录不完整,因为它是非常有利可图的,而不是很难进入。
对于键,尝试CodeProject上:
http://www.codeproject.com/KB/cpp/sendkeys_cpp_Article.aspx
和消息:
http://www.codeproject.com/KB/threads/sendmsg.aspx
最好的办法是学习发送使用Win32 API的信息,然后使用类似间谍++或其衍生物为“反向工程”如何按键和鼠标动作被发送到窗口。
Java有一个令人惊讶的携带型机器人类,它能够:
我给一个镜头,如果你正在寻找快速和容易。
这是其他地方所描述的深度在互联网上,但大多数机器人遵循一个简单的状态机的程序流程。 您阅读屏幕(或数据包,或内存),找出“状态”你在根据你的阅读和过去的数据,做计算,并将结果发送回给该程序。
阅读屏幕是很困难的,但如果你认为这是一个很大的时候,有几个相对,这将使你的何种状态的程序是在一念窗口“幸运”的像素是可以变得更加容易。的过程找到这些像素可以是自动化的。
某些程序(如那些在MMORPG为你磨)只是模拟按键。 要做到这一点的工具是AutoIt的 。
至于机器人,其实玩游戏本身,我没有做他们什么,但我假设他们会用某种预定动作集合,也许是试探,但不太可能的。
有几个种类的机器人的。 从我记得我以前玩CS(很长,很久以前)
有些bot使用应用程序本身来检查环境(地图,在这里玩家等等)的库中的机器人还可以使用库来控制运动。 我怀疑有很多机器人实现,调用鼠标消息告诉游戏如何移动等..
一些机器人仿真应用级协议(如果是多玩家)。 因此,换句话说,本场比赛甚至不需要运行。 一个机器人可以在虚拟的游戏运行。
我要去柜台一个什么其他的海报已建议运行:编写一个游戏机器人可能是一个更有价值的锻炼比实际玩游戏,并且是好奇他们是如何工作是一个好兆头。 :)
在这一概念的最大的缺陷是没有输入,但游戏输出。 你的机器人不能只是随机按下键,它需要知道什么是“新锐”。 很少有游戏可以让你查询这个数据这会使你的机器人来解决一个非常棘手的问题 - 将每个2D可视化数据的每秒60帧到虚拟空间。
有actuially游戏在那里,不仅可以让机器人的球员,但鼓励他们。 打开RTS是其中之一,但也有像那些简单GUN-TACTYX和crobots这是很好的出发点。
机器人将充当客户端游戏(服务器)。 然后,它们可以发送适当的数据只是作为一个用户可以手动地发送。 僵尸程序(客户端)从服务器(“有人即将从左侧进攻”),等等来分析数据。 客户应该然后能计算出最佳的移动和相应的数据发送到服务器来执行它。
我不知道这是否会与所有的游戏工作。
这在很大程度上取决于游戏。 例如我为所使用的网络浏览器ActiveX自动化移动Travian世界(这是一个在线游戏),一个机器人。 我又写道在C#应用程序,并把它做的东西花了约30分。 这是简单的呼吁ActiveX方法的让它做的事情一样填写文本字段或点击按钮。 对于登录例如我使用的如下因素:
var inputs = web.Document.GetElementsByTagName("input").
Cast<HtmlElement>();
var nume = inputs.First(h => h.GetAttribute("type") == "text");
var pass = inputs.First(h => h.GetAttribute("type") == "password");
var login = inputs.First(h => h.GetAttribute("type") == "image");
var form = web.Document.GetElementsByTagName("form")[0];
nume.SetAttribute("value", "user");
pass.SetAttribute("value", "pass");
login.InvokeMember("Click");
对于那些游戏,是基于桌面的事情变得更加复杂。 Windows允许一个aplication将消息发送到另一个应用程序,所以我想你可以用它来发送消息到游戏(虽然wheather这种方式更适合游戏使用DirectX输入我不知道)
像你这样的机器人形容它只会模仿按键和鼠标移动/点击,所以如果一个人正在播放或其他程序的游戏不能告诉。 它不会在所有的游戏接口。
您可以模拟鼠标移动/点击和键盘输入在Java中与机器人类。 它也可以让你把屏幕截图。
我认为AutoIt的是做这样的软件的很好的语言。 虽然我没有用它来建立机器人,点击发送键和很容易。
我的理解是最高端的游戏机器人使用系统调用来自己映射到游戏客户端的内存空间,反向工程的布局,并直接操作客户端程序的内部变量。 这比我会弥补玩票的方式更多的工作。
当你说“控制程序”想想节目是如何被控制。 大多数接受键盘/鼠标输入。
如果你写一个程序来模拟键盘/鼠标输入,你去那里。
这么做的必然结果是,如果一个程序接受参数通过输入框过去了,写一个程序发送的参数,好像他们是通过一个输入框发送。
这是所有的机器人是如何工作的。 希望它带来了曙光为您服务!
编辑:这是绝大多数机器人是如何工作:-)
对于这一点,你需要知道编程。 不过,也有让您的可视装置编程程序。 对他们来说,你并不需要能够进行编程。 一个例子是方案Kibor。 这是对您的用途而设计,具有可视化编辑器,使用它可以创建框图机器人。 该方案Kibor的说明
键盘的屏幕截图
它有机器人很多现成的功能。 甚至有一个内置的文本识别模块截图Kibor。 文字识别