Tôi hiện đang viết một số kịch bản cho Bot Land . Bot Land là một trò chơi chiến lược thời gian thực, thay vì điều khiển các đơn vị của bạn bằng chuột và bàn phím, bạn viết mã để điều khiển các bot của mình thông qua API và sau đó các bot của bạn sẽ chiến đấu với các bot của người khác. Nếu bạn đã quen thuộc với các đơn vị trong SC2, bạn có thể tạo các bot tương tự như kẻ theo dõi chớp mắt, xe tăng bao vây, huy chương và ultralisks. (Đây là một trò chơi khá thú vị dành cho các kỹ sư phần mềm, nhưng điều đó nằm ngoài phạm vi của câu hỏi này.)
Điều khiển Bot có ba mức độ phức tạp tăng dần: AI mặc định, ngôn ngữ lập trình giống như Scratch và một bộ JavaScript giảm gọi là BotLandScript. Mặc dù trình chỉnh sửa tích hợp cho BotLandScript là hợp lý, bạn phải tải lên tất cả mã của mình dưới dạng một tệp duy nhất với các hàm cấp cao nhất toàn cầu ở mọi nơi. Đương nhiên, điều này sẽ bắt đầu trở nên đau đớn sau một thời gian nếu mã của bạn bắt đầu dài và các bot khác nhau có chung các chức năng.
Để tạo điều kiện viết mã cho nhiều bot, giảm cơ hội xảy ra lỗi vô ý khi mã hóa trong mã trần và tăng cơ hội đánh bại những người chơi khác, tôi đã thiết lập dự án TypeScript ở trên để cung cấp thư viện chung cũng như mã cho mỗi bot của tôi . Cấu trúc thư mục hiện tại trông giống như sau:
lib/
bot.land.d.ts
common.ts
BlinkStalker/
BlinkStalker.ts
tsconfig.json
Artillery/
Artillery.ts
tsconfig.json
SmartMelee/
SmartMelee.ts
tsconfig.json
lib
là mã phổ biến được chia sẻ giữa các bot và cung cấp các định nghĩa TypeScript cho API Bot Land (không phải TS). Mỗi bot sau đó nhận được thư mục riêng của mình, với một tệp chứa mã bot và tệp còn lại là bản soạn sẵn tsconfig.json
:
{
"compilerOptions": {
"target": "es3",
"module": "none",
"sourceMap": false,
"outFile": "bot.js"
},
"files": [
"MissileKite.ts"
],
"include": [
"../lib/**/*"
]
}
Khi mỗi cái tsconfig.json
được xây dựng, nó tạo ra một mã tương ứng bot.js
chứa mã được mã hóa từ chính bot cũng như tất cả mã trong đó common.js
. Thiết lập này không tối ưu vì một số lý do, trong số những lý do khác: nó đòi hỏi rất nhiều bản sao chép trùng lặp, khiến cho việc thêm bot mới trở nên khó khăn, bao gồm rất nhiều mã không cần thiết cho mỗi bot và yêu cầu mỗi bot phải được xây dựng riêng.
Tuy nhiên, dựa trên nghiên cứu của tôi cho đến nay , dường như không có cách nào dễ dàng để làm những gì tôi muốn. Cụ thể, sử dụng tsc -b
tùy chọn mới và tham chiếu không hoạt động, vì điều đó đòi hỏi mã phải được mô đun hóa và Bot Land yêu cầu một tệp duy nhất với tất cả các chức năng được xác định ở cấp cao nhất.
Cách tốt nhất để đạt được càng nhiều điều sau đây càng tốt?
- Không yêu cầu nồi hơi mới để thêm bot mới (ví dụ: không có
tsconfig.json
mỗi bot) - Sử dụng
import
cho các chức năng phổ biến để tránh xuất mã không sử dụng, nhưng sau đó ... - Vẫn xuất tất cả các chức năng dưới dạng một tệp duy nhất ở định dạng cụ thể của Bot Land
- Một bước xây dựng duy nhất tạo ra nhiều tệp đầu ra, một cho mỗi bot
- Phần thưởng: tích hợp quá trình xây dựng với Mã VS. Hiện tại có một bản tóm tắt tương ứng
tasks.json
để xây dựng từng tiểu dự án.
Tôi mơ hồ phỏng đoán câu trả lời có lẽ liên quan đến một cái gì đó giống như Grunt tsc
, nhưng tôi không biết đủ về điều đó để chắc chắn.
bot.js
?
tsconfig.json
. Các tệp bot được dịch mã có thể được đặt tên bất cứ thứ gì, tốt nhất là phiên bản .js của tệp gốc. Tôi có nó được thiết lập theo cách này bây giờ trong repo xuất ra build/MissileKite.js
.
tsconfig-gas.json
điều liên quan để xem xét ở đó?
<root>/MissileKite.ts
)