В настоящее время я пишу несколько сценариев для 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
это общий код, который используется совместно ботами и предоставляет определения TypeScript для API-интерфейса Bot Land (не TS). Затем каждый бот получает свою собственную папку, в которой один файл содержит код бота, а другой - шаблон tsconfig.json
:
{
"compilerOptions": {
"target": "es3",
"module": "none",
"sourceMap": false,
"outFile": "bot.js"
},
"files": [
"MissileKite.ts"
],
"include": [
"../lib/**/*"
]
}
Когда каждый собран tsconfig.json
, он создает соответствующий, bot.js
который содержит переданный код от самого бота, а также весь код в common.js
. Эта настройка является неоптимальной по нескольким причинам, среди прочего: она требует большого количества дубликатов, затрудняет добавление новых ботов, включает в себя много ненужного кода для каждого бота и требует, чтобы каждый бот создавался отдельно.
Однако, основываясь на моих исследованиях , не кажется, что есть простой способ сделать то, что я хочу. В частности, использование новой tsc -b
опции и ссылок не работает, потому что для этого требуется, чтобы код был модульным, а Bot Land требует одного файла со всеми функциями, определенными на верхнем уровне.
Каков наилучший способ достичь как можно большего числа следующих действий?
- Не требуется новый шаблон для добавления нового бота (например, нет
tsconfig.json
на бот) - Используйте
import
для общих функций, чтобы избежать вывода неиспользуемого кода, но затем ... - По-прежнему выводить все функции в виде одного файла в определенном формате Bot Land
- Один шаг сборки, который создает несколько выходных файлов, по одному для каждого бота
- Бонус: интеграция процесса сборки с VS Code. В настоящее время существует соответствующий шаблон
tasks.json
для строительства каждого подпроекта.
Я смутно предполагаю, что ответ, вероятно, включает в себя что-то вроде Гранта tsc
, но я не знаю достаточно об этом, чтобы быть уверенным.
bot.js
?
tsconfig.json
. Транспортируемые файлы ботов могут быть названы как угодно, желательно в формате .js исходного файла. У меня это настроено сейчас в репо с выводом на build/MissileKite.js
.
tsconfig-gas.json
на что посмотреть?
<root>/MissileKite.ts
)