0

私は C# と XNA で文明ゲームに取り組んでいます。私はタイルを生成するために、ループが取り込まれた 2 次元の整数配列を使用します。大量の調査を行いましたが、地形のような地球を生成する方法を見つけることができませんでした。誰かがこれを行う方法を説明できますか、少なくともそれを実行できるコードを教えてください。ありがとうございました。

4

1 に答える 1

8

これに似たアルゴリズムを使用して、地形を作成します。基本的に、それはいくつかの乱数を生成し、正弦波を使用して丘を生成します。それらを組み合わせると、素晴らしい丘陵の風景が得られます。3回以上のパスが必要な場合は、ループと値の配列を追加できることに注意してください。

private void GenerateTerrain()
    {
        terrainContour = new int[Width*Height];

        //Make Random Numbers
        double rand1 = randomizer.NextDouble() + 1;
        double rand2 = randomizer.NextDouble() + 2;
        double rand3 = randomizer.NextDouble() + 3;

        //Variables, Play with these for unique results!
        float peakheight = 20
        float flatness = 50 
        int offset = 30;


        //Generate basic terrain sine
        for (int x = 0; x < Width; x++)
        {

            double height = peakheight / rand1 * Math.Sin((float)x / flatness * rand1 + rand1);
            height += peakheight / rand2 * Math.Sin((float)x / flatness * rand2 + rand2);
            height += peakheight / rand3 * Math.Sin((float)x / flatness * rand3 + rand3);

            height += offset;

            terrainContour[x] = (int)height;
        }
    }

次に、高さマップを埋めるには、値をループして、しきい値を超えているかどうかを確認します。

for (int x = 0; x < Width; x++)
{
   for (int y = 0; y < Height; y++)
   {

       if (y > terrainContour[x])
           tiles[x, y] = Solid Tile
       else
           tiles[x, y] = Blank Tile
   }
}

それに追加できるものはもっとたくさんあります。より良い地形のために、ランダム性を追加し、いくつかのタイルを上下に1つインデントしました。さらに正弦波を追加すると、より現実的になります。

2Dパーリンノイズアルゴリズムを使用し、特定の高さを選択して洞窟やより高度な地形を作成してみてください。これが現在の作業ですが、ここでのこのコードは良いスタートです。

于 2012-03-20T22:51:57.957 に答える