यह एक राउंड रॉबिन में एक राजा की चुनौती है। यह पश्चिम के सर्वश्रेष्ठ बंदूकधारी को खोजने की लड़ाई है!
इस प्रतियोगिता में प्रतिस्पर्धा करने में सक्षम होने के लिए आपको दो कार्य करने होंगे। पहला आपके गनमैन की विशेषताओं को सेट करता है और दूसरा गनमैन के लिए मुख्य लॉजिक फ़ंक्शन है।
विशेषता समारोह
function () {
var bot = {
name: "testBot",
numbOfBullets: 7,
reloadSpeed: 1,
shotsPerTurn: 1,
moveSpeed: 2
}
return bot
}
विशेषता फ़ंक्शन में 5 चर शामिल हैं जिन्हें आपको कुछ नियमों के अनुसार सेट करना होगा (इसके अलावा name
कोई भी स्ट्रिंग हो सकती है)। आपको अपने गनमैन पर कुल 15 बिंदु खर्च करने होंगे - गनमैन जो सभी 15 बिंदुओं पर खर्च नहीं करते हैं वे पात्र नहीं हैं। यहां बताया गया है कि विशेषताएँ कैसे काम करती हैं:
numbOfBullets
- परिभाषित करता है कि आपकी बंदूक कितनी गोलियों को रखती है।का प्रारंभिक और न्यूनतम मूल्य
numbOfBullets
है 1. प्रत्येक अतिरिक्त गोली की कीमत 1 बिंदु है जिसमें अधिकतम 15 गोलियों के साथ 16 गोलियां खर्च होती हैं।reloadSpeed
- यह निर्धारित करता है कि गोलियों से भागने के बाद आपके बंदूकधारी को अपनी बंदूक को कितनी बार मोड़ना है।आधार और अधिकतम मूल्य न्यूनतम 4 के साथ 4 है। इस विशेषता को 1 लागत 2 अंक कम करना।
shotsPerTurn
- परिभाषित करता है कि आपका गनमैन कितनी बार एक बारी में शूटिंग कर सकता है।आधार और न्यूनतम मूल्य 1 है। प्रत्येक 1 अंक में 3 अंकों की वृद्धि होती है, इसलिए आप 15 अंकों के साथ अधिकतम 6 शॉट प्रति चक्कर लगा सकते हैं। इस विशेषता को ऊपर उठाना
numbOfBullets
काउंटर उत्पादक है क्योंकि आप अधिक गोलियां नहीं मार सकते हैं तो आपकी बंदूक पकड़ सकती है।moveSpeed
- परिभाषित करता है कि आपका गनमैन एक बारी में कितने स्थान चला सकता है।आधार और न्यूनतम मूल्य 1 है। प्रत्येक 1 की वृद्धि पर 3 अंकों की लागत आती है, जिसमें अधिकतम 6 गति होती है, जिसमें 15 अंक खर्च होते हैं। बंदूकधारी अपनी चाल की अधिकतम गति तक हर मोड़ पर बाएं या दाएं भाग सकता है। वह अभी भी खड़ा हो सकता है जो उसे एक बोनस देता है (इस पर बाद में)।
ऊपर दिए गए उदाहरण समारोह में गोलियों पर 6 अंक खर्च होते हैं, 6 अंक पुनः लोड गति पर खर्च होते हैं और 3 अंक आंदोलन पर खर्च होते हैं।
मुख्य कार्य
function main(bulletsLeft, yourShots, enemyShots, yourMovement, enemyMovement) {
var shots = [];
shots.push(Math.floor((Math.random() * 24) + 1));
var move = yourMovement[yourMovement.length - 1] + 2
var play = [];
play.shots = shots;
play.move = move;
play.reload = false;
return play;
}
पैरामीटर:
bulletsLeft
आपकी बंदूक में छोड़ी गई गोलियों की संख्याyourShots
, यह उन सभी पिछले पदों के सरणियों का एक सरणी है, जिस पर आपके बंदूकधारी ने गोलीबारी की है।एक बंदूकधारी के लिए उदाहरण जो 1 राउंड प्रति गोली मार सकता है:
[[12],[4],[22],...]
एक बंदूकधारी के लिए उदाहरण, जो प्रति राउंड 3 गोलियां मार सकता है:
[[12,13,14],[11,15,16],[9,14],...]
enemyShots
- ऊपर के समान लेकिन अपने दुश्मन के लिएyourMovement
- अपने सभी पिछले आंदोलन की स्थिति की एक सरणीenemyMovement
, ऊपर के रूप में, लेकिन अपने दुश्मन के लिए
आपको लौटने की क्या आवश्यकता है:
आपको एक वैरिएबल लौटाना होगा जिसमें 3 विशेषताएँ हों:
shots
- संख्याओं की एक सरणी जो निर्धारित करती है कि आपके गनमैन किस स्थान पर शूटिंग करेंगेmove
- एक एकल संख्या जो यह निर्धारित करती है कि आपका गनमैन किस स्थान पर जाने की कोशिश करेगाreload
- एक सही / गलत मूल्य जिसके साथ आप अपने गनमैन को फिर से लोड कर सकते हैं
द्वंद्व
प्रतियोगिता एक राउंड रॉबिन 1 बनाम 1 प्रणाली का अनुसरण करती है। प्रत्येक बंदूकधारी के पास हर दूसरे बंदूकधारी के खिलाफ 50 राउंड होते हैं। एक गोल तब तक रहता है जब तक कि कोई व्यक्ति गोली से नहीं मारा जाता है या जब तक 66 मोड़ नहीं हो जाते हैं (एक मोड़ तब होता है जब दोनों खिलाड़ियों ने गोली मार दी हो)।
बंदूकधारी अपने प्रतिद्वंद्वी को मारकर 2 अंक अर्जित कर सकता है, 1 अंक यदि वे दोनों एक ही मोड़ में मर जाते हैं या 0 अंक तक पहुंचते हैं अगर वे 66 मोड़ सीमा तक पहुंचते हैं। शूटिंग क्षेत्र 24 रिक्त स्थान की चौड़ाई (1-24 समावेशी) है। एक खिलाड़ी को मारने के लिए और एक राउंड जीतने के लिए आपको उसी स्थान पर शूट करने की आवश्यकता होती है, जैसा कि वह वर्तमान में खड़ा है।
द्वंद्व कैसे काम करता है, इस बारे में यहां एक स्टेप बाय स्टेप गाइड है। इसमें सभी अमान्य आदेश और विशेष नियम शामिल हैं:
- प्रत्येक द्वंद्व के प्रारंभ में दोनों खिलाड़ियों को अंतरिक्ष में रखा जाता है और उनके रिवाल्वर पूरी तरह से लोड होते हैं
- मुख्य कार्य कहा जाता है और बंदूकधारी अपनी पहली चाल कमान बनाते हैं और चुनते हैं कि वे कहाँ शूट करना चाहते हैं
- पहले बंदूकधारी अपने नए स्थान पर चले जाते हैं। यदि चाल कमांड पर कोई भी अवैध इनपुट किया जाता है (तब निम्न या उच्चतर 24 स्थितियां या वे अधिक स्थान ले जाते हैं तो उन्हें भी अनुमति दी जाती है) वे उसी स्थिति में रहते हैं।
- अगला पुनः लोड करने की जाँच की जाती है, यदि आप पिछली बारी में गोलियों से भागे हैं या आपने खुद को फिर से लोड करने के लिए कहा है तो आपका गनमैन पुनः लोड चक्र में चला जाता है। जब तक आप अपना
reloadSpeed
मूल्य निर्धारित करते हैं, तब तक वह कई मोड़ ले रहा होता है । यदि आपने अभी भी खड़े होने का फैसला किया है (उसी स्थान पूर्णांक को वापस लौटाया जाए जहां आप पहले खड़े थे या केवल एक अमान्य मान लौटा रहे हैं) तो आप पुनः लोड करते हैं काउंटर एक के बजाय 2 मोड़ के लिए नीचे जाता है। - अब आपके शूटिंग मूल्यों की जाँच करने की बात आती है, हर मोड़ पर आप जितने शूटिंग स्थान दर्ज कर सकते हैं, वे हमेशा की तरह वास्तविक वैध राशि से कट जाएंगे, जो निर्धारित होता है: प्रति मोड़ शॉट्स की संख्या और आपके रिवॉल्वर में गोलियों की संख्या ( जो भी कम हो)।
shotsPerTurn
यदि आप अभी भी इस मोड़ पर खड़े होने का निर्णय लेते हैं तो आपका मूल्य 1 से बढ़ जाता है, इसलिए यदि आप अभी भी खड़े होने का निर्णय लेते हैं तो आप एक अतिरिक्त शॉट लगा सकते हैं। यदि आप पुनः लोड चक्र में हैं तो आपके पास 0 शॉट्स हैं। अब वास्तविक शूटिंग की बात आती है, 2 तरीके हैं जिससे यह नीचे जा सकता है। यदि दोनों बंदूकधारी के पास एक ही चल प्रतिमा है तो वे दोनों एक ही समय में शूट करते हैं और दोनों एक ही समय में एक दूसरे को मार सकते हैं। इस मामले में कि उनके पास अलग-अलग Movespeed आँकड़े हैं, उच्च Movespeed स्टेट के साथ बॉट पहले शूटिंग शुरू करता है और यदि वह अपने प्रतिद्वंद्वी को मारता है तो वह इस राउंड को जीतता है। यदि बंदूकधारी एक राउंड में एक या एक से अधिक गोलियां चला सकता है तो यह ऊपर दिए गए नियमों का पालन करता है, उदाहरण के लिए अधिक चक्रों को छोड़कर: Lets का कहना है कि bot1 में 3 गोलियां हैं और तेज है और bot 2 में 2 गोलियां हैं, तो यह इस तरह से चलेगी :
Bot1 shoots, Bot2 shoots cycle 1 Bot1 shoots, Bot2 shoots cycle 2 Bot1 shoots cycle 3
यह वही दिखाई देगा जब उनके पास एक ही चल-चलन होगा कि यदि अब उसी चक्र में बॉट 1 ने बॉट 2 को मारा तो बॉट 2 भी बॉट 1 को मार सकता है और यह एक टाई होगा।
नियम
पहले मैं केल्विन के शौक के प्रवेश से कुछ नियम कॉपी कर रहा हूं जो यहां भी लागू होते हैं।
एक नया जावास्क्रिप्ट चर घोषित करते समय, आपको var कीवर्ड का उपयोग करना चाहिए। ऐसा इसलिए है क्योंकि बिना वेरिएंट के घोषित किया गया वैरिएबल लोकल के बजाय ग्लोबल हो जाता है, इसलिए कंट्रोलर के साथ गलती से (या जानबूझकर) गड़बड़ हो जाए या दूसरे प्लेयर्स के साथ खुलकर कम्यूनिकेट करना आसान हो जाए। यह स्पष्ट करना होगा कि आप धोखा देने की कोशिश नहीं कर रहे हैं।
फ़ंक्शंस की घोषणा करते समय var कीवर्ड का उपयोग करना सबसे अच्छा होता है, यानी मैं var f = function(...) {...}
इसके बजाय का उपयोग कर function f(...) {...}.
रहा हूं क्योंकि मुझे पूरी तरह से यकीन नहीं है कि, लेकिन कभी-कभी यह एक अंतर बनाने के लिए प्रकट होता है।
आपके कोड में आप नहीं हो सकते हैं ...
- नियंत्रक या अन्य खिलाड़ी के कोड को एक्सेस या संशोधित करने का प्रयास।
- जावास्क्रिप्ट में निर्मित कुछ भी संशोधित करने का प्रयास।
- वेब सवाल करें।
- अन्यथा दुर्भावनापूर्ण बातें करें।
मेरे अतिरिक्त नियम:
- उपयोगकर्ता जितने चाहें उतने बंदूकधारी बना सकते हैं और किसी भी समय के लिए अपने कार्यों को बदल सकते हैं
- मैं खेल से किसी भी प्रविष्टि को हटा दूंगा जो या तो अधिक समय लेता है या किसी भी तरह से धोखा देने की कोशिश करता है जो मुझे फिट दिखता है
- आपके फ़ंक्शन को जिन विशेषताओं को वापस करने की आवश्यकता है उनके नाम उसी संरचना के साथ उदाहरणों में होने चाहिए!
आपका उत्तर इस प्रारूप में होना चाहिए, पहला फ़ंक्शन विशेषता फ़ंक्शन और दूसरा लॉजिक फ़ंक्शन। ध्यान दें कि मैंने विस्मयादिबोधक चिह्न का उपयोग किया है क्योंकि यदि आप कोड ब्लॉक के बीच नई लाइनें बनाते हैं तो पार्सर दो अलग-अलग कोड ब्लॉक नहीं देख पाएंगे, इसलिए आपको उन्हें अलग करने के लिए किसी भी प्रतीक (बस एक विस्मयादिबोधक चिह्न का उपयोग) करना होगा:
var bot = {
name: "testBot",
numbOfBullets: 7,
reloadSpeed: 1,
shotsPerTurn: 1,
moveSpeed: 2
}
return bot
var shots = []
var testBot_moveUp = true
if(Math.random() * 2 > 1)
testBot_moveUp = false
shots.push(Math.floor((Math.random() * 24) + 1))
var move = 0
if (testBot_moveUp)
move = yourMovement[yourMovement.length - 1] + 2
else
move = yourMovement[yourMovement.length - 1] - 2
move = 12
var play = []
play.shots = shots
play.move = move
play.reload = false
return play
और यहाँ नियंत्रक है: खेल नियंत्रण । बस लिंक खोलें और बॉट्स को लोड करने के लिए प्रतीक्षा करें, फिर वह चुनें जिसे आप लड़ाई में चाहते हैं (शायद सभी) और प्रारंभ बटन दबाएं।
मैंने अपने उत्तर के रूप में एक टेस्टबोट में भी रखा था जो प्रतिस्पर्धा करेगा, यह एक उदाहरण के रूप में भी कार्य करता है कि उत्तर की संरचना कैसी दिखनी चाहिए। एक नोट के रूप में, यदि आप एक छोटी सी गलती करते हैं और अपने उत्तर को संपादित करते हैं, तो स्टेक्सएक्सचेंज एल्गोरिथ्म इसे तुरंत नहीं उठा सकता है और साइट जो नियंत्रक उपयोग करता है, जो स्टैकटेक्सचेंज के द्वारा उत्पन्न नहीं होता है अपडेट किया जाता है (लेकिन बाद में या यदि आप बड़े बदलाव करते हैं जो मैं सुझाव देता हूं कर, बस अंत में कुछ पाठ जोड़ें)। यहाँ साइट है: कोडलिंक
<!---->
"अदृश्य रूप से" (बिना !
) अलग कोडब्लॉक का उपयोग कर सकते हैं ।