-1

私はiOS用のカタンの入植者をコーディングしており、現在、データタイルをマトリックスに持っています。今、各タイルに数字を付けようとしています。しかし、これをアルゴリズム的に行う正しい方法については固執しています。数字のタイルをボードに置くには特定のルールがあります。これらは:

1) それらは、画像に示されている事前定義された順序で実行する必要があります。

2) ボードの隅から始めなければなりません。

3) ボードの周りを反時計回りに、中心に向かってらせん状に進む必要があります。

4) 砂漠タイルはスキップする必要があります。

カタンボード

ボード上で実際にタイルを配置できる場所は 6 つしかないため、6 つのソリューションをデータ グリッドに手作業でコーディングすることは難しくありません。ただ、ボードが大きくなるゲームのバリエーションがあるので、アルゴリズムを検討する価値があると考えました。

これを達成する方法はありますか?

4

1 に答える 1

2

あなたがしたいことは、タイル(マトリックスのエントリ)間の幾何学的関係を含みます

その情報を保存して照会する方法が必要です。

六角形に座標を割り当てるために人々が開発したいくつかの方法があります。

私の頭の上からあなたが望むことをする1つの方法は、各ヘックスがその隣人への6つの「ポインター」を持つことです。もちろん、これらのポインターは実際には配列内のインデックスである可能性があります。

「コーナー」ヘクスは、3 つの「ヌル」ネイバーがあることに注意することで検出できます。次に、そこから反時計回りにトラバースし、既に訪れたことを思い出します。


更新(コメントに応じて)

与えられたヘックスについて、私が説明したように 6 つの隣接を格納するとします。

この説明では、これらのネイバーに AF という名前を付けます。

都合がよいので、これらを反時計回りに割り当てます。

グラフィカルに:

          A
        _____
   B   /     \   F
      /       \
     (         )
      \       /
   C   \_____/   E

          D

「コーナー」ヘクスの場合、次のようになります。

          A
        _____
   B   /     \   NULL
      /       \
     (         )
      \       /
   C   \_____/   NULL

          NULL

したがって、この 16 進数を見て、隣接情報 (ラップアラウンド) をリストすると、次のようになります。

A、B、C、ヌル、ヌル、ヌル、A、B、C、...

連続して 3 つの NULL を見つけるとすぐに、次のスポットが開始方向を「指す」必要があることがわかります。この場合、「A」の方向から始めるべきです。

もう一つの例:

          NULL
        _____
 NULL  /     \   NULL
      /       \
     (         )
      \       /
   C   \_____/   E

          D

先ほどと同じように、上から順番にリストを作成します。

NULL、NULL、C、D、E、NULL、NULL、NULL、C

3 つの NULL を見つけるとすぐに、次の方向が開始方向になります。この場合は「C」です。

そこから同じ方向にらせん状に進むのはかなり簡単なはずです(文字通りではありません-har har)。

PS: http://ascii.co.uk/art/hexagonの素早いアスキー アート (:

于 2012-06-26T00:41:39.240 に答える