मैं वर्तमान में बॉट लैंड के लिए कुछ स्क्रिप्ट लिख रहा हूं । बॉट लैंड एक वास्तविक समय की रणनीति का खेल है, जहां माउस और कीबोर्ड के साथ अपनी इकाइयों को नियंत्रित करने के बजाय, आप एपीआई के माध्यम से अपने बॉट्स को नियंत्रित करने के लिए कोड लिखते हैं, और फिर आपके बॉट दूसरों के बॉट से लड़ते हैं। यदि आप SC2 की इकाइयों से परिचित हैं, तो आप ऐसे बॉट बना सकते हैं जो ब्लिंक करने वाले, घेराबंदी करने वाले टैंक, मेडिक्स और अल्ट्रालिक्क्स के समान हैं। (यह सॉफ्टवेयर इंजीनियरों के लिए काफी मजेदार खेल है, लेकिन यह इस सवाल के दायरे से बाहर है।)
बॉट नियंत्रण में जटिलता के तीन स्तर हैं: एक डिफ़ॉल्ट एआई, एक स्क्रैच -जैसी प्रोग्रामिंग भाषा, और जावास्क्रिप्ट का एक छोटा सेट जिसे बोटलस्क्रिप्ट्स कहा जाता है। यद्यपि बोटलैंडस्क्रिप्ट के लिए अंतर्निहित संपादक उचित है, आपको अपने सभी कोड को वैश्विक शीर्ष-स्तरीय फ़ंक्शन के साथ एक एकल फ़ाइल के रूप में हर जगह अपलोड करना होगा । स्वाभाविक रूप से, यह थोड़ी देर के बाद दर्दनाक होना शुरू हो जाता है यदि आपका कोड लंबा होना शुरू हो जाता है और विभिन्न बॉट समान कार्य साझा करते हैं।
कई बॉट्स के लिए कोड लिखने की सुविधा के लिए, नंगे जेएस में कोडिंग के दौरान अनजाने में हुई त्रुटियों के लिए मौका कम करें, और अन्य खिलाड़ियों की पिटाई करने की मेरी संभावना को बढ़ाएं, मैंने एक टाइप लाइब्रेरी बनाने के लिए ऊपर टाइपस्क्रिप्ट प्रोजेक्ट स्थापित किया है और साथ ही साथ मेरे प्रत्येक डॉट्स के लिए कोड भी। । वर्तमान निर्देशिका संरचना निम्न की तरह लग रही है:
lib/
bot.land.d.ts
common.ts
BlinkStalker/
BlinkStalker.ts
tsconfig.json
Artillery/
Artillery.ts
tsconfig.json
SmartMelee/
SmartMelee.ts
tsconfig.json
lib
सामान्य कोड है जो बॉट के बीच साझा किया जाता है, और (गैर-टीएस) बॉट लैंड एपीआई के लिए टाइपस्क्रिप्ट परिभाषा प्रदान करता है। प्रत्येक बॉट को अपना एक फोल्डर मिलता है, जिसमें एक फाइल बॉट कोड के साथ होती है और दूसरी में बॉयलरप्लेट होता है 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
विकल्प और संदर्भों का उपयोग करने से काम नहीं चलता है, क्योंकि कोड को संशोधित करने की आवश्यकता होती है और बॉट लैंड को शीर्ष स्तर पर परिभाषित सभी कार्यों के साथ एकल फ़ाइल की आवश्यकता होती है।
निम्नलिखित में से कितने को प्राप्त करने का सबसे अच्छा तरीका है?
- नया बॉट जोड़ने के लिए किसी नए बॉयलरप्लेट की आवश्यकता नहीं है (जैसे
tsconfig.json
प्रति बॉट नहीं) import
अनुपयोगी कोड के आउटपुट से बचने के लिए सामान्य कार्यों के लिए उपयोग करें , लेकिन फिर ...- अभी भी सभी कार्यों को बोट लैंड के विशिष्ट प्रारूप में एक एकल फ़ाइल के रूप में आउटपुट करता है
- एक एकल निर्मित कदम जो कई आउटपुट फ़ाइलों का उत्पादन करता है, प्रत्येक बॉट के लिए
- बोनस: वीएस कोड के साथ निर्माण प्रक्रिया को एकीकृत करना।
tasks.json
प्रत्येक उप-परियोजना के निर्माण के लिए वर्तमान में एक बॉयलरप्लेट है ।
मैं स्पष्ट रूप से उत्तर देता हूं कि संभवतः इसके अलावा ग्रंट जैसी कोई चीज शामिल है tsc
, लेकिन मुझे इस बारे में पर्याप्त जानकारी नहीं है।
bot.js
?
tsconfig.json
। ट्रांसप्लड बॉट फ़ाइलों को कुछ भी नाम दिया जा सकता है, अधिमानतः मूल फ़ाइल का .js संस्करण। मैंने इसे इस तरह से अब रेपो आउटपुट में सेट किया है build/MissileKite.js
।
tsconfig-gas.json
वहाँ देखने के लिए प्रासंगिक बात है?
<root>/MissileKite.ts
)