因此,我正在尝试为 Screeps 游戏编写 AI,其文档可在此处找到。
我正在尝试用 OCaml 编写我的 AI,然后通过Bucklescript 将其编译为 Javascript ,其文档位于此处。
Anywho,在 Screeps 的 API 中是 method Game.spawns.SPAWN_NAME.createCreep
,它SPAWN_NAME
对应于所讨论的“spawn”对象的名称。它接受一个字符串数组,对应于它正在帮助生成的“Creep”的各个身体部位,并给出正确的函数调用(具有足够的能量储备),你的 Creep 将在游戏中生成。
一个示例调用(在 JS 中)将是Game.spawns['Spawn1'].createCreep(["body","move"]);
我已经有了代码,它给了我string array
OCaml 中的所有衍生品。该代码是:
let spawns : string array = [%bs.raw{|Object.keys(Game.spawns)|}]
let spawnsArray : string array = spawns
假设我有一个名为 的 spawn Spawn1
,并且在 OCaml 中我还有一个用于身体成分的字符串数组:
let spawnName : string = "Spawn1"
let body : string array = [|"body","move|]
然后,我使用如下所示的 for 循环遍历该数组中的每个字符串:
for i=0 to Array.length spawns - 1 do
// I WANT TO CALL SOMETHING ANALOGOUS TO MY FUNCTION HERE
done
在我的一生中,我无法弄清楚如何格式化 Bucklescript 绑定,以便我可以使用and动态调用该createCreep
函数。任何帮助都会很棒。我知道 Bucklescript 文档中简要描述了和方法,但我不知道如何使用它们。body : string array
spawnName : string
bs.get
bs.set
在此先感谢您的帮助。
编辑:
我设法通过在 Javascript 模块中编写自己的“接口”函数来“解决”这个问题,然后我可以通过bs.module
Bucklescript 绑定调用该模块。
IE 我写了一个函数
function spawnCreepHelper(spawnName, body) {
Game.spawns[spawnName].createCreep(body);
}
然后我可以通过
external spawnCreepHelper : string -> string array -> unit = ""
[@@bs.module "./supplemental", "Supplement"]
对我来说似乎有点被破解了,所以如果有人有另一种不涉及自己重写他们的 API 的方法,请告诉我。