我想编写一个应用程序,用于模仿在线游戏中的玩家。
关于游戏:它是一款策略游戏,你可以在其中:
- 训练你的军队(你必须有足够的资源,然后点击一个单位,点击训练)
- 建造建筑物(矿山、军械库、房屋等)
- 攻击敌人(选择一个单位,选择一个敌人,点击攻击)
- 在建筑物之间运输资源
- 进行研究(经济、军事、科技等)
这是一个简化的列表,只是一个例子。最重要的是,如果你想进步,你必须做大量的点击操作…
我已经完成了应用程序的“导航”部分(我使用了 Watin 库 – http://watin.sourceforge.net/)。这意味着,我可以使用高级对象并操作它们,例如:
Soldiers soldiers = Navigator.GetAllSoldiers();soldiers.Move(someLocation);
现在我想迈出下一步 – 编写一种 AI,它可以模拟我的游戏风格。为此,我有两个想法(而且我都不喜欢它们):
- 登录游戏,然后在循环中按照一堆 if 语句执行(检查是否有人在攻击我,检查是否可以建造东西,检查是否可以攻击某人,循环)
- 设计一种脚本语言,并为其编写编译器。 这样我就可以编写简单的脚本并运行它们(Login(); CheckForAnAttack(); BuildSomething(); …)
还有其他的想法吗?
PS:有些人可能会认为这是作弊,而且它可能确实是,但我把它看作是一个学习项目,并且永远不会发布或转售。
回答:
如果策略不太复杂,那么一堆 if 语句是最好的选择。 但是,此解决方案的可扩展性不太好。
创建一个脚本语言(或者,现在人们所说的领域特定语言)并不能给你带来太多好处。 您不会让其他人创建 AI 代理吧? 您最好使用您的编程语言来完成此任务。
如果策略变得更加复杂,你可能需要查看贝叶斯信念网络或决策图。 这些方法擅长以结构化和显式的方式在不确定的环境中寻找最佳行动。 如果你用这些术语在谷歌上搜索,你会找到大量的信息和库可以使用。