7

私はこの記事を読みました:Cで六角形グリッドを生成/作成します。しかし、作者と回答者の両方がすでにそれを放棄しているように見えます。

√(hexagonSide - hexagonWidth * hexagonWidth):hexagonSideとhexagonWidthとは何ですか?<0になりませんか(平方根を計算できません)。

そして、六角形を長方形に入れることはできますか?次のようなグリッドを作成する必要があります。

出典:ウィキペディア

もう1つ、データを格納するために配列を配置し、1つのセルの隣にあるセルを取得するにはどうすればよいですか?

六角形について教えられたことがないので、何も知りませんが、簡単に新しいことを学ぶことができるので、説明や手がかりがあれば自分でやってもいいです。

4

3 に答える 3

9

データを表す 1 つの方法は、次のように考えることです。

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-

ダッシュは null の場所です。それらは配列内に存在しますが、六角形を表していません。ここで、六角形 m は六角形 c、g、h、q、r、w に接続されています。その表現に問題がなければ、null の場所を削除して、よりコンパクトにすることができます。

abcde
fghij
klmno
pqrst
uvwxy

六角形 m はまだ六角形 c、g、h、q、r、w につながっていますが、少し見づらくなっています。

更新 これを読んでください: http://www-cs-students.stanford.edu/~amitp/game-programming/grids/

于 2011-08-22T14:10:02.943 に答える
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);
    }
于 2011-08-22T08:35:42.613 に答える
1

https://code.google.com/p/jhexed/をご覧ください。例になると思います

于 2014-07-22T14:34:40.050 に答える