电子游戏机器人?

时间:2010-04-29 21:53:26

标签: c++ artificial-intelligence

我一直想知道的东西,特别是因为它让我在小时候开始编程,是视频游戏机器人的工作方式吗?我确信有很多不同的方法,但是MMORPG的自动化呢?甚至是FPS型机器人?

我在谈论玩家自制的机器人。

7 个答案:

答案 0 :(得分:46)

要“游戏”游戏,您需要能够以编程方式执行两项操作:检测游戏中发生的事情,并为游戏提供输入。

检测游戏中发生的事情往往是两者中的难点。执行此操作的一些方法是:

  • Screen-Scraping此技术捕获屏幕上的图像并对其进行解析,寻找敌人,玩家状态,能量提升,游戏消息,时钟等等。这往往是一种特别困难的方法。 OCR技术可用于处理文本,但如果文本是在游戏世界之上编写的(而不是在具有纯实背景的UI元素上),则不断变化的背景会使得难以获得准确一致的结果。在屏幕上查找非文本对象可能会更加困难,尤其是在3D世界中,因为单个对象可能存在许多不同的位置和方向。
  • 音频提示在某些游戏中,动作和事件伴随着独特的音效。可以通过监视游戏的音频输出并将其与相关音效的记录相匹配来检测这些事件。有些游戏允许玩家为事件提供自己的声音效果,这允许使用易于收听和过滤的声音效果。
  • 内存监控如果能够很好地理解游戏的内部工作原理,那么您可以通过检查游戏的内存空间来监控游戏的状态。控制台系统的一些作弊工具(例如Game Genie)使用此方法。通过检测游戏更新的内存,可以检测游戏正在做什么。有些游戏会随机化每次启动时使用的内存位置,以试图阻止此漏洞。
  • 数据包分析使用适当的驱动程序,您可以拦截游戏的数据包,因为它们被发送到网卡或从网络中检索(对于在线游戏)。 Analysis这些数据包可以揭示您的游戏客户端与服务器通信的内容,这通常围绕玩家/敌人的行为。
  • 游戏脚本有些游戏具有内置脚本界面。如果可用,这通常是最简单的方法,因为它是游戏软件的设计目标(以前的方法通常都算作“黑客”)。有些脚本必须在游戏中运行(通过控制台或通过附加系统),有些脚本可以通过已发布的API通过游戏进行通信的外部程序运行。

将输入事件生成回游戏通常是更容易的任务。一些方法包括:

  • 内存“戳”与上面的内存监控部分类似,内存戳是将数据直接写入游戏内存空间的行为。这是Game Genie用于应用其作弊码的方法。鉴于现代游戏的复杂性,这是一项非常困难的任务,可能会使整个游戏崩溃。
  • 输入仿真可以生成“假”键盘或鼠标信号,以代替直接的人机交互。这可以使用AutoIt等工具在软件中完成。也可以使用硬件黑客,例如连接到计算机的USB或PS / 2端口并且系统看起来像是键盘的设备,而是根据从计算机接收的信号生成假的按键事件(例如,通过串行端口)。这些方法可能难以让游戏检测到。
  • 游戏脚本如上所述,有些游戏提供了以编程方式控制它的内置方法,利用这些工具通常是最简单的(但也许不是最强大的)技术。

请注意,在游戏中运行“僵尸程序”通常会违反游戏的使用条款,并可能导致您被暂停,禁止或更糟。在某些司法管辖区,这可能会受到刑事处罚。这是使用游戏内置脚本功能的另一个好处;如果它被设计成游戏软件的一部分,那么游戏发行商很可能不会禁止你使用它。

答案 1 :(得分:11)

我自己写了一个简单的MMORPG机器人。我用了AutoHotkey

  • 它提供了许多模拟用户输入的方法 - 一个可以工作。用C ++编写自己的工作程序是很繁琐的(或者查看AutoHotkey的来源)。
  • 它可以直接在屏幕上搜索像素模式,甚至是游戏画面(DirectX)

所以我所做的就是在屏幕上搜索敌人的名字(存储为带有游戏字体的图片),脚本点击它下方的几个像素进行攻击。如果它太低,它还会跟踪健康栏和盆。

非常琐事。但我知道一个使用AutoHotkey制作的WoW机器人。我see很多其他人有同样的想法(我的不是魔兽,但也可能是非法的。)

More advanced techniques不会直接捕捉屏幕read the game's memory。你必须做很多逆向工程才能完成这项工作。当游戏更新时它就会停止工作。

答案 2 :(得分:5)

个人如何日常工作?

这是游戏中的AI解决的问题。

您希望您的实体做什么?编码您的实体来做到这一点。如果你想让你的怪物追逐玩家的化身,怪物只需要面对化身然后向它移动。当怪物进入合适的距离时,它可以选择咬玩家头像,这个选择可以像AmICloseEnough(monster, player);一样简单,也可以更复杂甚至随意。

FPS中的机器人很难做到正确,因为它很容易让它们变得完美但却不那么容易让它们变得有趣。例如。他们总能确切地知道玩家的确切位置(gPlayer.GetPosition()),因此每次都能轻松击中玩家。使机器人像人类一样移动需要一些“艺术”。

答案 3 :(得分:0)

它被称为AI(人工智能)并且实际上并不难以复制,游戏编程语言中的一组规则和命令将起到作用。例如,FPS机器人可以通过获取玩家身体的坐标并设置敌人机器人的枪来瞄准该坐标并在一定范围内开始射击来工作。

答案 4 :(得分:0)

对于FPS风格的机器人,您可以查看虚幻开发工具包。据我了解,这有很多实际的游戏源代码。

http://udn.epicgames.com/Three/DevelopmentKitHome.html

答案 5 :(得分:0)

bta给出了非常好的答复。我只想补充一点,说游戏公司的不同检测手段可以使用不同的方法。通过内存监控或数据包分析入侵游戏客户端通常更容易检测到。我一般不推荐它,因为你很容易被抓住。

与输入仿真一起使用的屏幕抓取通常是最安全的游戏方式而不会被抓住。很多人(包括我自己)多年来都没有这么做过。

此外,为了在检测游戏中发生的事情和提供输入之间添加额外的步骤,一些游戏需要进行大量计算才能决定向游戏提供何种输入。例如,有一个游戏,我必须计算攻击敌人时发送的船只数量,这是基于我拥有的船只数量,船只的类型,以及它是谁和什么样的敌人。计算通常是“简单”部分,因为您通常可以使用几乎任何编程语言来完成此操作。

答案 6 :(得分:-1)

我认为机器人是各种游戏/赌博行业的真正杀手。黑客使用机器人代表他们玩游戏,这对其他没有陷入弊端的人提出了严重的信任因素。正如Ryan所说,最聪明的机器人使用屏幕抓取,但我不同意他的观点,即无法抓住屏幕抓取机器人。有多种屏幕抓取防护服务,包括ShieldSquare

免责声明:我是ShieldSquare的联合创始人之一