আমি বর্তমানে বট ল্যান্ডের জন্য কিছু স্ক্রিপ্ট লিখছি । বট ল্যান্ড একটি বাস্তব-সময়ের কৌশল খেলা যেখানে মাউস এবং কীবোর্ডের সাহায্যে আপনার ইউনিটগুলি নিয়ন্ত্রণ করার পরিবর্তে আপনি একটি API এর মাধ্যমে আপনার বটগুলি নিয়ন্ত্রণ করার জন্য কোড লিখেন এবং তারপরে আপনার বটগুলি অন্যের বোটের সাথে লড়াই করে। আপনি যদি এসসি 2-র ইউনিটগুলির সাথে পরিচিত হন তবে আপনি এমন বট তৈরি করতে পারেন যা ঝলকানো স্ট্যালার, অবরোধের ট্যাঙ্ক, মেডিক্স এবং আল্ট্রালিস্কের মতো। (এটি সফ্টওয়্যার ইঞ্জিনিয়ারদের জন্য বেশ মজাদার একটি খেলা তবে এটি এই প্রশ্নের ক্ষেত্রের বাইরে))
বট কন্ট্রোলের ক্রমবর্ধমান জটিলতার তিনটি স্তর রয়েছে: একটি ডিফল্ট এআই, একটি স্ক্র্যাচ-জাতীয় প্রোগ্রামিং ভাষা এবং জাভাস্ক্রিপ্টের একটি হ্রাস সেট जिसे বটল্যান্ডস্ক্রিপ্ট বলে। যদিও বটল্যান্ডস্ক্রিপ্টের জন্য অন্তর্নির্মিত সম্পাদক যুক্তিসঙ্গত, আপনাকে সর্বত্র বিশ্বব্যাপী শীর্ষ স্তরের ফাংশন সহ আপনার সমস্ত কোড একক ফাইল হিসাবে আপলোড করতে হবে । স্বাভাবিকভাবেই, যদি আপনার কোড দীর্ঘ হতে শুরু করে এবং বিভিন্ন বট একই ক্রিয়াকলাপটি ভাগ করে শুরু করে তবে কিছুক্ষণ পরে এটি বেদনাদায়ক হতে শুরু করে।
একাধিক বটের জন্য কোড লেখার সুবিধার্থে, খালি জেএসে কোডিং করার সময় অজান্তেই ত্রুটির সম্ভাবনা হ্রাস করতে এবং অন্যান্য খেলোয়াড়দের মারধর করার সম্ভাবনা বাড়ানোর জন্য, আমি আমার প্রতিটি বটগুলির জন্য একটি সাধারণ লাইব্রেরি সহ কোড সরবরাহ করার জন্য উপরের টাইপস্ক্রিপ্ট প্রকল্পটি সেট আপ করেছি । বর্তমান ডিরেক্টরি কাঠামোটি নিম্নলিখিতগুলির মতো দেখতে প্রায়:
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
বট নিজেই সেইসাথে থেকে transpiled রয়েছে কোড সব কোড common.js
। এই সেটআপটি কয়েকটি কারণে সাবঅপটিমাল, অন্যদের মধ্যে: এটির জন্য প্রচুর নকল বয়লারপ্লেট প্রয়োজন, নতুন বট যুক্ত করা শক্ত করে তোলে, প্রতিটি বটের জন্য প্রচুর অপ্রয়োজনীয় কোড অন্তর্ভুক্ত থাকে এবং প্রতিটি বট পৃথকভাবে তৈরি করা প্রয়োজন।
তবে এখনও অবধি আমার গবেষণার উপর ভিত্তি করে মনে হচ্ছে আমি যা চাই তা করার সহজ উপায় নেই। বিশেষত, নতুন tsc -b
বিকল্প এবং রেফারেন্সগুলি ব্যবহার করা কার্যকর হয় না, কারণ এর জন্য কোডটি সংশোধন করা দরকার এবং বট ল্যান্ড শীর্ষ স্তরে সংজ্ঞায়িত সমস্ত ফাংশন সহ একটি একক ফাইলের প্রয়োজন।
নিম্নলিখিতটি যতটা সম্ভব অর্জনের সর্বোত্তম উপায়?
- নতুন বট যোগ করার জন্য কোনও নতুন বয়লারপ্লেটের প্রয়োজন নেই (যেমন
tsconfig.json
বট প্রতি কোনও নয় ) import
অব্যবহৃত কোড আউটপুট এড়ানোর জন্য সাধারণ ফাংশনগুলির জন্য ব্যবহার করুন তবে তারপরে ...- তবুও বট ল্যান্ডের নির্দিষ্ট ফর্ম্যাটে একক ফাইল হিসাবে সমস্ত ফাংশন আউটপুট দেয়
- একক বিল্ড স্টেপ যা একাধিক আউটপুট ফাইল তৈরি করে, প্রতিটি বটের জন্য একটি করে
- বোনাস: ভিএস কোডের সাথে বিল্ড প্রক্রিয়া একীকরণ করা।
tasks.json
প্রতিটি উপ-প্রকল্প তৈরির জন্য বর্তমানে একইভাবে বয়লারপ্লেট রয়েছে ।
আমি অস্পষ্টভাবে উত্তরটি গুরুত্ব দিয়ে দেখলাম সম্ভবত গ্রান্টের মতো আরও কিছু কিছু জড়িত tsc
তবে এটি সম্পর্কে নিশ্চিত হওয়ার পক্ষে আমি যথেষ্ট জানি না।
bot.js
?
tsconfig.json
। ট্রান্সপ্লাইল করা বট ফাইলগুলিকে যেকোনও নাম দেওয়া যেতে পারে, মূলত মূল ফাইলটির .js সংস্করণ। আমি রেপো আউটপুটটিং এ এখন এই ভাবে সেট আপ করেছি build/MissileKite.js
।
tsconfig-gas.json
প্রাসঙ্গিক জিনিস কি সেখানে তাকান?
<root>/MissileKite.ts
)