LoginSignup
29
34

More than 3 years have passed since last update.

ゲームをつくる:Hex(ヘックス)マップの座標系構造

Last updated at Posted at 2016-12-29

この記事は、

ヘックス・ターン制シミュレーションゲームが好きな筆者が、最近その手の面白いゲームが無いので、自分で作るぜ!と、頑張る記録です。

この記事のまとめ

データ構造として、Hexを扱うには、飛び飛びの座標系で表すのが良さそう。
(追記)、、、と、思ったのですが、後で交互にずらす座標系のほうが良いと思い直しました。
その記事はこちら

Hexマップとは

六角形をつなげて作られているマップ。
HexMap.jpg
こんな感じのヤツですね。

最近よくあるSLGだと、四角く区切られたマップが多いです。
四角と比べてHexマップの良さは、
- より詳細に現実を表せる(特に移動距離や向き)
- 戦略性が高くできる
あたりでしょう。

あと、自分的にはやっぱりHexが格好良いです。好みの問題だけど超重要。大戦略が好きだからだね。
でも、個々のマスが周囲の6マスと接していて互い違いに並んでいるので、2次元の座標としてどのように表すのか、ちょっと悩みます。

Hexマップのデータ構造の選択肢

色々な方向がありえるのですが、代表的な形は3種類くらいかなぁ、と。
以下の2つの記事が詳しいです。
NinaLaboさん・猫とゲームさん
選択肢の中で、飛び飛び形式の座標系でデータを持つことにしました。
他の座標系と比べて、飛び飛びの良さはこんなところ。

スプレッドシートで表現できる

スプレッドシートでデータを作って、マップを作りたいので重要です。
試しにGoogleっスプレッドシートで作ってみました。こんな感じ。
hexss.png
座標が普通にCOLUMNとROWで引っ張ってこれるのが素敵。
以下のような感じ。
="(" & column(A1)-1 & ", " & row(A1)-1 & ")"

結構簡単に距離を計算できる

2点間の距離計算も楽々。
2座標のX,Yそれぞれの差の絶対値をとる。これを(dx, dy)とした時、

  • dx > dy の場合、距離は dx
  • dy > dx の場合、距離は (dx + dy)/2

マップのデータ構造もOK

マップのデータ構造も無駄なく作れる。
Y座標を2で割って、切り捨てれば普通に無駄のないデータの記述が可能。配列とかにも入れやすい。後で、X座標が偶数のときには、Y座標x2、奇数のときにはY座標x2+1としてやれば、元の座標系に復元できます。

というわけで、飛び飛びの座標系で行こうと思います。
作ってみたら交互にずらす座標系の方が良いと思い直しました
その記事はこちら

29
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
34