0

我正在用 C# 和 XNA 开发文明游戏。我使用一个填充有循环的二维整数数组来生成图块,我已经进行了大量研究,但无法找到一种方法来生成类似地球的地形。任何人都可以解释如何做到这一点,或者至少给我可以做到这一点的代码,尽管我更喜欢和解释?谢谢你。

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 Perlin Noise算法,并选择特定的高度来制作洞穴和更高级的地形,因为这就是我现在所做的,但这里的代码是一个好的开始。

于 2012-03-20T22:51:57.957 回答