代码之家  ›  专栏  ›  技术社区  ›  sventevit

如何在网络游戏中模仿玩家

  •  1
  • sventevit  · 技术社区  · 14 年前

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

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

    • 训练你的军队(你必须有足够的资源,然后点击一个单位,点击训练)
    • 建造建筑物(矿山、军械库、房屋等)
    • 攻击敌人(选择一个单位,选择一个敌人,点击攻击)
    • 建筑物之间的交通资源
    • 进行研究(经济、军事、技术等)

    这是一个简化的列表,只是一个例子。最重要的是,如果你想前进的话,你需要做很多的点击…

    我已经准备好了应用程序的“导航”部分(我使用了watin库- http://watin.sourceforge.net/ )这意味着,我可以使用高级对象并操作它们,例如:

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

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

    • 登录游戏,然后在一个循环中遵循一系列if语句(检查是否有人攻击我,检查我是否可以构建某些内容,检查我是否可以攻击某人,循环)
    • 设计一种脚本语言并为其编写编译器。这样我就可以编写简单的脚本并运行它们(login();checkforanattack();buildSomething();…)

    还有其他想法吗?

    附言:有些人可能认为这是作弊,但我认为这是一个学习项目,它将永远不会出版或转售。

    5 回复  |  直到 14 年前
        1
  •  3
  •   Emile    14 年前

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

    制作一种脚本语言(或者现在人们称之为特定于领域的语言)并不能给你带来多少好处。你不会让其他人创建人工智能代理吧?为此,您可以更好地使用编程语言。

    如果该策略更加复杂,您可能需要查看贝叶斯信念网络或决策图。他们善于以结构化和明确的方式在不确定的环境中寻找最佳的行动。如果你用谷歌搜索这些术语,你会发现很多信息和图书馆可以使用。

        2
  •  1
  •   Jean-Bernard Pellerin    14 年前

    听起来你想要一个有限状态机。我已经在各种程度上成功地使用了它们对机器人程序进行编码。根据你所做的游戏,你最好编写一个学习的人工智能代码,但听起来你的程序很简单,不需要那么复杂。
    不要创建新的语言,只需创建一个可以从状态机调用的函数库。

        3
  •  1
  •   Shaggy Frog    14 年前

    大多数策略游戏a is使用一种“分层”的方法,这与您已经描述的方法非常相同:定义相对独立的动作域(即,决定要研究的内容主要独立于寻路),然后创建一个a i层来处理该域。然后有一个“顶层”的人工智能层,指导中间层执行任务。

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

        4
  •  1
  •   Mr_Spock    14 年前

    游戏背后有源代码吗?如果不是这样的话,就很难追踪到你(在你的情况下是你的电脑)所对抗的每个CPU的位置。你必须开发一些插件来完成这项工作,因为从它的声音来看,你正在处理某种类型的即时战略;这需要在不同的CPU之间评估很多不同的位置场景。

    如果你想模拟你的动作,你可以很容易地使用一些winapi追踪你的鼠标。您还可以在播放时录制屏幕(这可能没什么帮助,但如果您有足够的决心,可能会有所帮助)。

    坦率地说,对于你所玩的那种游戏来说,你要做的几乎是不可能的。 你好像还没想清楚。编程是一种有用的技能,但它不是魔法。

    看看麻省理工的战斗代码上的一些东西(如果你能找到的话)。对于这类事情的编程来说,这可能是你的拿手好戏。

        5
  •  1
  •   JBSnorro    14 年前

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