2010-08-31 77 views
1

我想编写一个应用程序,它可以模拟在线游戏中的玩家。如何模仿在线游戏中的玩家

游戏简介:这是一个战略,在那里你可以:

  • 训练你的军队(你必须有足够的资源,然后单击设备,单击列车)
  • 建造建筑物(矿山,军械库,房屋,...)
  • 攻击敌人(选择单位,选择一个敌人,点击攻击)建筑物之间
  • 运输资源
  • 做研究(经济,军事,TECHNOLOGIC,...)

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

我已经有'导航'部分的应用程序(我使用了Watin库 - http://watin.sourceforge.net/)。这意味着,我可以用高水平的对象和操纵它们,例如:

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

现在我愿意回答大家的下一步 - 写一种人工智能,它可以模拟我的游戏风格。为此,我有两个想法(我也不喜欢他们的):

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

任何其他想法?

PS:有些人可能会认为这是作弊行为,可能是这样,但我把它看作一个学习项目,它永远不会被发布或重新发布。

+6

当你完成这个项目时,你能写一个模仿Jon Skeet在StackOverflow上的应用吗? – 2010-08-31 17:59:06

+1

为什么要设计自己的语言和编译器?只需实现LUA或类似的东西。 – You 2010-08-31 18:01:15

+0

根据您所谈论的游戏,可能会有现有的工具允许这样做。 – 2010-08-31 18:02:19

回答

3

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

制作脚本语言(或者像现在这样称为域名特定的语言)并不会给你带来太多的收益。你不会有其他人创建AI代理吗?你可以更好地使用你的编程语言。

如果策略涉及更多,您可能需要查看贝叶斯信任网络或决策图。他们善于以结构清晰的方式在不确定的环境中寻找最佳的行动。如果你按照这些条款搜索google,你会发现很多信息和库可供使用。

1

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

1

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

+1

Sheesh ...神经网络当然不是唯一的*方式来实现这一目标。它不像您认为构建或训练NN那么容易。 – 2010-09-01 00:41:26

1

大多数策略游戏AI都使用“分层”方法,这与您已经描述的方式大致相同:定义相对独立的操作域(即决定要研究的内容大多独立于寻路),然后创建一个AI层来处理该域。然后有一个“顶层”AI层指导中间层执行任务。

这些中间层各自如何工作(以及您的“常规”层如何工作)可以分别确定。您可能想出了一些对“研究内容”层(基于您的偏好)而言过于僵硬和直截了当的问题,但您可能需要更复杂的“常规”层方法(可能需要指导和响应其他层)。

1

你有背后的源代码?如果没有,这将是一种艰难的追踪每个CPU你的位置(你的电脑在你的情况)正在对抗。你将不得不开发某种可以做到这一点的插件,因为从它的声音来看,你正在处理某种类型的RTS;这需要评估许多不同CPU之间的许多不同位置场景。

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

说实话,你试图做的事对你正在玩的游戏类型来说几乎是不可能的。你似乎还没有考虑到这一点。编程是一项有用的技能,但这不是魔术。

看看麻省理工学院Battlecode的一些资料(如果你能找到的话)。从编程的角度来看,这可能是你的胡同。

+1

编程可以是魔术,如果你做错了! – fredley 2010-09-01 08:09:42

+0

哈哈...Touché! – 2010-09-01 08:55:35