我读过这篇文章:generating/creating hexagon grid in C。但看起来作者和回答者都已经放弃了它。
√(hexagonSide - hexagonWidth * hexagonWidth)
:什么是hexagonSide和hexagonWidth?是不是会< 0(因此无法计算平方根)。
而且,我可以将六边形放入矩形吗?我需要创建一个这样的网格:
还有一件事,我如何安排我的数组存储数据,以及获取哪些单元格紧挨着一个单元格?
我从来没有被教过六角形,所以我对此一无所知,但我可以很容易地学到新东西,所以如果你能解释或给我一些线索,我可以自己做。
答案 0 :(得分:9)
表示数据的一种方法是将其视为:
a-b-c-d-e-
-f-g-h-i-j
k-l-m-n-o-
-p-q-r-s-t
u-v-w-x-y-
破折号为空位置 - 它们存在于数组中,但不代表任何六边形。这里,六边形m连接到六边形c,g,h,q,r,w。一旦您对该表示没有问题,您可以通过删除空位置使其更紧凑:
abcde
fghij
klmno
pqrst
uvwxy
Hexagon m仍然连接到六边形c,g,h,q,r,w,它只是有点难以看到。
更新请阅读:http://www-cs-students.stanford.edu/~amitp/game-programming/grids/
答案 1 :(得分:4)
这是我绘制六边形的方式:
public Hexagon(float pX, float pY, float pSize) {
super(pX, pY, pSize, pSize);
// setColor(1, 0, 0);
setAlpha(0);
float x1, x2, y1, y2;
float lineWidth = 3;
x1 = 0; y1 = pSize / 2;
x2 = pSize / 4; y2 = (pSize * ((2 - (float)Math.sqrt(3)) / 4)); // Done
Line line = new Line(x1, y1, x2, y2);
line.setLineWidth(lineWidth);
attachChild(line);
x1 = x2; y1 = y2;
x2 = pSize * .75f; // Done
line = new Line(x1, y1, x2, y2);
line.setLineWidth(lineWidth);
attachChild(line);
x1 = x2; y1 = y2;
x2 = pSize; y2 = pSize / 2; // Done
line = new Line(x1, y1, x2, y2);
line.setLineWidth(lineWidth);
attachChild(line);
x1 = x2; y1 = y2;
x2 = pSize * .75f; y2 = pSize - (pSize * ((2 - (float)Math.sqrt(3)) / 4)); // Done
line = new Line(x1, y1, x2, y2);
line.setLineWidth(lineWidth);
attachChild(line);
x1 = x2; y1 = y2;
x2 = pSize / 4; // Done
line = new Line(x1, y1, x2, y2);
line.setLineWidth(lineWidth);
attachChild(line);
x1 = x2; y1 = y2;
x2 = 0; y2 = pSize / 2; // Done
line = new Line(x1, y1, x2, y2);
line.setLineWidth(lineWidth);
attachChild(line);
touchableArea = new Rectangle(pSize / 4, pSize / 4, pSize * .75f, pSize * .75f);
touchableArea.setAlpha(0);
attachChild(touchableArea);
}
答案 2 :(得分:1)
你可以看一下https://code.google.com/p/jhexed/我想它可以是一个例子