我目前正在为Bot Land编写一些脚本。Bot Land是一种实时策略游戏,您无需使用鼠标和键盘来控制自己的单位,而是可以编写代码来通过API控制机器人,然后让机器人与其他机器人进行对抗。如果您熟悉SC2中的单位,则可以创建类似于眨眼潜行者,攻城坦克,医护人员和超能力的机器人。(对于软件工程师来说,这是一个非常有趣的游戏,但这超出了此问题的范围。)
Bot控件的复杂度从三个级别提高:默认的AI,类似于Scratch的编程语言以及减少的JavaScript集合,称为BotLandScript。尽管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
是bot之间共享的通用代码,并提供(非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
完每个文件后,它会创建一个对应文件,其中包含来自bot本身的转译代码以及中的所有代码common.js
。此设置由于以下几个原因而欠佳:需要大量重复的样板,使其很难添加新的bot,为每个bot包含很多不必要的代码,并且要求分别构建每个bot。
但是,根据我到目前为止的研究,似乎没有一种简单的方法可以完成我想要的事情。特别是,使用new tsc -b
选项和引用不起作用,因为这需要对代码进行模块化,而Bot Land需要一个文件,且所有功能都在顶层定义。
达成以下尽可能多的最佳方法是什么?
- 不需要新的样板即可添加新的机器人(例如,
tsconfig.json
每个机器人不需要) - 使用
import
了常用的功能,以避免输出无用的代码,但随后... - 仍以Bot Land的特定格式将所有功能输出为一个文件
- 一个生成多个输出文件的构建步骤,每个机器人一个
- 奖励:将构建过程与VS Code集成在一起。当前有一个
tasks.json
用于构建每个子项目的样板。
我含糊地推测答案可能除了之外还涉及Grunt之类的东西tsc
,但是我对此一无所知。
bot.js
?
tsconfig.json
。可以将已翻译的bot文件命名为任何名称,最好是原始文件的.js版本。我现在在回购输出到中以这种方式设置它build/MissileKite.js
。
tsconfig-gas.json
看有相关的事情?
<root>/MissileKite.ts
)