現在、ボットランド用のスクリプトをいくつか書いています。Bot Landは、マウスとキーボードでユニットを制御する代わりに、APIを介してボットを制御するコードを記述し、ボットが他のボットと戦うリアルタイム戦略ゲームです。SC2のユニットに精通している場合は、まばたきストーカー、攻城戦車、メディック、ウルトラリスクに似たボットを作成できます。(これはソフトウェアエンジニアにとって非常に楽しいゲームですが、それはこの質問の範囲外です。)
ボット制御には、3つのレベルの複雑さの増加があります。デフォルトのAI、スクラッチのようなプログラミング言語、および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以外の)ボットランドAPIのTypeScript定義を提供します。次に、各ボットは独自のフォルダーを取得し、1つのファイルにはボットコードが含まれ、もう1つのファイルにはボイラープレートが含まれ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
、未使用のコードを出力しないようにする一般的な機能のために、しかし、その後... - すべての機能をボットランドの特定の形式で1つのファイルとして出力します
- ボットごとに1つ、複数の出力ファイルを生成する単一のビルドステップ
- おまけ:ビルドプロセスとVSコードの統合。現在、
tasks.json
各サブプロジェクトを構築するための対応する定型があります。
答えはおそらくに加えてGruntのようなものを含んでいるのではないかと漠然と推測しますtsc
が、確かにそれについて十分に知りません。
bot.js
か?
tsconfig.json
。分解されたボットファイルには任意の名前を付けることができ、できれば元のファイルの.jsバージョンを使用できます。に出力するレポで、このように設定しましたbuild/MissileKite.js
。
tsconfig-gas.json
そこを見て、関連する事は?
<root>/MissileKite.ts
)