आप एक उद्यमी बिंदी हैं जो अपने नियंत्रण में भूमि बढ़ाना चाहते हैं। यह काफी सरल है - अपनी वर्तमान भूमि के बाहर की यात्रा करें और अपनी जमीन में वापस लूप करें और उस लूप की हर चीज अब आपके पास है। लेकिन वहां एक जाल है। यदि कोई अन्य डॉट किसी तरह आपके लूप को ढूंढता है और इसे पार करता है, तो आप मर जाते हैं।
यदि आपने पहले से इसे आज़माया नहीं है, तो Splix.io पर जाएं और एक गेम आज़माएं। अपने आंदोलन को नियंत्रित करने के लिए तीर कुंजियों का उपयोग करें।
GIF
साभार: http://splix.io/
विशिष्ट तथ्य
सभी खिलाड़ी 200x200 बोर्ड में यादृच्छिक पदों पर शुरू करते हैं। (मैं इसे बदलने का अधिकार सुरक्षित रखता हूं :)। आपके पास सबसे अधिक संभव अंक प्राप्त करने के लिए कुछ निश्चित चालें होंगी। अंक इससे ऊँचे होते हैं:
- आपके द्वारा मारे गए खिलाड़ियों की संख्या 300 है
- दौर के अंत में आपके पास जितनी जमीन है
इससे यह बात सामने आती है कि दूसरे लोग आपकी जमीन चुरा सकते हैं। यदि वे एक लूप शुरू करते हैं जो आपकी कुछ जमीन को काटता है, तो वे इसका दावा कर सकते हैं। यदि आप राउंड के दौरान मर जाते हैं, तो आप उस राउंड के लिए सभी बिंदु खो देते हैं।
प्रत्येक दौर में खिलाड़ियों का एक यादृच्छिक रूप से चयनित समूह होता है (अधिकतम 5 अद्वितीय खिलाड़ी) (परिवर्तन के अधीन)। हर खिलाड़ी बराबर राउंड में भाग लेता है। आपके बॉट का अंतिम स्कोर उसके औसत प्रति गेम स्कोर से निर्धारित होता है। प्रत्येक गेम में 2000 मोड़ शामिल हैं (परिवर्तन के अधीन भी)। सभी बॉट एक ही समय में अपनी चाल बनाते हैं।
मौत के मामले
सिर बट
दोनों खिलाड़ी एक दूसरे के सिर पर हाथ फेरते हैं। यह तब भी सच है जब दोनों खिलाड़ी अपने स्थान के किनारे पर हों।
हालांकि, जब केवल एक खिलाड़ी अपनी भूमि में होता है, तो दूसरा खिलाड़ी मर जाता है।
रेखा पार
इस मामले में, केवल बैंगनी खिलाड़ी मर जाता है।
आप अपनी स्वयं की रेखा को पार नहीं कर सकते।
बोर्ड से बाहर निकलना
यदि कोई खिलाड़ी बोर्ड से बाहर निकलने का प्रयास करता है, तो वह मर जाएगा और सभी बिंदुओं को खो देगा।
क्षेत्र पर कब्जा करना
एक खिलाड़ी उस क्षेत्र पर कब्जा करेगा जब उसके पास एक निशान होगा और वह फिर से अपनी जमीन में प्रवेश करेगा।
लाल दो लाल लाइनों के बीच में भरता है। एकमात्र ऐसा मामला जहां कोई खिलाड़ी नहीं भरता है, जब कोई अन्य खिलाड़ी लूप के अंदर होता है। स्पष्ट होने के लिए, यह केवल तब लागू होता है जब अन्य खिलाड़ी स्वयं पाश में होता है, न कि केवल उसके स्वामित्व वाली भूमि। एक खिलाड़ी दूसरे व्यक्ति से जमीन पर कब्जा कर सकता है। यदि कोई खिलाड़ी अपने निशान से घिरे क्षेत्र में नहीं भर सकता है, तो निशान सीधे सामान्य भूमि में परिवर्तित हो जाता है। यदि किसी अन्य खिलाड़ी के अंदर का खिलाड़ी लूप मर जाता है, तो उस लूप का क्षेत्र भर जाता है। जब भी किसी खिलाड़ी की मृत्यु होती है, बोर्ड को ऐसे क्षेत्र के लिए फिर से तैयार किया जाता है जिसे अंदर भरा जा सकता है।
नियंत्रक का विवरण
नियंत्रक यहाँ है । यह मूल खेल से काफी मिलता-जुलता है, लेकिन इसमें कोठ के लिए बेहतर और तकनीकी कारणों से छोटे बदलाव किए गए हैं। यह @NathanMerrill के KotHComm लाइब्रेरी के साथ बनाया गया है , और साथ ही @NathanMerrill की पर्याप्त मदद के साथ बनाया गया है। कृपया मुझे चैट रूम में कंट्रोलर में किसी भी कीड़े के बारे में बताएं । KotHComm के अनुरूप होने के लिए, मैंने पूरे नियंत्रक में ग्रहण संग्रह का उपयोग किया है, लेकिन बॉट को केवल जावा संग्रह पुस्तकालय का उपयोग करके लिखा जा सकता है।
सब कुछ github रिलीज पृष्ठ पर एक uberjar में पैक किया गया है । इसका उपयोग करने के लिए, इसे डाउनलोड करें और इसे अपनी परियोजना में संलग्न करें ताकि आप इसे ऑटो-कम्पेट ( इंटेलीज , एक्लिप्स के लिए निर्देश ) के लिए उपयोग कर सकें । अपने सबमिशन को टेस्ट करने के लिए, आप जार को रन करें java -jar SplixKoTH-all.jar -d path\to\submissions\folder
। सुनिश्चित करें कि path\to\submissions\folder
एक सबफ़्लोर नाम दिया गया है java
, और अपनी सभी फ़ाइलों को वहां रखने के लिए। अपने बॉट्स में पैकेज के नाम का उपयोग न करें (हालांकि यह कोटएचएचओएम के साथ संभव हो सकता है, यह थोड़ा अधिक परेशानी है)। सभी विकल्पों को देखने के लिए, उपयोग करें --help
। सभी बॉट्स को लोड करने के लिए, उपयोग करें --question-id 126815
।
बॉट लिखना
बॉट लिखना शुरू करने के लिए, आपको विस्तार करना होगा SplixPlayer
।
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- यह वह जगह है जहां आप तय करते हैं कि आप अपने बॉट को किस दिशा में ले जाना चाहते हैं। अशक्त नहीं लौटना चाहिए।
HiddenPlayer getThisHidden()
- का
HiddenPlayer
संस्करण प्राप्त करेंthis
। बोर्ड को अपने बॉट की तुलना करने के लिए उपयोगी।
- का
enum Direction
- मान
East
(x = 1; y = 0)West
(x = -1; y = 0)North
(x = 0; y = 1)South
(x = 0; y = -1)
Direction leftTurn()
- जाओ
Direction
अगर तुम एक छोड़ दिया बारी बनाया आपको मिल जाएगा।
- जाओ
Direction RightTurn()
- जाओ
Direction
यदि आप एक सही बारी बनाया आपको मिल जाएगा।
- जाओ
ReadOnlyBoard
यह वह वर्ग है जहां आप बोर्ड का उपयोग करते हैं। आप या तो बोर्ड के एक स्थानीय दृश्य (20x20) को दिखाए गए खिलाड़ी पदों के साथ, या एक वैश्विक दृश्य (संपूर्ण बोर्ड) प्राप्त कर सकते हैं, जिसके पास केवल यह जानकारी होती है कि कौन किसके पास है और बोर्ड पर पदों का दावा करता है। यह वह जगह भी है जहां आप अपना स्थान प्राप्त करते हैं।
SquareRegion getBounds()
- बोर्ड के आकार को पुनः प्राप्त करें।
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
- बोर्ड का वैश्विक मानचित्र प्राप्त करें।
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
- के रूप में भी
getGlobal()
, सिवाय इसके कि यह आपके खिलाड़ी के चारों ओर 20x20 क्षेत्र तक सीमित है, और यह खिलाड़ी के पदों को दर्शाता है।
- के रूप में भी
Point2D getPosition(SplixPlayer me)
- अपने खिलाड़ी की स्थिति प्राप्त करें। के रूप में उपयोग करें
board.getPosition(this)
।
- अपने खिलाड़ी की स्थिति प्राप्त करें। के रूप में उपयोग करें
Point2D getSelfPosition(ReadOnlyBoard)
- बोर्ड पर अपना स्थान प्राप्त करें। उपयोग:
Point2D mypos = getSelfPosition(board)
- बोर्ड पर अपना स्थान प्राप्त करें। उपयोग:
ReadOnlyGame
ReadOnlyGame
केवल खेल के माध्यम से बचे हुए घुमावों की संख्या तक पहुँच प्रदान करता है int getRemainingIterations()
।
ReadOnlySplixPoint
HiddenPlayer getClaimer()
HiddenPlayer
एक बिंदु का दावा करने वाले का संस्करण प्राप्त करें - दावा करने वाला = एक निशान।
HiddenPlayer getOwner()
- जो एक बिंदु का मालिक हो जाओ।
HiddenPlayer getWhosOnSpot()
- यदि खिलाड़ी को इस बिंदु पर तैनात किया गया है, तो इसके छिपे हुए संस्करण को लौटाएं। में ही काम करता है
getLocal()
।
- यदि खिलाड़ी को इस बिंदु पर तैनात किया गया है, तो इसके छिपे हुए संस्करण को लौटाएं। में ही काम करता है
Point2D
यहां अन्य वर्गों के विपरीत, Point2D
कोटहोम लाइब्रेरी में निहित है।com.nmerrill.kothcomm.game.maps.Point2D
Point2D(int x, int y)
int getX()
int getY()
Point2D moveX(int x)
Point2D moveY(int y)
Point2D wrapX(int maxX)
x
की सीमा के भीतर होने के लिए मान लपेटेंmaxX
।
Point2D wrapY(int maxY)
y
की सीमा के भीतर होने के लिए मान लपेटेंmaxY
।
int cartesianDistance(Point2D other)
- यह इस बात का अनुवाद करता है कि एक खिलाड़ी को बिंदु a से बिंदु b पर जाने के लिए कितने मोड़ लेने होंगे।
लौंग का सहारा
क्लोजर कंपाइलर के साथ बंडल किया गया है SplixKoTH-all.jar
, इसलिए आप अपने बॉट के लिए क्लोझर का उपयोग कर सकते हैं! random_bot
इसका उपयोग करने के तरीके को देखने के लिए मेरा संदर्भ लें ।
एक बॉट डिबगिंग
नियंत्रक परीक्षण रणनीतियों की सहायता के लिए डिबगर के साथ आता है। इसे शुरू करने के लिए, --gui
विकल्प के साथ जार चलाएं ।
डीबगर को अपने जार में संलग्न करने के लिए, IntelliJ के लिए इन निर्देशों का पालन करें , या ग्रहण के लिए इन निर्देशों (ग्रहण संस्करण अप्राप्त)।
यदि आप अपने कोड के साथ डिबगर का उपयोग कर रहे हैं, तो आप इसका उपयोग यह देखने में मदद करने के लिए कर सकते हैं कि आपका बॉट क्या देख रहा है। makeMove
अपने बॉट की शुरुआत में एक ब्रेकपॉइंट सेट करें , और यह सुनिश्चित करें कि यह केवल वर्तमान थ्रेड को रोक देता है। इसके बाद, UI पर प्रारंभ बटन पर क्लिक करें और अपने कोड के माध्यम से कदम बढ़ाएं।
अब, यह सब एक साथ करने के लिए:
चल बॉट्स
दूसरों के साथ अपने बॉट्स को चलाने के लिए, आपको रिलीज़ पृष्ठ पर जार को चलाने की आवश्यकता है। यहाँ झंडे की एक सूची है:
--iterations
(-i
) <=int
(डिफ़ॉल्ट500
)- चलाने के लिए गेम की संख्या निर्दिष्ट करें।
--test-bot
(-t
) <=String
- केवल उन खेलों को चलाएं जिनमें बॉट शामिल है।
--directory
(-d
) <= पथ- से प्रस्तुतियाँ चलाने के लिए निर्देशिका। अपने बॉट्स को चलाने के लिए इसका उपयोग करें। सुनिश्चित करें कि आपके बॉट्स नाम के पथ के सबफ़ोल्डर में हैं
java
।
- से प्रस्तुतियाँ चलाने के लिए निर्देशिका। अपने बॉट्स को चलाने के लिए इसका उपयोग करें। सुनिश्चित करें कि आपके बॉट्स नाम के पथ के सबफ़ोल्डर में हैं
--question-id
(-q
) <=int
(केवल उपयोग126815
)- डाउनलोड करें और साइट से अन्य प्रस्तुतियाँ संकलित करें।
--random-seed
(-r
) <=int
(यादृच्छिक संख्या में चूक)- धावक को एक बीज दें ताकि बॉट्स जो यादृच्छिक का उपयोग करें, परिणाम पुन: उत्पन्न हो सकते हैं।
--gui
(-g
)- एक टूर्नामेंट चलाने के बजाय डिबगर उई चलाएं। के साथ सबसे अच्छा इस्तेमाल किया
--test-bot
।
- एक टूर्नामेंट चलाने के बजाय डिबगर उई चलाएं। के साथ सबसे अच्छा इस्तेमाल किया
--multi-thread
(-m
) <=boolean
(डिफ़ॉल्टtrue
)- मल्टी-थ्रेड मोड में एक टूर्नोमेंट चलाएँ। यदि आपके कंप्यूटर में एकाधिक कोर हैं, तो यह एक तेज़ परिणाम को सक्षम करता है।
--thread-count
(-c
) <=int
(डिफ़ॉल्ट4
)- मल्टी-थ्रेड की अनुमति होने पर थ्रेड्स की संख्या।
--help
(-h
)- इसके समान एक सहायता संदेश प्रिंट करें।
इस पृष्ठ पर सभी प्रस्तुतियाँ चलाने के लिए, उपयोग करें java -jar SplixKoTH-all.jar -q 126815
।
अपनी पोस्ट का प्रारूपण
यह सुनिश्चित करने के लिए कि नियंत्रक सभी बॉट्स डाउनलोड कर सकता है, आपको इस प्रारूप का पालन करना चाहिए।
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
इसके अलावा, पैकेज की घोषणा का उपयोग न करें।
स्कोरबोर्ड
+------+--------------+-----------+
| Rank | Name | Score |
+------+--------------+-----------+
| 1 | ImNotACoward | 8940444.0 |
| 2 | TrapBot | 257328.0 |
| 3 | HunterBot | 218382.0 |
+------+--------------+-----------+
कृपया मुझे बताएं कि क्या नियमों का कोई भी हिस्सा अस्पष्ट है, या यदि आपको चैट रूम में नियंत्रक में कोई त्रुटि मिलती है ।