एक उजाड़, युद्धग्रस्त दुनिया में, जहां शहर ठगों और चोरों द्वारा उग आए हैं, सभ्यता ने पहले से निर्जन परिदृश्य में बिखरे हुए, छोटे, पृथक, औद्योगिक सहकारी समितियों के रूप में खुद को सुदृढ़ किया है। इन समुदायों का अस्तित्व "स्क्रेपर्स" नामक भाड़े के श्रमिकों की टीमों पर निर्भर है, जो कॉपियों को बेचने के लिए मूल्यवान सामग्रियों की खोज नहीं करते हैं। के रूप में इन सामग्रियों को और अधिक दुर्लभ हो गए हैं, स्क्रैपिंग एक और अधिक कठिन और खतरनाक पेशा बन गया है। फ्रैगाइल मानव श्रमिकों को ज्यादातर दूरस्थ रोबोट स्टैंड-इन के साथ बदल दिया गया है, जिसे "बॉट्स" कहा जाता है, और एक सशस्त्र वेल्डर की तुलना में एक विशिष्ट भाड़े के एक कुशल प्रोग्रामर होने की अधिक संभावना है। जैसा कि स्क्रैपिंग में मानवीय उपस्थिति में गिरावट आई है, इसलिए एक दूसरे के लिए भाड़े के समूहों के बीच भी सम्मान है। बॉट्स न केवल स्क्रैप इकट्ठा करने के लिए, बल्कि इसका बचाव करने के लिए सुसज्जित हैं, और कुछ मामलों में इसे बल से लेते हैं। बॉट प्रोग्रामर प्रतिद्वंद्वी स्क्रैपर्स को आउटसोर्स करने के लिए नई रणनीति तैयार करने में अथक प्रयास करते हैं, जिसके परिणामस्वरूप आक्रामक बॉट्स होते हैं, और फिर भी मनुष्यों के लिए एक और खतरा है जो अपने समुदायों की दीवारों के बाहर उद्यम करते हैं।
(हाँ, लोगो को प्रफुल्लित हो जाता है)
स्क्रैपर में आपका स्वागत है!
यह स्क्रैपर का एक प्रारंभिक संस्करण है जिसमें स्क्रैप संग्रह और कारखानों को लागू नहीं किया गया है। यह मूल रूप से एक "शूट अप" है।
आप एक भाड़े के प्रोग्रामर हैं जो प्रतिद्वंद्वी स्क्रेपर समूहों पर जीत के लिए अपने बॉट्स को दूर से संचालित करने के लिए एक प्रोग्राम बनाने का काम करते हैं। आपके बॉट्स मकड़ी जैसी मशीनें हैं, जो अपने मूल में बिजली और ढाल जनरेटर से युक्त हैं, जो कि ग्रिपिंग, कटिंग और अटैकिंग उपकरणों से लैस कई उपांगों से घिरा हुआ है। पावर जनरेटर प्रति टिक (समय की एक स्क्रैपर इकाई) 12 बिजली इकाइयों (पु) का उत्पादन करने में सक्षम है। आप इस नियंत्रण में हैं कि यह शक्ति किसी बॉट की तीन प्राथमिक आवश्यकताओं के बीच कैसे वितरित की जाती है: आंदोलन, ढाल और गोलाबारी।
स्क्रेपर बॉट असाधारण चुस्त मशीन हैं, और वे आसानी से किसी भी बाधाओं का सामना कर सकते हैं, नीचे, और नीचे स्थानांतरित कर सकते हैं। इस प्रकार, टकराव कोई ऐसी चीज नहीं है जिसे आपके कार्यक्रम को ध्यान में रखना चाहिए। जब तक आप पूरे नंबरों में डील करते हैं, तब तक आप अपने बॉट में उपलब्ध 12pu के सभी, कुछ या किसी को भी आवंटित करने के लिए स्वतंत्र हैं। एक बॉट के आंदोलन कार्यों के लिए 0pu आवंटित करना इसे स्थिर बना देगा। 2pu आवंटित करने से एक बॉट 2 डिस्ट यूनिट (du) प्रति टिक को स्थानांतरित करने में सक्षम होगा, 5pu 5du / tick में परिणाम देगा, 11pu 11du / tick में परिणाम देगा, और इसी तरह।
आपके बॉट्स शील्ड जेनरेटर उनके शरीर के चारों ओर परावर्तक ऊर्जा के बुलबुले का निर्माण करते हैं। एक ढाल पॉपिंग से पहले 1 नुकसान तक का बचाव कर सकता है, इस प्रकार अपने बॉट को तब तक उजागर करता है जब तक कि यह ढाल जनरेटर वापस ढाल को स्नैप करने के लिए पर्याप्त शक्ति नहीं बनाता है। आप अपने बॉट के लिए उपलब्ध सभी, कुछ, या 12.2 में से कोई भी इसे ढाल की ओर आवंटित करने के लिए स्वतंत्र हैं। किसी बोट की शील्ड को 038 आवंटित करने का मतलब है कि यह कभी भी शील्ड नहीं बनाएगी। 2pu आवंटित करने से एक बॉट को 12 टिक्स में से 2 या हर 6 टिक्स में से एक नई ढाल उत्पन्न करने की अनुमति मिलेगी। 5pu प्रत्येक 12 टिक्स में से 5 को ढाल पुनर्जनन में परिणाम देगा, और इसी तरह।
अपने वेल्डिंग लेसरों में एक चार्ज का निर्माण करके, आपकी बॉट्स उचित सटीकता के साथ कम दूरी पर हानिकारक बीम को आग लगा सकती हैं। ढाल उत्पादन की तरह, आपके बॉट की आग की दर उनके लेज़रों को आवंटित शक्ति पर निर्भर करती है। बॉट के लेज़रों को 0pu आवंटित करने का मतलब है कि यह कभी भी आग नहीं लगाएगा। 2 पीयू आवंटित करने से प्रत्येक 12 टिक्स से 2 बॉट को फायर किया जा सकता है, और इसी तरह। एक बॉट का लेजर तब तक यात्रा करेगा जब तक कि वह किसी वस्तु का सामना नहीं करता है या बेकार में फैलता है, इसलिए मैत्रीपूर्ण आग का ध्यान रखें। यद्यपि आपके बॉट काफी सटीक हैं, वे सही नहीं हैं। आपको सटीकता में +/- 2.5 डिग्री विचरण की उम्मीद करनी चाहिए। जैसा कि लेजर बीम यात्रा करता है, इसके कणों को वायुमंडल द्वारा आकस्मिक रूप से विक्षेपित किया जाता है जब तक कि बीम पर्याप्त दूरी के साथ प्रभावी रूप से हानिरहित न हो जाए। एक लेजर बिंदु रिक्त सीमा पर 1 क्षति करता है, और प्रत्येक बॉट-लंबाई में यात्रा करने पर 2.5% कम क्षति होती है।
स्कैपर बॉट्स बुनियादी कार्यों को संभालने के लिए पर्याप्त स्वायत्त हैं, लेकिन उन्हें एक समूह के रूप में उपयोगी बनाने के लिए, आपके प्रोग्रामर पर भरोसा करते हैं। एक प्रोग्रामर के रूप में, आप प्रत्येक व्यक्ति के लिए निम्नलिखित आदेश जारी कर सकते हैं बॉट:
- MOVE: निर्देशांक निर्दिष्ट करें जिसके प्रति एक बॉट आगे बढ़ेगा।
- लक्ष्य: शक्ति आवंटन की अनुमति देने पर आग लगाने और निशाना लगाने के लिए एक बॉट की पहचान करें।
- शक्ति: आंदोलन, ढाल और गोलाबारी के बीच पुनर्वितरण शक्ति।
तकनीकी खेल विवरण
तीन कार्यक्रम हैं जिनसे आपको परिचित होना होगा। खेल इंजन भारी लिफ्टर है और एक TCP एपीआई कि खिलाड़ी कार्यक्रमों से कनेक्ट प्रदान करता है। खिलाड़ी कार्यक्रम वही है जो आप लिखेंगे, और मैंने यहाँ बायनेरिज़ के साथ कुछ उदाहरण दिए हैं । अंत में, रेंडरर गेम इंजन से लड़ाई की जीआईएफ का उत्पादन करने के लिए आउटपुट प्रोसेस करता है।
खेल इंजन
आप यहां से गेम इंजन डाउनलोड कर सकते हैं । जब गेम लॉन्च किया जाता है, तो यह खिलाड़ी कनेक्शन के लिए पोर्ट 50000 (वर्तमान में कॉन्फ़िगर करने योग्य नहीं) पर सुनना शुरू कर देगा। एक बार जब यह दो खिलाड़ी कनेक्शन प्राप्त करता है, तो यह खिलाड़ियों को READY संदेश भेजता है और खेल शुरू करता है। प्लेयर प्रोग्राम टीसीपी एपीआई के माध्यम से गेम को कमांड भेजते हैं। जब खेल खत्म हो जाता है, तो एक JSON फ़ाइल जिसका नाम scrappers.json है (भी, वर्तमान में कॉन्फ़िगर करने योग्य नहीं है) बनाई गई है। गेम के GIF बनाने के लिए रेंडरर इसका उपयोग करता है।
टीसीपी एपीआई
प्लेयर प्रोग्राम और गेम इंजन एक नई टीसीपी कनेक्शन पर नए और समाप्त किए गए JSON स्ट्रिंग्स को पास करके और चौथे से संचार करते हैं। सिर्फ पांच अलग-अलग JSON संदेश हैं जिन्हें भेजा या प्राप्त किया जा सकता है।
तैयार संदेश
READY संदेश खेल से खिलाड़ी कार्यक्रमों में भेजा जाता है और केवल एक बार भेजा जाता है। यह संदेश खिलाड़ी कार्यक्रम को बताता है कि उसकी खिलाड़ी आईडी (पीआईडी) क्या है और खेल में सभी बॉट्स की एक सूची प्रदान करती है। पीआईडी एकमात्र तरीका है जो यह निर्धारित करता है कि बॉट अनुकूल बनाम दुश्मन हैं। नीचे बॉट फ़ील्ड पर अधिक जानकारी।
{
"Type":"READY", // Message type
"PID":1, // Player ID
"Bots":[ // Array of bots
{
"Type":"BOT",
"PID":1,
"BID":1,
"X":-592,
...
},
...
]
}
बॉट संदेश
बीओटी संदेश खेल से खिलाड़ी कार्यक्रमों में भेजा जाता है और जब एक बॉट की विशेषताओं में बदलाव होता है तो इसे भेजा जाता है। उदाहरण के लिए, जब ढाल का अनुमान लगाया जाता है, या स्वास्थ्य में परिवर्तन होता है, तो एक बीओटी संदेश भेजा जाता है। बॉट आईडी (BID) केवल एक विशेष खिलाड़ी के भीतर अद्वितीय है।
{
"Type":"BOT", // Message type
"PID":1, // Player ID
"BID":1, // Bot ID
"X":-592, // Current X position
"Y":-706, // Current Y position
"Health":12, // Current health out of 12
"Fired":false, // If the Bot fired this tick
"HitX":0, // X position of where the shot landed
"HitY":0, // Y position of where the shot landed
"Scrap":0, // Future use. Ignore.
"Shield":false // If the Bot is currently shielded.
}
संदेश ले जाएँ
MOVE संदेश प्लेयर प्रोग्राम से गेम के लिए एक कमांड है (लेकिन इसे बॉट के लिए कमांड के रूप में सोचें)। बस उस बॉट की पहचान करें जिसे आप स्थानांतरित करना चाहते हैं, और निर्देशांक। यह माना जाता है कि आप अपने खुद के बॉट की कमान संभाल रहे हैं, इसलिए कोई पीआईडी आवश्यक नहीं है।
{
"Cmd":"MOVE",
"BID":1, // Bot ID
"X":-592, // Destination X coordinate
"Y":-706, // Destination Y coordinate
}
संदेश लक्षित करें
TARGET संदेश किसी अन्य बॉट को लक्षित करने के लिए आपके बॉट्स में से एक को बताता है।
{
"Cmd":"TARGET",
"BID":1, // Bot ID
"TPID":0, // The PID of the bot being targeted
"TBID":0, // The BID of the bot being targeted
}
पावर संदेश
पॉवर संदेश आंदोलन, गोलाबारी और ढाल के बीच आपके बॉट के लिए उपलब्ध 12pu को पुनः प्राप्त करता है।
{
"Cmd":"POWER",
"BID":1, // Bot ID
"FPow":4, // Set fire power
"MPow":4, // Set move power
"SPow":4, // Set shield power
}
प्रतियोगिता
यदि आप अदम्य भूमि का पता लगाने के लिए पर्याप्त बहादुर हैं, तो आपको अपने भाड़े के साथियों के खिलाफ दोहरे उन्मूलन टूर्नामेंट में प्रवेश किया जाएगा। कृपया अपनी सबमिशन के लिए एक उत्तर बनाएं और या तो अपना कोड पेस्ट करें या किसी git रेपो, जिस्ट, आदि के लिए एक लिंक प्रदान करें। कोई भी भाषा स्वीकार्य है, लेकिन आपको यह मान लेना चाहिए कि मुझे भाषा के बारे में कुछ नहीं पता है और इसमें आपके प्रोग्राम को चलाने के लिए निर्देश शामिल हैं। जितने चाहें उतने सबमिशन बनाएँ, और उन्हें नाम देना सुनिश्चित करें!
नमूना खिलाड़ी कार्यक्रमों , टूर्नामेंट में शामिल किया जाएगा तो मैं अत्यधिक उनके खिलाफ अपने बॉट परीक्षण सलाह देते हैं। टूर्नामेंट को लगभग दो सप्ताह बाद शुरू किया जाएगा जब हम चार अनूठे कार्यक्रम प्रस्तुतियाँ प्राप्त करेंगे। सौभाग्य!
--- Winner's Bracket ---
** Contestants will be randomly seeded **
__________________
|___________
__________________| |
|___________
__________________ | |
|___________| |
__________________| |
|________________
__________________ | |
|___________ | |
__________________| | | |
|___________| |
__________________ | |
|___________| |
__________________| |
|
--- Loser's Bracket --- |___________
|
___________ |
|___________ |
___________| |___________ |
| | |
___________| | |
|___________ |
___________ | | |
|___________ | |___________|
___________| |___________| |
| |
___________| ___________|
अन्य महत्वपूर्ण जानकारी
- खेल 12 टिक / सेकंड पर चलता है, इसलिए आपको हर 83 मिलीसेकंड या उससे अधिक बार संदेश नहीं मिलेगा।
- प्रत्येक बॉट 60du व्यास का है। ढाल कोई अतिरिक्त स्थान नहीं लेता है। +/- 2.5% सटीकता के साथ, एक निश्चित दूरी पर एक बॉट को मारने की बाधाओं को इस ग्राफ द्वारा दर्शाया गया है:
- दूरी पर लेजर क्षति के क्षय को इस ग्राफ द्वारा दर्शाया गया है:
- एक बॉट की सटीकता और लेजर क्षय प्रति शॉट इसकी औसत क्षति की गणना करने के लिए गठबंधन करता है। यही है, जब एक निश्चित दूरी से आग लगती है, तो एक बॉट को होने वाली औसत क्षति। प्रति शॉट नुकसान इस ग्राफ द्वारा दर्शाया गया है:
- एक बॉट का लेजर बॉट के केंद्र और उसके किनारे के बीच आधा रास्ता बनाता है। इस प्रकार, अपने बॉट्स को स्टैक करने के परिणामस्वरूप अनुकूल आग लग जाएगी।
- शत्रु बॉट्स लगभग 1440du अलग-अलग होते हैं।
- 120 टिक (10 सेकंड) बिना किसी नुकसान के निपटाए जाने पर खेल समाप्त हो जाता है।
- विजेता सबसे बॉट के साथ खिलाड़ी है, फिर खेल समाप्त होने पर सबसे अधिक स्वास्थ्य।
रेंडर की गई इमेज को समझना
- प्लेयर 1 को हलकों द्वारा और खिलाड़ी 2 को हेक्सागोन्स द्वारा दर्शाया गया है।
- एक बॉट का रंग उसके बिजली आवंटन का प्रतिनिधित्व करता है। अधिक लाल का मतलब है कि अधिक शक्ति फायरिंग के लिए आवंटित की गई है। अधिक नीले रंग का अर्थ है अधिक ढाल। अधिक हरे रंग का मतलब है अधिक आंदोलन।
- एक बॉट के शरीर में "छेद" क्षति का प्रतिनिधित्व करता है। छेद जितना बड़ा होगा, उतनी ही क्षति हुई होगी।
- एक बॉट के आसपास के सफेद घेरे ढाल हैं। यदि किसी बॉट में मोड़ के अंत में एक ढाल है, तो यह दिखाया गया है। यदि शील्ड को नुकसान पहुंचाकर पॉप किया गया था, तो यह नहीं दिखाया गया है।
- बॉट्स के बीच की लाल रेखाएं शॉट्स का प्रतिनिधित्व करती हैं।
- जब एक बॉट मारा जाता है, तो एक बड़ा लाल "विस्फोट" दिखाया जाता है।




