การออกแบบ Snake AI


9

ฉันยังใหม่กับ gamedev stackechange นี้ แต่เคยใช้เว็บไซต์คณิตศาสตร์และ cs มาก่อน

ดังนั้นฉันจึงอยู่ในการแข่งขันเพื่อสร้าง AI สำหรับงูที่จะแข่งขันกับงูอีกสี่ตัวในรอบ 5 นาทีโดยมีกติกาเหมือนกับเกมงู Nokia แบบดั้งเดิมยกเว้นว่ามีงูห้าตัวบอร์ด 30x30 และมี จำนวนของอุปสรรคเล็ก ๆ บนสนาม

เช่นเดียวกับเกมของ Nokia งูของคุณจะเติบโตขึ้นเมื่อคุณไปถึงผลไม้และหากคุณชนกับตัวเองงูอีกตัวหรือกำแพงที่คุณตาย เกมทำงานด้วยความล่าช้า 30ms ระหว่างการเคลื่อนไหวและเซิร์ฟเวอร์จะส่งสถานะเกมใหม่ทุก ๆ 50ms ซึ่งรหัสจะต้องวิเคราะห์และสิ่งที่ไม่และเอาท์พุทย้ายถัดไป

ผู้ชนะคืองูที่ยาวที่สุดในทุกจุดของเกม เบรกเกอร์เน็คไทจะตัดสินโดยการฆ่า

จนถึงตอนนี้สิ่งที่ฉันทำคือการใช้การค้นหากราฟ A * จากงูแต่ละตัวเพื่อตรวจสอบว่างูของฉันใกล้เคียงกับแอปเปิ้ลหรือไม่และถ้าเป็นก็จะไปที่แอปเปิ้ล ไม่เช่นนั้นฉันก็สร้างอัลกอริธึมเล็กน้อยเพื่อกำหนดพื้นที่ว่างเปล่าของกระดานซึ่งงูของฉันไปเพื่อคาดการณ์แอปเปิ้ลต่อไป

นอกเหนือจากนี้ฉันมีการตรวจสอบความสามารถในการเอาตัวรอดเล็ก ๆ น้อย ๆ เพื่อให้แน่ใจว่างูของฉันไม่ได้เดินเข้าไปในกับดักที่ไม่สามารถออกไปได้และถ้ามันติดอยู่ฉันก็มีบางอย่างที่จะให้โอกาสที่ดีกว่า

...

อย่างไรก็ตามฉันได้ทดสอบงูของฉันบนเซิร์ฟเวอร์ทดสอบและมันก็ค่อนข้างดี โดยทั่วไปแล้วกลยุทธ์ของฉันจะให้แอปเปิ้ลเมื่อมันเป็นสิ่งที่แน่นอนและหาพื้นที่เมื่อมันไม่ทำให้มันเติบโตเร็วกว่างูชนิดอื่น ๆ (งูบางตัวทำสิ่งที่คล้ายกัน แต่มักจะไปตรงกลางหรือมุม) บางครั้งมันชนะ เกมทดลองใช้งานเหล่านี้ แต่บ่อยกว่าไม่แพ้งูตัวเดียวที่ดูเหมือนจะมีความสามารถในการเอาตัวรอดได้ (งูของฉันเติบโตเร็วขึ้น แต่ก็ตายอย่างใดแล้วและงูตัวอื่น ๆ

ดังนั้นฉันจึงสงสัยว่าความคิดใด ๆ ที่ทุกคนต้องพยายามและปรับปรุงงูของฉัน หรืออาจเป็นความคิดในแนวทางใหม่ที่จะทำ ฟังก์ชั่นและชั้นเรียนของฉันนั้นดีดังนั้นการเปลี่ยนแปลงที่อาจดูรุนแรงไม่ควรเลวร้ายเกินไป ฉันสนับสนุนความคิดทั้งหมด

ความคิดใด ๆ

คำตอบ:


5

กลยุทธ์การป้องกันที่ดีอาจทำให้รูปร่างสมบูรณ์แบบ(ดังนั้นหัวและด้านหลังของคุณจะอยู่ห่างจากกัน 1 ช่องเสมอและคุณสร้างตารางเต็มหรืออะไรก็ตามที่เป็นไปได้ที่จะสร้างตามความยาวที่กำหนด) นี่จะทำให้คุณสวยมาก อมตะเนื่องจากไม่มีงูเข้ามาในพื้นที่ปิดล้อมของคุณและคุณจะไม่วิ่งเข้าไปหาตัวคุณเอง (เว้นแต่ว่าแอปเปิ้ลวางไข่ในปากของคุณ แต่ฉันคิดว่ามันเป็นไปไม่ได้ถ้าไม่มีที่ว่าง)

นี่จะทำให้เป็นเช่นนั้นถ้าแอปเปิ้ลปรากฏขึ้นจริงในพื้นที่ปิดล้อมของคุณคุณอาจถูกตั้งโปรแกรมให้ไม่ไปหามันและงูตัวอื่น ๆ อาจจะตายพยายามที่จะเอามันออกมาหลังจากผ่านไประยะเวลาหนึ่ง กลับมาเป็นรูปร่างของคุณให้ดีที่สุดเท่าที่จะทำได้ (อาจเป็นอัลกอริธึมที่ซับซ้อน แต่ดูเหมือนว่าทำได้)

เมื่อไหร่ที่แอปเปิ้ลขึ้นอยู่กับว่าพวกเขาอยู่ไกลแค่ไหนบางทีถ้าคุณอยู่ใกล้กับระยะห่างที่ดีคุณก็สามารถทำได้ แต่อย่างอื่นอนุรักษ์นิยมยากที่จะบอกว่าอาจต้องปรับแต่งตามการทดลองและข้อผิดพลาด แต่ฉันคิดว่ามันจะเป็นกลยุทธ์ที่ดี


1
ดังนั้นโดยทั่วไป "งู" ของเขาควร "เต่า" ความคิดที่ดี xD +1
Cypher

สิ่งที่ดี. แต่มีสิ่งกีดขวางบนกระดาน ดังนั้นโปรแกรมเมอร์งูคนอื่นจะต้องทำให้งูของพวกเขาตรวจสอบว่ามีสิ่งกีดขวาง (ไม่ว่าจะเป็นกำแพงหรืองูอื่น ๆ ที่ล้อมรอบแอปเปิ้ล) พวกเขาอาจไม่มาและก็ตาย สิ่งหนึ่งที่สามารถทำได้เพื่อหลีกเลี่ยงปัญหานี้คือการมีระยะห่างระหว่างศีรษะและหางค่อนข้างมาก
Shashwat

ความคิดที่น่าสนใจฉันคิดว่าฉันสามารถใช้บางอย่างเช่นนี้ได้เมื่องูของฉันเพิ่งแขวนรอแอปเปิ้ลต่อไปเพื่อวางไข่ .. ฮ่าฮ่าฉันกังวลเล็กน้อยเกี่ยวกับแอปเปิ้ลที่วางไข่ในปากของฉันซึ่งจะทำให้แน่นอน ความตายและเกมเหล่านี้มักจะถูกตัดสินโดยความตายก่อนวัยอันควร
Rawb

@Ronald จริง ๆ แล้วถ้าคุณตรวจพบในแอปเปิ้ลวางไข่ในปากของคุณคุณสามารถหันเข้าและออกไปด้านนอกและดำเนินการต่อเนื่องจาก AI มีการสะท้อนที่สมบูรณ์แบบจริง ๆ แล้วมันควรจะง่ายต่อการแก้ไข (และอาจแก้ไขเอง)
Kevin DiTraglia

0

งูควรปรับกลยุทธ์ให้เข้ากับความยาวปัจจุบัน

งูที่มีความยาวมากสามารถใช้ร่างของมันเพื่อป้องกันคู่ต่อสู้ได้ ซึ่งหมายความว่าควรทำซีลด้วยผนัง

หากงูเดินทางไปทางตะวันออกโดยมีแอปเปิ้ลทางตะวันออกเฉียงเหนือของมันมันควรจะเดินทางไปทางกำแพงก่อนที่จะหันไปทางทิศเหนือดังนั้นเส้นทางที่เป็นไปได้สำหรับงูตัวอื่น ๆ จะถูก จำกัด อย่างรุนแรง

  0123456789
a ··········
b ··········
c ········A·
d ··········
e ooooooC···
f o·········
g o·········
h oooooooo··
i ··········
j ··········

งูตัวนี้ที่มีหัว C ควรหันไปทางทิศเหนือที่ e9 ไม่ใช่ที่ e8 ดังนั้นฝ่ายตรงข้ามด้านล่างจะติดกับดักและไม่สามารถกินแอปเปิ้ลที่วางไข่เหนือเส้น 'e'

พื้นที่ที่คุณสามารถตัดได้มากขึ้นและยิ่งสามารถถือได้นานเท่าไหร่ก็ยิ่งดีเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.