我如何挂钩游戏并编写脚本来操纵它?

时间:2010-04-09 01:32:47

标签: scripting

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

非常感谢!

4 个答案:

答案 0 :(得分:2)

您是想“玩”现有游戏,还是编写某种可以编写脚本的游戏?

如果是前者,你会发现该游戏的API并开始用适当的语言编写代码。例如。虚幻游戏使用UnrealScript并附带工具,因此您可以嵌入新功能。你几乎依赖游戏创作者留下像这样的“in”......

...除非你想完全疯狂并破解可执行文件本身以某种方式执行你自己的代码。有关如何执行此操作的信息,请搜索有关游戏“培训师”的信息。我不确定搜索条件会是多么好,但我知道很多游戏都会发布培训师,所以输入"trainer <my_favorite_game>"并看看你得到了什么?

答案 1 :(得分:1)

最好的方法是使用游戏提供的API(如果有的话)。例如,Civilization游戏带有一个非常完整的modding引擎,允许您编写任何您想要的脚本。帝国时代和各种其他游戏也是如此。

简单的Flash游戏呢?那将是艰难的。那些通常不提供任何受支持的脚本方式,因此您将留下模拟输入。这很难。

答案 2 :(得分:1)

您可以在Java 6中完成此操作。

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

  2. 从Java环境调用脚本函数/方法 允许脚本自定义行为,添加新操作等。另一个用途是覆盖游戏规则中的默认构建并加载自己的内部规则。另一种用途是作为宏观设施。通常这将是主要游戏循环的一部分

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

  4. 要将脚本引擎集成到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实例时通过设置类加载器来限制脚本可以“看到”的内容。 Java 6附带了一个捆绑的JavaScript引擎。但是我更喜欢Groovy并且加载Groovy基本上意味着将getEngineByExtension()中的'js'更改为'groovy'。

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

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

答案 3 :(得分:0)

简单的方法是使用autoit控制鼠标和键盘功能。你也可以从你的屏幕上读出信息,但它有点受限如果你知道有可能的数量有限,最好检查一下是否有变化或查看屏幕某个区域的内容。阅读和解释文字并不容易。 Autoit非常适合自动化诸如farmvile之类的游戏。我还为在线赌场制作了二十一点机器人。并将其用于RPG中的小型但平凡且重复(制造)的任务。不要期望为RTS或FPS构建AI。 使用谷歌很容易找到自动。一个快速和小的下载。优秀的文档,您可以在几天内学习它。

我想,人们在上面写的内容很难。与游戏数据交互。搜索有关这方面的信息是我的理由。我用C ++或Java看到它。虽然这些语言都很相似,但您可以在学习1之后使用它们,但这些语言带有复杂的软件环境,需要花费大量时间来学习。尽管如此,制造真正可靠的东西的可能性和机会要大得多。