Cara yang efisien untuk merepresentasikan logika papan heksagonal untuk gim yang mirip abalon

11

Saya harus mengimplementasikan AI untuk game Abalone dan saya bertanya-tanya apa cara terbaik untuk merepresentasikan logika papan menggunakan Java tanpa menghabiskan terlalu banyak sumber daya dalam semua pemeriksaan dan pembaruan rutin yang terlibat.

Apakah lebih baik menggunakan berbagai daftar? Matriks objek Sel? Ada saran?

masukkan deskripsi gambar di sini

Asgard
sumber
1
Ada sumber yang bagus untuk kisi heksagonal di redblobgames.com Ini memiliki semua yang perlu Anda ketahui tentang kisi heksagonal, sistem koordinatnya, dan cara melakukan komputasi.
Roman Reiner

Jawaban:

7

1) karena papan memiliki ukuran tetap yang Anda hanya akan memasukkan AI, Anda hanya bisa menggambarkannya sebagai array satu dimensi dengan jumlah sel yang tepat, di mana setiap sel mewakili ruang pada naik. Memetakan array satu dimensi ke layar untuk presentasi mungkin sedikit aneh, tapi itu masalah yang hanya perlu Anda selesaikan satu kali.

Hal yang sama berlaku untuk memvalidasi gerakan; Anda bisa membuat matriks adjacency yang memberi tahu sel mana yang berdekatan dengan yang lain, atau menghasilkan logika untuk menentukan adjacency. Either way, itu akan menjadi biaya satu kali.

2) Perhatikan bahwa setiap kisi heks juga merupakan kisi dua sumbu, kecuali bahwa sumbu 60 atau 120 degress satu sama lain, bukannya kisi 90 derajat seperti kisi di mana X dan Y tegak lurus. (Boardgames hex-tile lama menggunakan trik ini untuk memberi label hex 1, 2, 3 dalam satu arah, dan AA, BB, CC di arah yang lain, condong, miring.)

Saya telah melihat kode sumber untuk implementasi komputer dari permainan papan yang menggunakan (2), dan mereka menyediakan rutinitas seperti "menemukan garis di antara heks" atau "menemukan jarak antara heks." Itu sudah lama sekali, jadi detailnya hilang ke waktu, tapi saya ingat itu tidak terlalu sulit.

(Itu lebih bilangan bulat matematika daripada hal-hal Pythagoras.;))

rampok
sumber
1
Untuk AI yang dibuat bertahun-tahun yang lalu, saya memiliki array sel 19x19, dan array pointer 192x5 ke sel yang kemudian digunakan AI untuk mengetahui pergerakannya.