如何在内存中表示六边形/十六进制网格?

a p*_*erd 115 data-structures

假设我正在制作一个带有六角网格的棋盘游戏,比如Settlers of Catan:

主持者imgur.com

请注意,每个顶点和边可能有一个属性(上面的道路和沉降).

我如何制作代表该板的数据结构?访问每个tile的邻居,边和顶点的模式是什么?

a p*_*erd 149

Amit Patel 在这个主题上发布了一个惊人的页面.它是如此全面和精彩,它需要成为这个问题的明确答案:六角形网格

cubez

  • 谢谢:)那个页面没有覆盖边缘和顶点,但是我在http://www-cs-students.stanford.edu/~amitp/game-programming/grids我的网格文章的部分之间的关​​系部分覆盖它们/(图表用于方格网格,但该表格还包括轴向六边形网格的公式) (25认同)

Joe*_*oey 17

这样的网格可以用二维数组表示:

如果

   2
7     3
   1   
6     4
   5
Run Code Online (Sandbox Code Playgroud)

是十六进制网格中的邻居的第一个,然后您可以将其放入2D数组中,如下所示:

2 3
7 1 4
  6 5
Run Code Online (Sandbox Code Playgroud)

显然,在该网格中确定邻居不仅通过水平或垂直相邻而且还使用一个对角线.

不过,如果您愿意,也可以使用图表.


zfe*_*ran 11

本文介绍了如何设置Isomeric/Hexagonal网格游戏.我建议您查看Forcing Isometric and Hexagonal Maps onto a Rectangular Grid部分和运动部分.虽然它与您正在寻找的不同,但它可以帮助您制定如何做您想要的.