首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用C语言生成/创建六边形网格

用C语言生成/创建六边形网格
EN

Stack Overflow用户
提问于 2011-05-12 10:46:37
回答 2查看 3.6K关注 0票数 1

所以我试着用C语言做一个六边形的网格。我真的不知道从哪里开始做起。ANyone有什么想法吗?

编辑:我需要大约15-20个六边形在一个手柄形状所有连接,有点像一个游戏板。为了一个我正在开发的游戏。对不起,我说得不清楚

EN

回答 2

Stack Overflow用户

发布于 2011-05-12 10:56:35

绝对一点儿没错。尽管六边形的形状很奇怪,但它们仍然可以包含在您常用的多维数组中,以备将来使用(我假设您希望将内容放入您的六边形中)。至于画它们,很简单。角度总和= (6 - 2) * 180 =4* 180 = 720。一个角度是720 /6= 120度。首先计算最左边的角度的Y位置,它等于√(hexagonSide - hexagonWidth * hexagonWidth)。我相信你能搞清楚hexagonWidth,对吧?好的,现在相对于最后一个的X位置将是0。您需要将Y位置偏移它前面六边形高度的一半,向上或向下取决于row * col是偶数还是奇数。既然你知道六边形的宽度,你就有了相反角度的坐标。旋转120°,然后重复。

在我继续之前,这是不是应该在控制台中?或者它是真正的图形?

票数 2
EN

Stack Overflow用户

发布于 2011-12-28 00:19:39

那么让我们直截了当地说,游戏将在游戏机上进行?好的,现在你需要设置你的数据结构,最明显的就是节点。

节点

每个六边形都是一个有六条边的节点。

代码语言:javascript
运行
复制
typedef struct Node {
  void *object; /* Pointer to object */
  Node *node_array; /* Pointer to node_array with 'node_count' nodes */
  int node_count; /* size of node_array */
} Node;

如何初始化和连接节点结构

想象一下下面的六边形:

代码语言:javascript
运行
复制
 /\
|  |
 \/

它有以下边缘:东北、东部、东南、西南、西部和西北。接下来观察它们将如何排列(10、11和12用十六进制表示,以便它们可以放在一个空间中):

代码语言:javascript
运行
复制
//  0 1 2 3
// 4 5 6 7 8
//  9 A B C

所以0将通过它的SOUTHEAST链接链接到5,而4通过它的SOUTHWEST链接。还要注意行是如何在奇数和偶数元素之间交替的。让我们调用{0, 1, 2, 3}{4, 5, 6, 7, 8} row1。让我们称其为5x3的六边形映射。创建此数组的最简单方法是使用malloc(sizeof(Node) * width * height)

连接节点

首先,让我指出每个偶数行(0,2,4,...)将具有width-1元素。此外,此行中的每个元素(x,y)都将链接到数组中的以下元素:

NORTHEAST

  • (x+1,y) - SOUTHEAST

  • (x,SOUTHWEST

  • (x-1,)-
  • (x+1,y-1) -
    • (x+1,y-1) -
    • (x+1,y+1) -
    • (x,y-1)-x+1

其他行上的元素(如{4, 5, 6, 7, 8} )将具有width元素,其中element (x,y)链接到以下元素:

西部(x,y-1) - NORTHEAST

  • (x+1,y) -东部地区(x,y+1) - SOUTHEAST

  • (x-1,

(x,y+1) -SOUTHEAST

  • (x-1,y) -西部地区(x-1,y-1) -

  • (x-1,y-1)-

尝试将(x1,y1)与(x2,y2)链接时,请确保0 <= x < width0 <= y < height

记住..。

您的数组在每两行(、row2等)的末尾包含一个行未使用的元素。此外,您可能希望为它们都提供某种类型的标签或索引,以便您可以将玩家引向它们。您可以将它们标记为(x,y)对,或者通过它们的索引进行数字标记,这完全取决于您。(x,y)对对您来说非常简单,因为它将直接映射到存储它们的数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5972797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档