คุณอาจรู้จักเกมแห่งชีวิตของ Conwayหุ่นยนต์เซลลูล่าร์ชื่อดังที่ประดิษฐ์โดย John Conway นักคณิตศาสตร์ Lifeเป็นชุดของกฎที่ช่วยให้คุณสามารถจำลองกระดานสองมิติได้ กฎจะตัดสินว่าเซลล์ใดบนกระดานอยู่และเซลล์ใดจะตาย ด้วยจินตนาการคุณสามารถพูดได้ว่าLifeเป็นเกมที่ไม่มีผู้เล่นคนหนึ่ง: เกมที่มีวัตถุประสงค์เพื่อค้นหารูปแบบที่มีพฤติกรรมที่น่าสนใจเช่นเครื่องร่อนที่มีชื่อเสียง
เกมที่ไม่มีผู้เล่น ... จนถึงทุกวันนี้ คุณต้องเขียนโปรแกรมที่เล่น Game of Life - และเล่นเพื่อให้ชนะ King of the Hill-style แน่นอนว่าคู่ต่อสู้ของคุณพยายามทำเช่นเดียวกัน ผู้ชนะคือทั้งบ็อตสุดท้ายที่มีเซลล์ใด ๆ สดหรือผู้เล่นที่มีเซลล์สดมากที่สุดหลังจาก 10,000 รุ่น
กฎของเกม
กฎนั้นใกล้เคียงกับชีวิตปกติ (B3 / S23):
- เซลล์มีชีวิตที่มีเพื่อนบ้านที่เป็นมิตรน้อยกว่าสองคนเสียชีวิตจากความอดอยาก
- เซลล์ที่มีชีวิตซึ่งมีเพื่อนบ้านที่เป็นมิตรสองหรือสามคนยังมีชีวิตอยู่
- เซลล์ที่มีชีวิตซึ่งมีเพื่อนบ้านที่เป็นมิตรมากกว่าสามคนเสียชีวิตเนื่องจากมีประชากรมากเกินไป
- เซลล์ที่ตายแล้วตรงกับสามเพื่อนบ้านของผู้เล่นคนเดียวกันมามีชีวิตอยู่เพื่อต่อสู้กับผู้เล่นที่มีให้ไม่มีเพื่อนบ้านศัตรู
... แต่หลังจากแต่ละรุ่นทั้งคุณและคู่ต่อสู้จะมีโอกาสเข้าแทรกแซง คุณสามารถตื่นได้มากถึง 30 เซลล์เพื่อต่อสู้เพื่อคุณ (ผู้ที่ไปก่อนจะถูกตัดสินใจโดยเซิร์ฟเวอร์)
กระดานเป็นเซลล์สี่เหลี่ยมจัตุรัส (x, y) ช่องสี่เหลี่ยมทั้งหมดจะเริ่มตาย เส้นขอบไม่พันกัน (นี่ไม่ใช่โลกที่มีรูปทรงพรู) และตายอย่างถาวร
นี่คือคือการประกวดในจิตวิญญาณของBattleBotsและคอร์วอร์ส มีเซิร์ฟเวอร์กลางที่จะเรียกใช้บอทและสามารถพบได้ที่นี่
โปรโตคอล
เซิร์ฟเวอร์ arena พูดถึงโพรโทคอล JSON แบบธรรมดาที่สื่อสารผ่าน argv
โดยที่ Values คือสตริงที่เข้ารหัสของ JSON
y_size
: จำนวน y สูงสุดของไพ่ก่อนที่พวกเขาจะหายไปx_size
: สูงสุด x coords ของแผ่นก่อนที่จะหายไปtick_id
: หมายเลขติ๊กปัจจุบันboard
: พจนานุกรมที่มีคีย์ในรูปแบบ '(y, x)' และค่าในรูปแบบbot_id
(int)bot_id
: ไทล์ในบอร์ดที่มี ID นี้เป็นของคุณ
ตัวอย่าง:
{"y_size":2000,"x_size":2000,"board":{},"bot_id":1,"tick_id":1}
บอกเซิร์ฟเวอร์ที่คุณเลือก:
- ส่งรายการของไพ่ให้เซิร์ฟเวอร์เพื่อเปลี่ยนเป็นสีของคุณ
- เฉพาะผู้ที่ว่างเปล่าเท่านั้นที่จะถูกเปลี่ยน
- รูปแบบรายการ coords ที่ซ้อนกัน
[[0,0], [0,1], [100,22]...]
หมายเหตุ: บ็อตของคุณไม่จำเป็นต้องอัปเดตไทล์เลยเซิร์ฟเวอร์จะทำการอัปเดตเอง
กฎการแข่งขัน
- หากการนำไปปฏิบัติของคุณไม่สามารถปฏิบัติตามโปรโตคอลได้การเปลี่ยนแปลงนั้นจะถูกริบคืน เซิร์ฟเวอร์จะถือว่าไม่มีการเปลี่ยนแปลงในสถานะ
- คุณไม่ได้รับอนุญาตให้ใช้ความได้เปรียบจากความผิดพลาดในเซิร์ฟเวอร์เวที
- ให้ AI ของคุณตัดสินใจเกี่ยวกับการเคลื่อนไหวในเวลาที่มีสติ โปรดส่งการย้ายครั้งต่อไปของคุณโดยเร็วที่สุดเท่าที่จะทำได้
- สุดท้ายนี้โปรดทำดีกับเซิร์ฟเวอร์ มันมีไว้เพื่อความบันเทิงของคุณ
- การไม่ปฏิบัติตามกฎเหล่านี้อาจนำไปสู่การถูกตัดสิทธิ์
- ในกรณีที่เสมอกันผู้เล่นทั้งสองจะมี 1 ชัยชนะที่เพิ่มเข้ามาทั้งหมด
ใช้งานคอนโทรลเลอร์ด้วยตัวเอง
แหล่งสำหรับการควบคุมที่สามารถพบได้ที่นี่ การรันคอนโทรลเลอร์มี 2 วิธี:
- โหมดการแข่งขัน (เทอร์มินัล)
- ติดตั้งด้วย
python3 get_answers.py
- เรียกใช้การแข่งขันทั้งหมดโดยใช้บอทที่มีการแข่งขันกัน
- ติดตั้งด้วย
- โหมดการทดสอบ (GUI)
- วิ่ง
python3 nice_gui.py
- คลิก
Pull Answers
- หากคุณต้องการเพิ่มคำตอบของคุณเองก่อนที่จะโพสต์ให้คลิก
File -> Add manual answer
และค้นหาไฟล์และเลือกภาษาที่เขียน - หากภาษาของคุณไม่มี ping me และฉันจะลองติดตั้งบนเซิร์ฟเวอร์ฉันจะใช้งาน (คำแนะนำในการติดตั้งและใช้งานจะดีเช่นกัน!)
- เลือก 2 บอทเพื่อเจาะเข้าหากัน
- คลิก
Run
- ดูเกม ...
- วิ่ง
- การติดตั้ง
- ต้องการ python3
- get_answers ต้องการ bs4 และ html5lib
- คอนโทรลเลอร์ต้องการวิธีการเรียกใช้ไฟล์. sh (MinGW บน windows)
เกณฑ์การให้คะแนน
บอทที่ชนะมากที่สุดเริ่มต้นจาก12/07/2016
(12 กรกฎาคม)14/07/2016
(14 กรกฎาคมไม่สามารถหาวิธีเรียกใช้บอท) ชนะ
สามารถขอความช่วยเหลือเกี่ยวกับคอนโทรลเลอร์ / กุยได้ในห้องสนทนานี้
คำถามนี้ได้รับการพัฒนาตั้งแต่ปี 2014 และเป็นคำถามที่ถูกโหวตมากที่สุดในกล่องทราย ขอขอบคุณเป็นพิเศษไปที่Wander Nauta (ผู้แต่งและแนวคิดดั้งเดิม), PPCG Chat (ความคิดเห็นและความช่วยเหลือ) และทุกคนที่แสดงความคิดเห็นในโพสต์แซนด์บ็อกซ์ (ความคิดเห็นเพิ่มเติม)