Scripting 我该如何连接到一个游戏中并编写一个脚本来操纵它?

Scripting 我该如何连接到一个游戏中并编写一个脚本来操纵它?,scripting,Scripting,我知道这是一个相当开放的问题,但我想知道人们是如何编写脚本来“玩”一个游戏,或者以某种方式操纵它的。我一直在想,我会尝试让一个工作的人工智能玩游戏的乐趣,但甚至不知道从哪里开始。有什么好的资源来学习这个吗?好的语言是什么?一旦我掌握了语言,我该如何将我的脚本与游戏挂钩?如果有帮助的话,我想试试简单的flash游戏 非常感谢 您是想“玩”一个现有的游戏,还是想编写一个可以编写脚本的游戏 如果是前者,您将找到该游戏的API并开始用适当的语言编写代码。例如,以虚幻为动力的游戏使用虚幻脚本,并随工具一起

我知道这是一个相当开放的问题,但我想知道人们是如何编写脚本来“玩”一个游戏,或者以某种方式操纵它的。我一直在想,我会尝试让一个工作的人工智能玩游戏的乐趣,但甚至不知道从哪里开始。有什么好的资源来学习这个吗?好的语言是什么?一旦我掌握了语言,我该如何将我的脚本与游戏挂钩?如果有帮助的话,我想试试简单的flash游戏

非常感谢

您是想“玩”一个现有的游戏,还是想编写一个可以编写脚本的游戏

如果是前者,您将找到该游戏的API并开始用适当的语言编写代码。例如,以虚幻为动力的游戏使用虚幻脚本,并随工具一起提供,以便您可以嵌入新功能。你非常依赖游戏创作者留下这样的“in”


…除非你想彻底疯掉,并破解可执行文件本身,以某种方式执行你自己的代码。有关如何执行此操作的信息,请搜索有关游戏“培训师”的信息。我不确定什么是一个伟大的搜索词集,但我知道很多游戏都发布了培训师,所以输入
“trainer”
,看看你得到了什么?

最好的方法是使用游戏提供的API,如果有的话。例如,文明游戏有一个非常完整的修改引擎,可以让你编写任何你想要的脚本。帝国时代和其他各种游戏也是如此


不过简单的flash游戏?那很难。这些工具通常不提供任何受支持的脚本编写方法,因此您只能使用模拟输入。这将很困难。

您可以在Java6中非常简单地实现这一点

  • 将Java应用程序中的对象/函数公开到脚本环境中 例如,您可以将角色或游戏世界暴露到脚本环境中,并允许脚本控制它

  • 从Java环境调用脚本函数/方法 允许脚本自定义行为、添加新动作等。此操作的另一个用途是覆盖默认内置游戏规则并加载您自己的内部规则。另一个用途是作为宏工具。通常,这将是主游戏循环的一部分

  • 将脚本用作数据/级别文件 例如,在基于任务的游戏中,您可以使用脚本定义特定于游戏的DSL,并使用此DSL定义新任务。当游戏启动时,它评估数据文件并创建游戏模型

  • 要将脚本引擎集成到Java中,只需执行以下操作

       ScriptEngineManager mgr = new ScriptEngineManager();
       ScriptEngine jsEngine = mgr.getEngineByExtension("js");
       jsEngine.eval("print('Hello world!');
    
    将对象公开到脚本环境中的步骤

       jsEngine.put("avatar", avatarObject);
       //An avatar object is now available in myscript.js
       jsEngine.eval(new FileReader("myscript.js");
    
    调用脚本中的函数

       jsEngine.eval("function hello(name) ... ");
       Invocable inv = (Invocable)jsEngine;
       inv.invokeFunction("hello", "Fred");
    
    脚本的一个问题是,脚本可以访问整个应用程序。通过在创建ScriptEngineManager实例时设置类加载器,可以限制脚本可以“看到”的内容。 Java6附带了一个捆绑的JavaScript引擎。然而,我更喜欢Groovy,加载Groovy基本上意味着将getEngineByExtension()中的“js”更改为“Groovy”

    我知道很多人都说Java对游戏来说速度不快,但是如果你正在编写基于回合的游戏或者像Farmville这样的社交游戏,那么我认为它已经足够了


    对于基于C/C++的游戏,我认为首选的脚本引擎是。我没有用过它,所以我不能对它发表评论

    简单的方法是使用autoit控制鼠标和键盘功能。你也可以从你的屏幕上读出信息,但这有点有限。如果你知道可能性有限,最好只检查一下事情是否发生了变化,或者检查一下屏幕某个区域的内容。不太容易阅读和解释文本。Autoit擅长像farmvile这样的游戏自动化。我还为在线赌场制作了21点机器人。并将其用于RPG中的小型但平凡的重复(制造)任务。但不要期望为RTS或FPS构建AI。 使用谷歌很容易找到它。一个快速和小的下载。优秀的文档,你可以在几天内学会它


    我想最难的是人们在上面写的。与游戏数据交互。我来这里的原因就是寻找这方面的信息。我用C++或java来查看它。虽然这些语言都很相似,在学习1之后您可以全部使用它们,但这些语言都伴随着复杂的软件环境,需要花费大量的时间来学习。然而,使某些东西真正可靠的可能性和机会要大得多

    哦,呵呵,你进入了一个噩梦般的编码世界。如果我想尝试,你会建议用什么语言来做这件事,我该如何尝试获取输入?我想“玩”一个现有的游戏。它是用flash制作的。然后你需要编写软件,可以“查看”屏幕,并将鼠标事件发送到flash应用程序所在的窗口。没有办法“插入”flash应用程序(我认为大多数应用程序都是加密的?),你赢了。“将对象/函数公开到脚本环境中”的确切含义是什么?如何做到这一点?哪里有指南吗?如果你看我上面使用jsEngine.put的示例,你会注意到我将avatarObject绑定到一个名为“avatar”的名称。现在执行脚本myscript.js时,将有一个预定义的对象称为“avatar”。有关您可以执行的操作的完整描述,请参阅。