我目前正在为Bot Land编写一些脚本。Bot Land 是一款实时战略游戏,您无需使用鼠标和键盘来控制您的单位,而是编写代码通过 API 控制您的机器人,然后您的机器人去与其他机器人作战。如果您熟悉 SC2 中的单位,您可以创建类似于眨眼跟踪者、攻城坦克、医疗兵和雷兽的机器人。(对于软件工程师来说,这是一个非常有趣的游戏,但这超出了本问题的范围。)
Bot 控制具有三个逐渐增加的复杂性级别:默认 AI、类似Scratch的编程语言和一组简化的称为 BotLandScript 的 JavaScript。尽管 BotLandScript 的内置编辑器是合理的,但您必须将所有代码作为一个文件上传,并在任何地方使用全局顶级函数。当然,如果您的代码开始变长并且不同的机器人共享相同的功能,一段时间后这会变得很痛苦。
为了方便为多个机器人编写代码,减少在裸 JS 中编码时出现意外错误的机会,并增加我击败其他玩家的机会,我设置了上述 TypeScript 项目,为我的每个机器人提供一个公共库和代码. 当前目录结构大致如下所示:
lib/
bot.land.d.ts
common.ts
BlinkStalker/
BlinkStalker.ts
tsconfig.json
Artillery/
Artillery.ts
tsconfig.json
SmartMelee/
SmartMelee.ts
tsconfig.json
lib是机器人之间共享的通用代码,并为(非 TS)Bot Land API 提供 TypeScript 定义。然后每个机器人都有自己的文件夹,其中一个文件包含机器人代码,另一个文件是样板tsconfig.json:
{
"compilerOptions": {
"target": "es3",
"module": "none",
"sourceMap": false,
"outFile": "bot.js"
},
"files": [
"MissileKite.ts"
],
"include": [
"../lib/**/*"
]
}
当每个tsconfig.json建成后,它会创建一个相应的bot.js从机器人本身以及包含transpiled代码的所有代码common.js。由于以下几个原因,这种设置并不理想,其中包括:它需要大量重复的样板,难以添加新的机器人,每个机器人都包含大量不必要的代码,并且需要单独构建每个机器人。
但是,根据我迄今为止的研究,似乎没有一种简单的方法可以做我想做的事。特别是,使用新tsc -b选项和引用不起作用,因为这需要模块化代码,而 Bot Land 需要单个文件,其中所有函数都定义在顶层。
尽可能多地实现以下目标的最佳方法是什么?
添加新机器人不需要新的样板(例如tsconfig.json
每个机器人不需要)
使用import
了常用的功能,以避免输出无用的代码,但随后...
仍然以 Bot Land 的特定格式将所有功能输出为一个文件
生成多个输出文件的单个构建步骤,每个机器人一个
奖励:将构建过程与 VS Code 集成。目前有一个相应的样板tasks.json
用于构建每个子项目。
我模糊地推测,除了 之外tsc
,答案可能还涉及 Grunt 之类的东西,但我对此知之甚少,无法确定。
慕尼黑8549860
一只名叫tom的猫
相关分类