Katakanlah saya sedang membangun permainan papan dengan kisi yang kuat, seperti Settlers of Catan :
Perhatikan bahwa setiap simpul dan tepi mungkin memiliki atribut (jalan dan pemukiman di atasnya).
Bagaimana saya membuat struktur data yang mewakili papan ini? Apa pola untuk mengakses setiap tetangga, tepi, dan simpul ubin?
data-structures
seorang kutu buku yang dibayar
sumber
sumber
Jawaban:
Amit Patel telah memposting halaman yang luar biasa tentang topik ini. Ini sangat komprehensif dan luar biasa sehingga perlu menjadi jawaban pasti untuk pertanyaan ini: Hexagonal Grids
sumber
Grid seperti itu dapat direpresentasikan dalam array dua dimensi:
Jika
adalah nomor satu dengan tetangganya di grid hex, maka Anda dapat memasukkannya ke dalam array 2D seperti:
Jelasnya ketetanggaan ditentukan dalam grid ini tidak hanya dengan berdekatan secara horizontal atau vertikal tetapi juga menggunakan satu diagonal.
Anda juga dapat menggunakan grafik jika Anda mau.
sumber
Artikel ini membahas cara menyiapkan game kisi Isomer / Heksagonal. Saya menyarankan Anda untuk melihat
Forcing Isometric and Hexagonal Maps onto a Rectangular Grid
bagian dan bagian pergerakan. Meskipun berbeda dari apa yang Anda cari, ini dapat membantu Anda merumuskan bagaimana melakukan apa yang Anda inginkan.sumber
Saya sudah banyak berurusan dengan kutukan. Dalam kasus seperti ini, Anda melacak masing-masing dari 6 titik untuk perbatasan hex. Ini memungkinkan Anda menggambarnya dengan cukup mudah.
Anda akan memiliki satu larik objek yang mewakili heksa. Masing-masing objek hex ini juga memiliki 6 "pointer" (atau indeks ke array lain) yang menunjuk ke array "sisi" lainnya. Hal yang sama untuk "simpul". Tentu saja simpul akan memiliki 3 penunjuk ke heks yang berdampingan, dan sisi akan memiliki 2.
Jadi, hex bisa berupa: X, Y, Point (6), Vertices (6), Sides (6)
Kemudian Anda memiliki array Hex, array vertice, dan array samping.
Maka sangat mudah untuk menemukan simpul / sisi untuk sebuah hex, atau apapun.
Ketika saya mengatakan pointer, itu bisa dengan mudah menjadi integer yang menunjuk ke elemen di simpul atau array samping atau apa pun. Dan tentu saja array bisa berupa daftar atau apapun.
sumber
Anda juga dapat mencoba untuk 'mendatar' baris peta Anda. Untuk contoh ini akan menjadi:
Terkadang lebih berguna untuk memiliki baris dalam satu baris: P
sumber
Saya akan menyarankan sesuatu seperti berikut (saya akan menggunakan deklarasi gaya Delphi):
Setiap hex memiliki enam sisi dan enam simpul. Setiap tepi melacak dua heks yang bersebelahan, dan setiap simpul melacak tiga heks yang berdampingan (heks di tepi peta akan menjadi kasus khusus).
Ada banyak hal yang dapat Anda lakukan dengan cara yang berbeda tentunya. Anda bisa menggunakan pointer daripada array, Anda bisa menggunakan objek daripada record, dan Anda bisa menyimpan hex Anda dalam array dua dimensi seperti yang disarankan oleh penjawab lain.
Mudah-mudahan, itu mungkin memberi Anda beberapa ide tentang satu cara untuk mendekatinya.
sumber
Kami mengimplementasikan Settler of Catan AI untuk proyek kelas, dan memodifikasi kode dari jawaban ini (yang merupakan bug) untuk membuat Board dengan akses acak waktu konstan ke simpul dan tepi. Itu adalah masalah yang menyenangkan, tetapi papannya membutuhkan banyak waktu, jadi jika ada yang masih mencari implementasi sederhana, berikut adalah kode Python kami:
sumber
Saya duduk di sini "di waktu luang saya, coding untuk bersenang-senang" dengan heksa. Dan bunyinya seperti ini ... Saya akan memberi tahu Anda seperti apa bentuknya dalam kata-kata.
Ini hanyalah sebuah ide bagaimana saya akan mengerjakannya.
sumber
Anda dapat membuat larik 2D dan kemudian mempertimbangkan posisi yang valid sebagai:
Untuk setiap sel, tetangganya adalah:
Ilustrasi: Hex Grid
Tanda x adalah heksa. x yang diagonal satu sama lain adalah tetangga. | menghubungkan tetangga vertikal.
sumber