วิธีที่มีประสิทธิภาพในการแสดงตรรกะบอร์ดหกเหลี่ยมสำหรับเกมที่มีลักษณะเป็นหอยเป๋าฮื้อ


11

ฉันต้องติดตั้งเกม AI สำหรับAbaloneและฉันสงสัยว่าอะไรคือวิธีที่ดีที่สุดในการแสดงตรรกะบอร์ดโดยใช้ Java โดยไม่ต้องสิ้นเปลืองทรัพยากรมากเกินไปในการตรวจสอบและอัพเดทตามปกติ

ใช้รายการต่าง ๆ ดีกว่าไหม? เมทริกซ์ของวัตถุเซลล์? ข้อเสนอแนะใด ๆ

ป้อนคำอธิบายรูปภาพที่นี่


1
มีแหล่งข้อมูลที่ดีสำหรับกริดหกเหลี่ยมที่redblobgames.comมันมีทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับกริดหกเหลี่ยมระบบพิกัดของพวกเขาและวิธีการคำนวณกับพวกเขา
Roman Reiner

คำตอบ:


7

1) เนื่องจากบอร์ดมีขนาดคงที่ที่คุณเพิ่งจะป้อนเข้าสู่ AI อย่างไรก็ตามคุณสามารถแทนมันเป็นอาเรย์หนึ่งมิติที่มีจำนวนเซลล์ที่เหมาะสมโดยที่แต่ละเซลล์แสดงพื้นที่บน คณะกรรมการ. การทำแผนที่อาเรย์แบบหนึ่งมิติไปที่หน้าจอเพื่อนำเสนออาจเป็นเรื่องแปลก แต่ก็เป็นปัญหาที่คุณต้องแก้ไขเพียงครั้งเดียว

เช่นเดียวกับการตรวจสอบความเคลื่อนไหว; คุณสามารถสร้างเมทริกซ์ adjacency ที่บอกว่าเซลล์ใดติดกับเซลล์อื่นหรือเกิดขึ้นกับตรรกะในการกำหนด adjacency ไม่ว่าจะด้วยวิธีใดก็จะเป็นค่าใช้จ่ายครั้งเดียว

2) ขอให้สังเกตว่าทุก ๆ ตารางเลขฐานสิบหกนั้นยังเป็นตารางสองแกนยกเว้นว่าแกนเป็น 60 หรือ 120 degress จากกันและกันแทนที่จะเป็น 90 องศาเหมือนกริดที่ X และ Y ตั้งฉาก (บอร์ดเกมแผ่นฐานสิบหกเก่าใช้เคล็ดลับนี้เพื่อติดป้ายฐานสิบหก 1, 2, 3 ในทิศทางเดียวและ AA, BB, CC ในอีกทิศทางหนึ่งเอียงทิศทาง)

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

(มันเป็นเลขจำนวนเต็มมากกว่าคณิตศาสตร์แบบพีทาโกรัส;))


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