如何模仿在线游戏中的玩家

时间:2010-08-31 17:56:05

标签: artificial-intelligence simulation

我想写一个应用程序,它会模仿在线游戏中的玩家。

关于游戏:这是一种策略,您可以:

  • 训练你的军队(你必须有足够的资源,然后点击一个单位,点击火车)
  • 建造建筑物(地雷,军械库,房屋......)
  • 攻击敌人(选择一个单位,选择敌人,点击攻击)
  • 建筑物之间的运输资源<​​/ li>
  • 进行研究(经济学,军事,技术,...)

这是一个简化列表,只是一个例子。主要的是,如果你想要进步,你必须做很多点击......

我已经拥有应用程序的“导航”部分(我使用了Watin库 - http://watin.sourceforge.net/)。这意味着,我可以使用高级对象并对其进行操作,例如:

Soldiers soldiers = Navigator.GetAllSoldiers();
soldiers.Move(someLocation);

现在我想采取下一步 - 编写一种AI,它可以模拟我的游戏风格。为此我有两个想法(我不喜欢其中任何一个):

  • 登录游戏,然后在循环中跟随一堆if语句(检查是否有人攻击我,检查我是否可以构建某些东西,检查我是否可以攻击某人,循环)
  • 设计一种脚本语言并为其编写编译器。这样我就可以编写简单的脚本并运行它们(Login(); CheckForAnAttack(); BuildSomething(); ...)

还有其他想法吗?

PS:有些人可能认为这是作弊而且可能是,但我认为这是一个学习项目,它永远不会被发表或重新出版。

5 个答案:

答案 0 :(得分:3)

如果策略不太复杂,那么一堆if语句是最佳选择。但是,这种解决方案不能很好地扩展。

制作脚本语言(或者,现在称之为域特定语言)并不会给你带来太大的影响。你不会有其他人创建AI代理商吗?你可以更好地使用编程语言。

如果策略涉及更多,您可能需要查看贝叶斯信念网络或决策图。他们擅长以结构化和明确的方式在不确定的环境中寻找最佳行动。如果您使用这些条款进行谷歌搜索,您将找到大量可供使用的信息和库。

答案 1 :(得分:1)

听起来你想要一台有限状态机。我已经用它们在编码机器人方面取得了不同程度的成功。根据游戏的不同,你可能会更好地编写一个可以学习的AI,但听起来你很简单,不需要那么复杂。
不要创建一种新语言,只需创建一个可以从状态机调用的函数库。

答案 2 :(得分:1)

首先,我必须指出,这个项目(仅用于教育目的)对于一个人来说太大了,无法在合理的时间内完成。但是如果你想要AI模仿你的个人游戏风格,脑海中浮现的另一种选择是神经网络:你经常玩游戏(真的很多)并记录你所做的所有动作并将这些数据提供给这样的网络,如果一切顺利,AI应该和你大致相同。但是我担心这只是你不喜欢的第三个想法,因为它需要花费大量的时间来完善它。

答案 3 :(得分:1)

大多数策略游戏AI使用“分层”方法,与您已经描述的方法非常相似:定义相对独立的操作域(即决定研究的内容主要与路径寻找无关),然后创建AI层处理该域名。然后有一个“顶层”AI层,指示中间层执行任务。

每个中间层如何工作(以及“一般”层的工作方式)可以分别确定。您可能会为“研究内容”层(基于您的偏好)提出一些相当严格和直接的内容,但您可能需要一种更复杂的方法来处理“常规”层(这可能是指导和响应输入的其他层)。

答案 4 :(得分:1)

你有游戏背后的源代码吗?如果不是这样,那就很难跟踪每个CPU的位置(你的计算机在你的情况下)正在与之作斗争。你必须开发一些可以做到这一点的插件,因为从它的声音来看,你正在处理某种类型的RTS;这需要评估许多不同CPU之间的许多不同位置场景。

如果你想模拟你的动作,你可以很容易地使用一些WinAPI跟踪你的鼠标。您还可以在玩游戏时录制屏幕(这可能不会有太大帮助,但如果您足够坚定,可能会有所帮助。)。

粗暴地说,你正在尝试做的事情对于你正在玩的游戏来说几乎是不可能的。你似乎还没想到这一点。编程是一项有用的技能,但它并不神奇。

查看MIT Battlecode上的一些内容(如果你能找到的话)。在这类事情的编程方面,这可能是你的胡同。