私が持っていたランダムなアイデアは、その6つのエッジのそれぞれの状態を追跡するクラスを定義することについてDeepakが言ったことに従うことです(たとえば、int[] neighbor
上のエッジが隣接している場合、どの隣接[0]状態で、隣接[1]状態右上端に隣がある場合、時計回りに進みます)
次に、画面上の各六角形について、その配列をバイナリ経由で整数に変換します。その整数に基づいて、ルックアップ テーブルを使用して、使用する六角形の画像 + 向き/反転方法を決定し、その六角形オブジェクトをその画像に割り当てます。
たとえば、最初のスクリーンショットで 4 つの隣接する中央の六角形を見てみましょう。その配列は[1, 0, 1, 1, 0, 1]
、上記のスキームに基づいています。neighbor[0] を最下位ビット (2^0) に、neighbor[5] を最上位ビット (2^5) にすると、 が得られ[1, 0, 1, 1, 0, 1] --> 45
ます。ルックアップ テーブルのどこかで、45 は、投稿した 7 つの基本六角形アイコンの中で、水平方向に反転された * 5 番目の六角形イメージを意味するように既に定義されています。
はい、ブルートフォースが関係していますが、六角形が収まるかどうかを確認するために回転していないため、「よりスマートな」ブルートフォースです。むしろ、より効率的なルックアップ テーブルが必要です。
*または、必要に応じて時計回りに 120 度回転させます ;)