ฉันกำลังเขียนบางสคริปต์สำหรับBot ที่ดิน Bot Land เป็นเกมวางแผนแบบเรียลไทม์ที่แทนที่การควบคุมหน่วยของคุณด้วยเมาส์และแป้นพิมพ์คุณเขียนโค้ดเพื่อควบคุมบอทของคุณผ่าน API จากนั้นบอทของคุณจะต่อสู้กับบ็อตของผู้อื่น หากคุณคุ้นเคยกับหน่วยใน SC2 คุณสามารถสร้างบอทที่คล้ายกับกะพริบ stalkers, รถถังโจมตี, medics และ ultralisks (มันเป็นเกมที่สนุกสำหรับวิศวกรซอฟต์แวร์ แต่อยู่นอกขอบเขตของคำถามนี้)
การควบคุม Bot มีสามระดับของความซับซ้อนที่เพิ่มขึ้น: AI เริ่มต้น, ภาษาการเขียนโปรแกรมแบบScratch -like และชุด 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 สำหรับ Bot Land API (ไม่ใช่ TS) บอทแต่ละตัวจะได้รับโฟลเดอร์ของตัวเองโดยมีไฟล์หนึ่งไฟล์ที่มีรหัสบอทและอีกหนึ่งไฟล์สำเร็จรูป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 ต้องการไฟล์เดียวที่มีฟังก์ชั่นทั้งหมดที่กำหนดไว้ที่ระดับบนสุด
อะไรคือวิธีที่ดีที่สุดในการบรรลุสิ่งต่อไปนี้ให้ได้มากที่สุด
- ไม่จำเป็นต้องมี boilerplate ใหม่ในการเพิ่ม bot ใหม่ (เช่น no
tsconfig.json
ต่อ bot) - ใช้
import
สำหรับฟังก์ชั่นทั่วไปเพื่อหลีกเลี่ยงการส่งออกรหัสที่ไม่ได้ใช้ แต่แล้ว ... - ยังคงเอาท์พุทฟังก์ชั่นทั้งหมดเป็นไฟล์เดียวในรูปแบบเฉพาะของ Bot Land
- ขั้นตอนการบิลด์เดียวที่สร้างไฟล์เอาต์พุตหลายไฟล์หนึ่งไฟล์สำหรับแต่ละบ็อต
- โบนัส: การรวมกระบวนการสร้างเข้ากับ VS Code ขณะนี้มีสำเร็จรูป
tasks.json
สำหรับการสร้างแต่ละโครงการย่อย
ฉันคาดเดาไม่ชัดเจนว่าคำตอบอาจเกี่ยวข้องกับเรื่อง Grunt นอกเหนือไปจากนี้tsc
แต่ฉันไม่รู้เกี่ยวกับเรื่องนั้นอย่างแน่นอน
bot.js
หรือไม่?
tsconfig.json
พวกเขาอยู่ในโฟลเดอร์ที่แยกจากกันเพราะการแยกจากกัน ไฟล์ ธ ปท. ที่ transpiled สามารถตั้งชื่ออะไรก็ได้โดยเฉพาะอย่างยิ่งไฟล์ต้นฉบับ. js ฉันมีมันติดตั้งด้วยวิธีนี้ในขณะนี้ใน outputting repo build/MissileKite.js
ไป
tsconfig-gas.json
สิ่งที่เกี่ยวข้องเพื่อดูที่นั่น?
<root>/MissileKite.ts
)