因此,我正试图为Screep游戏编写一个AI程序,它的文档被发现为这里。
我正在尝试用OCaml编写我的人工智能,然后我通过Bucklescript将其编译为Javascript,后者的文档被发现为这里。
在Screeps中,任何一个人都是Game.spawns.SPAWN_NAME.createCreep方法,在该方法中,SPAWN_NAME对应于所讨论的“派生”对象的名称。它接受一个字符串数组,对应于“爬行”的各个身体部分--它正在帮助产卵,并且给定正确的函数调用(有足够的能量储备),您的爬行将在游戏中产卵。
一个示例调用(在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假设我有一个名为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绑定,这样我就可以用body : string array和spawnName : string动态调用body : string array函数。任何帮助都会很棒。我知道在Bucklescript文档中简要地描述了bs.get和bs.set方法,但我不知道如何使用它们。
提前谢谢你的帮助。
编辑:
通过在Javascript模块中编写我自己的“接口”函数,我设法“解决”了这个问题,然后我可以通过bs.module Bucklescript绑定调用这个模块。
我写了一个函数
function spawnCreepHelper(spawnName, body) {
Game.spawns[spawnName].createCreep(body);
}然后我就可以通过
external spawnCreepHelper : string -> string array -> unit = ""
[@@bs.module "./supplemental", "Supplement"]在我看来,似乎是被黑了,所以如果有人有另一种方法来接近它,而不是自己重写API,请告诉我。
发布于 2017-07-27 18:27:38
您可能需要索引属性:
type spawn
type spawns
external spawns : spawns = "" [@@bs.val] [@@bs.scope "Game"]
external getSpawn : spawns -> string -> spawn = "" [@@bs.get_index]
external createCreep : spawn -> string array -> unit = "" [@@bs.send]
let _ =
let spawn = getSpawn spawns "spawn1" in
createCreep spawn [|"body"; "move"|]编译成
var spawn = Game.spawns["spawn1"];
spawn.createCreep(/* array */[
"body",
"move"
]);然后,您可以通过向Object.keys提供自己的外部类型化来获取密钥。
external keys : spawns -> string array = "" [@@bs.val] [@@bs.scope "Object"]
let _ =
spawns |> keys
|> Js.Array.forEach Js.log它将编译成
Object.keys(Game.spawns).forEach((function (prim) {
console.log(prim);
return /* () */0;
})); 或者,您可以将spawns键入为spawn Js.Dict,并使用BuckleScript已经提供的函数来访问和操作它:https://bucklescript.github.io/bucklescript/api/Js.Dict.html
https://stackoverflow.com/questions/45142259
复制相似问题