所以我试图在C中为游戏制作六边形网格。我真的很愚蠢,从哪里开始。任何人都有任何想法。
编辑:我需要大约15-20个六角形的握把形状全部加入,就像游戏板一样。对于我正在进行的游戏。抱歉不清楚答案 0 :(得分:1)
绝对。尽管它们的形状很奇怪,但六边形仍然可以包含在你通常的多维数组中,以备将来使用(我假设你想把东西放在你的六边形中)。至于绘制它们,很简单。角度之和=(6-2)* 180 = 4 * 180 = 720.一个角度是720/6 = 120度。首先计算最左侧角度的Y位置,该位置等于√(hexagonSide - hexagonWidth * hexagonWidth)
。我相信你能算出hexagonWidth
,对吗?好的,现在相对于最后一个的X位置将为0.您需要将Y位置偏移六边形高度的一半,向上或向下,取决于row * col
是偶数还是奇数。由于您知道六边形的宽度,因此您可以使用相反角度的坐标。旋转120°并重复。
在我继续之前,这应该在控制台中吗?还是真正的图形?
答案 1 :(得分:1)
所以,让我们直截了当,游戏将在控制台上播放?是的,现在您需要设置数据结构,最明显的是节点。
每个六边形都是一个有六条边的节点。
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;
想象一下以下的六边形:
/\
| |
\/
它有以下边缘,NORTHEAST,EAST,SOUTHEAST,SOUTHWEST,WEST和NORTHWEST。接下来观察它们的排列方式(10,11和12以十六进制表示,以便它们可以放在一个空间中):
// 0 1 2 3
// 4 5 6 7 8
// 9 A B C
因此0
将通过5
链接与SOUTHEAST
相关联,4
通过SOUTHWEST
链接链接到{0, 1, 2, 3}
。还要注意行如何在奇数和偶数元素之间交替。我们打电话给{4, 5, 6, 7, 8}
行[0] ,然后malloc(sizeof(Node) * width * height)
行[1] 。我们称之为 5x3 hexmap。创建此数组的最简单方法是使用width-1
。
首先让我指出每个偶数行(0,2,4,...)都有4, 5, 6, 7, 8
个元素。但是还有更多,这一行上的每个元素(x,y)将链接到数组中的以下元素:
其他行上的元素(例如{width
})将包含0 <= x < width
元素,其中元素(x,y)链接到以下内容:
尝试将(x1,y1)与(x2,y2)相关联时,请确保0 <= y < height
和{{1}}。
您的数组在每两行(row [0],row [2]等)的末尾包含一个未使用的元素。此外,您可能希望为它们提供某种标签或索引,以便您可以将播放器引用给它们。你可以将它们标记为(x,y)对,或者用它们的索引数字标记,这完全取决于你。 (x,y)对非常容易,因为它会直接映射到它们存储的数组。