アワビのようなゲームの六角形ボードロジックを効率的に表現する方法


11

AIをAbaloneゲームに実装する必要があり、関連するすべてのチェックおよび更新ルーチンで多くのリソースを無駄にせずに、Javaを使用してボードロジックを表現する最良の方法は何か疑問に思っています。

さまざまなリストを使用する方が良いですか?Cellオブジェクトのマトリックス?なにか提案を?

ここに画像の説明を入力してください


1
redblobgames.comには六角形のグリッドに関する優れたリソースがあります。六角形のグリッド、その座標系、およびそれらの計算方法について知っておくべきすべてが揃っています。
ローマンライナー14

回答:


7

1)ボードには固定サイズがあるため、とにかくAIに入力するので、正しい数のセルを持つ1次元配列として表すことができます。各セルは上のスペースを表します。ボード。その1次元配列をプレゼンテーション用に画面にマッピングするのは少し奇妙かもしれませんが、一度だけ解決すればよい問題です。

同じことが移動の検証にも当てはまります。どのセルが他のセルに隣接しているかを示す隣接マトリックスを作成するか、隣接を決定するロジックを考え出すことができます。いずれにせよ、それは一度限りの費用になります。

2)XとYが垂直であるグリッドのように90度ではなく、軸が互いに60または120退行することを除いて、すべての16進グリッドも2軸グリッドであることに注意してください。(古いヘックスタイルボードゲームは、このトリックを使用して、1方向にヘクス1、2、3にラベルを付け、もう1方向にAA、BB、CCに斜めの方向にラベルを付けました。)

私は(2)を使用するボードゲームのコンピューター実装のソースコードを調べましたが、「ヘックス間の線を見つける」または「ヘックス間の距離を見つける」などのルーチンを提供しました。それはかなり前のことなので、詳細は時を経て失われますが、それほど難しくなかったのを覚えています。

(ピタゴラスのものではなく、より整数の数学でした。;))


1
何年も前のAIの場合、19x19のセルの配列と、AIがその動きを把握するために使用したセルへのポインターの192x5の配列がありました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.