คุณเป็นจุดกล้าได้กล้าเสียที่ต้องการเพิ่มดินแดนภายใต้การควบคุมของมัน นี่ค่อนข้างง่าย - เดินทางนอกดินแดนปัจจุบันของคุณแล้ววนกลับเข้ามาในดินแดนของคุณและทุกสิ่งในวงนั้นตอนนี้คุณเป็นเจ้าของแล้ว แต่มีการจับ หากจุดอื่นพบจุดวนของคุณแล้วข้ามไปคุณจะตาย
หากคุณยังไม่ได้ลองใช้ให้ไปที่Splix.ioแล้วลองเกม ใช้ปุ่มลูกศรเพื่อควบคุมการเคลื่อนไหวของคุณ
GIF
เครดิต: http://splix.io/
ข้อมูลจำเพาะ
ผู้เล่นทุกคนเริ่มต้นที่ตำแหน่งสุ่มบนกระดาน 200x200 (ฉันขอสงวนสิทธิ์ในการเปลี่ยนแปลงนี้ :) คุณจะมีการเคลื่อนไหวจำนวนหนึ่งเพื่อสะสมคะแนนมากที่สุดเท่าที่จะเป็นไปได้ คะแนนจะนับโดย:
- จำนวนผู้เล่นที่คุณฆ่าถึง 300 ครั้ง
- จำนวนที่ดินที่คุณเป็นเจ้าของเมื่อสิ้นสุดรอบ
นี่นำมาซึ่งจุดที่คนอื่นสามารถขโมยที่ดินของคุณได้ หากพวกเขาเริ่มวนรอบที่ตัดที่ดินของคุณพวกเขาสามารถอ้างสิทธิ์ได้ หากคุณตายในระหว่างรอบคุณสูญเสียคะแนนทั้งหมดสำหรับรอบนั้น
แต่ละรอบมีกลุ่มผู้เล่นที่เลือกแบบสุ่ม (สูงสุด 5 ผู้เล่นที่ไม่ซ้ำกัน) (อาจมีการเปลี่ยนแปลง) ผู้เล่นทุกคนมีส่วนร่วมในจำนวนรอบเท่ากัน คะแนนสุดท้ายของบอทของคุณถูกกำหนดโดยคะแนนเฉลี่ยต่อเกม แต่ละเกมประกอบด้วย 2,000 รอบ (อาจมีการเปลี่ยนแปลง) บอตทั้งหมดเคลื่อนไหวในเวลาเดียวกัน
คดีความ
หัวชน
ผู้เล่นทั้งสองตายเมื่อพวกเขาหัวชนกัน สิ่งนี้ยังคงเป็นจริงแม้ว่าผู้เล่นทั้งสองจะอยู่ในพื้นที่ของพวกเขา
อย่างไรก็ตามเมื่อมีผู้เล่นเพียงคนเดียวที่อยู่ในดินแดนของเขาผู้เล่นคนอื่นจะตาย
สายไขว้
ในกรณีนี้มีเพียงผู้เล่นสีม่วงที่เสียชีวิต
คุณไม่สามารถข้ามเส้นของคุณเอง
ออกจากบอร์ด
หากผู้เล่นพยายามออกจากกระดานเขาจะตายและเสียคะแนนทั้งหมด
จับภาพพื้นที่
ผู้เล่นจะยึดพื้นที่เมื่อเขามีเส้นทางและเขาเข้าสู่ดินแดนของตัวเองอีกครั้ง
สีแดงเติมระหว่างเส้นสองเส้นสีแดง กรณีเดียวที่ผู้เล่นไม่กรอกคือเมื่อผู้เล่นคนอื่นอยู่ในวง เพื่อความชัดเจนสิ่งนี้จะใช้เฉพาะเมื่อผู้เล่นคนอื่นอยู่ในวงเท่านั้นไม่ใช่แค่เจ้าของที่ดินเท่านั้น ผู้เล่นสามารถยึดครองดินแดนจากบุคคลอื่นได้ หากผู้เล่นไม่สามารถเติมเต็มพื้นที่ที่ล้อมรอบด้วยเส้นทางของเขาเส้นทางจะถูกแปลงเป็นดินแดนปกติโดยตรง หากผู้เล่นในวงผู้เล่นอื่นลงจอดพื้นที่ในวงนั้นจะเต็ม ทุกครั้งที่ผู้เล่นเสียชีวิตบอร์ดจะได้รับการตรวจสอบอีกครั้งสำหรับพื้นที่ที่สามารถเติมได้
รายละเอียดคอนโทรลเลอร์
ตัวควบคุมเป็นที่นี่ มันคล้ายกับเกมดั้งเดิม แต่มีการเปลี่ยนแปลงเล็กน้อยเพื่อให้เหมาะกับ KotH และด้วยเหตุผลทางเทคนิค มันถูกสร้างขึ้นด้วย@NathanMerrill 's ห้องสมุด KotHCommและด้วยความช่วยเหลืออย่างมากจาก @NathanMerrill เช่นกัน กรุณาแจ้งให้เราทราบจากข้อบกพร่องใด ๆ ที่คุณพบในการควบคุมในห้องสนทนา เพื่อให้สอดคล้องกับ KotHComm ฉันได้ใช้คอลเลกชัน Eclipse ทั่วคอนโทรลเลอร์ แต่สามารถเขียนบอทได้โดยใช้ไลบรารี Java Collections เท่านั้น
ทุกอย่างจะถูกบรรจุใน uberjar บนหน้า GitHub เผยแพร่ เมื่อต้องการใช้ให้ดาวน์โหลดและแนบกับโครงการของคุณเพื่อให้คุณสามารถใช้สำหรับการคอมไพล์อัตโนมัติ (คำแนะนำสำหรับIntelliJ , Eclipse ) ในการทดสอบการส่งของคุณ, java -jar SplixKoTH-all.jar -d path\to\submissions\folder
คุณเรียกใช้ขวดด้วย ตรวจสอบให้แน่ใจว่าpath\to\submissions\folder
มี subfoler ชื่อjava
และวางไฟล์ทั้งหมดของคุณที่นั่น อย่าใช้ชื่อแพ็คเกจในบอตของคุณ (แม้ว่า KotHComm อาจจะเป็นไปได้ แต่ก็เป็นปัญหาอีกเล็กน้อย) --help
หากต้องการดูตัวเลือกทั้งหมดที่ใช้ --question-id 126815
จะโหลดทั้งหมดบอทใช้
การเขียนบอท
SplixPlayer
ในการเริ่มต้นการเขียนบอทคุณต้องขยาย
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- ที่นี่เป็นที่ที่คุณตัดสินใจว่าต้องการย้ายบอทของคุณไปไหน ต้องไม่ส่งคืน null
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
มีอยู่ในไลบรารี KotHCommcom.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)
- สิ่งนี้แปลเป็นจำนวนรอบที่ผู้เล่นต้องย้ายจากจุดหนึ่งไปยังอีกจุดหนึ่ง
การสนับสนุน Clojure
คอมไพเลอร์ Clojure มาพร้อมกับSplixKoTH-all.jar
ดังนั้นคุณสามารถใช้ Clojure สำหรับบอทของคุณ! อ้างอิงถึงของฉันrandom_bot
เพื่อดูวิธีการใช้งาน
การดีบักบ็อต
คอนโทรลเลอร์มาพร้อมกับดีบักเกอร์เพื่อช่วยในการทดสอบกลยุทธ์ ในการเริ่มต้นให้เรียกใช้ jar ด้วย--gui
ตัวเลือก
ในการแนบตัวดีบั๊กกับ jar ของคุณให้ทำตามคำแนะนำเหล่านี้สำหรับ IntelliJ หรือคำแนะนำเหล่านี้สำหรับ Eclipse (ไม่ได้ทดสอบเวอร์ชัน Eclipse)
หากคุณกำลังใช้ดีบักเกอร์กับรหัสของคุณคุณสามารถใช้สิ่งนี้เพื่อช่วยให้เห็นภาพสิ่งที่บอทของคุณเห็น ตั้งค่าเบรกพอยต์ที่จุดเริ่มต้นของmakeMove
บน bot ของคุณและตรวจสอบให้แน่ใจว่ามันหยุดเฉพาะเธรดปัจจุบันเท่านั้น จากนั้นคลิกปุ่มเริ่มบน UI และทำตามรหัสของคุณ
ตอนนี้เพื่อรวมทั้งหมด:
วิ่งบอท
ในการรันบ็อตของคุณกับผู้อื่นคุณต้องรัน jar บนหน้าเผยแพร่ นี่คือรายการของธง:
--iterations
(-i
) <=int
(ค่าเริ่มต้น500
)- ระบุจำนวนเกมที่จะเรียกใช้
--test-bot
(-t
) <=String
- เรียกใช้เฉพาะเกมที่ bot รวมอยู่ด้วย
--directory
(-d
) <= เส้นทาง- ไดเรกทอรีเพื่อเรียกใช้การส่งจาก ใช้สิ่งนี้เพื่อเรียกใช้บอทของคุณ
java
ตรวจสอบให้แน่ใจว่าบอทของคุณอยู่ในโฟลเดอร์ย่อยของเส้นทางที่ชื่อว่า
- ไดเรกทอรีเพื่อเรียกใช้การส่งจาก ใช้สิ่งนี้เพื่อเรียกใช้บอทของคุณ
--question-id
(-q
) <=int
(ใช้เฉพาะ126815
)- ดาวน์โหลดและรวบรวมผลงานอื่น ๆ จากเว็บไซต์
--random-seed
(-r
) <=int
(ค่าเริ่มต้นเป็นตัวเลขสุ่ม)- ให้เมล็ดแก่นักวิ่งเพื่อให้บอทที่ใช้การสุ่มสามารถสร้างผลลัพธ์ได้
--gui
(-g
)- เรียกใช้ debugger UI แทนการเรียกใช้ทัวร์นาเมนต์
--test-bot
ที่ดีที่สุดมาใช้กับ
- เรียกใช้ debugger UI แทนการเรียกใช้ทัวร์นาเมนต์
--multi-thread
(-m
) <=boolean
(ค่าเริ่มต้นtrue
)- เรียกใช้ tournoment ในโหมดมัลติเธรด สิ่งนี้จะช่วยให้ได้ผลลัพธ์ที่เร็วขึ้นหากคอมพิวเตอร์ของคุณมีหลายคอร์
--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 |
+------+--------------+-----------+
กรุณาแจ้งให้เราทราบว่าส่วนใดส่วนหนึ่งของกฎมีความชัดเจนหรือถ้าคุณพบข้อผิดพลาดในการควบคุมในห้องแชท