나는 현재 Bot Land 용 스크립트 를 작성 하고 있습니다. Bot Land는 마우스와 키보드로 장치를 제어하는 대신 API를 통해 봇을 제어하는 코드를 작성한 다음 봇이 다른 사람의 봇과 싸울 수있는 실시간 전략 게임입니다. SC2의 장치에 익숙한 경우 깜박임 추적기, 공성 탱크, 의료진 및 울트라 리스크와 유사한 봇을 만들 수 있습니다. (소프트웨어 엔지니어에게는 재미있는 게임이지만이 질문의 범위를 벗어납니다.)
봇 제어는 기본 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가 아닌) 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
봇 자체의 코드가 변환 된 코드와에있는 모든 코드가 포함 된 해당 항목 이 생성 됩니다 common.js
. 이 설정은 몇 가지 이유로 차선책입니다. 많은 중복 상용구가 필요하고 새 봇을 추가하기 어렵고 각 봇에 대해 불필요한 코드가 많이 포함되어 있으며 각 봇을 별도로 빌드해야합니다.
그러나 지금까지의 연구에 따르면 원하는 것을 수행하는 쉬운 방법이없는 것 같습니다. 특히, 새로운 tsc -b
옵션과 참조를 사용하면 코드가 모듈화되어야하고 Bot Land는 모든 기능이 최상위 레벨에 정의 된 단일 파일을 필요로하기 때문에 작동하지 않습니다.
가능한 많은 다음을 달성하는 가장 좋은 방법은 무엇입니까?
- 새로운 봇을 추가하기 위해 새로운 상용구가 필요하지 않습니다 (예 :
tsconfig.json
봇당 없음 ) - 사용
import
하지 않는 코드가 출력되지 않도록 일반적인 기능에 사용하십시오 . - Bot Land의 특정 형식으로 모든 기능을 단일 파일로 출력
- 봇당 하나씩 여러 개의 출력 파일을 생성하는 단일 빌드 단계
- 보너스 : 빌드 프로세스를 VS 코드와 통합 현재
tasks.json
각 하위 프로젝트를 구축하기위한 상용구 가 있습니다.
나는 그 대답에 아마도 Grunt와 같은 것이 포함되어 있다고 모호하게 추측 tsc
하지만 확실하게 알 수는 없습니다.
bot.js
합니까?
tsconfig.json
있습니다. 변환 된 봇 파일의 이름은 원본 파일의 .js 버전으로 지정할 수 있습니다. 지금 repo 출력 에서이 방법으로 설정했습니다 build/MissileKite.js
.
tsconfig-gas.json
가 보는 관련 일이?
<root>/MissileKite.ts
)