六角形マスの敷き詰めMAPを考えるとき、その実装方法はいくつかある。
まず1つがマスのクラス化。
class hexcell { hexcell* next[6]; }
1マスごとに隣り合うマスのアドレスを保有し、相互アクセスを可能にする。
マスclassを1次元配列で確保することで複雑な形のMAPでも必要最小限の要素で構成できる。
反面、絶対位置の概念がないため隣り合わないマスへの移動距離が計算しにくかったり、なんらかの方法で可視化しなければMAP製作不能。
2つ目が半マスずらしの二次元配列。
□□□□□□ □□□□□□ □□□□□□ □□□□□□
通常の二次元配列で実装でき、左右の取得が簡単。上下の斜め方向についても簡単な計算式で取得可能。
もっとも簡単かつ実用的な実装。
この2つより優れていると僕がにらんだのは三次元配列。
六角形1マスあたりの周囲マスは6つであり、その周囲マスはそれぞれ繋がっておらず、周囲マスはさらに基礎マスを除いた5つの周囲マスを持つ。
ということで、立方体の積み重ねと共通すると考えました。
しかし思考は難航。どうにも立体を平面に落とせない。
それもそのはず、立体において、ある周囲マスは、基礎マスの他の周囲マスと、基礎マス以外の自身の周囲マス1個で最短接続されており、その接続先は4個になります。
平面六角形においては周囲マスは環状に直結しており、また、隣り合う2つ以外との最短接続は基礎マスと周囲マスにしかありません。
部分的な類似点はありますが、周囲マスの接続形態に著しい差があり、実装は不可能です。
そしてここからが回答編。
六角形のマスの作り方 - Java 解決済み| 【OKWAVE】
回答4が最善じゃないかなと思います。これほど単純明快な解釈があるのかと驚きました。
図形の構造を思考しているのだから図を見て考えるべきだったのもそうですが、この軸を傾ける発想というのはやはり幾何に通じていないと出てこないのでは。
僕のほかの案も出ていて間違いではなかったとは思いますが、これ以上の回答はないですね。
この図を見てわかるのが、立体として考えたときの構造。立体が階段型に積まれているように見えます。
単純な立体の積み重ねではない、ということはきちんと図を見ていれば自明だったのです。