【问题标题】:How to procedurlly generate a Zelda like make in javajava - 如何在Java中程序生成类似make的Zelda
【发布时间】:2016-01-19 18:47:13
【问题描述】:

如何在 Java 中制作程序生成的地图? 游戏本身就像塞尔达是程序生成的......帮助?

【问题讨论】:

  • 你为什么把java这个标签放在这个问题里?
  • 因为我想在java中做这个

标签: java


【解决方案1】:

不久前的塞尔达传说地图使用等距平铺视图。您需要做的第一件事是将等距瓷砖集加载到您的程序中,我相信您可以找到 Zelda 瓷砖集。然后,您需要决定您希望地图如何以程序方式生成。会有海洋、不同的生物群落、建筑吗?在制作生成地图的方程式时,所有这些都需要考虑在内。每个图块都需要存储在某个地方,所以我会制作一个二维数组来打包所有图块值。然后使用嵌套的 for 循环来渲染图块。代码看起来像这样

int[][] world = new int[50][50];

for( int i = 0; i < 50; i++ ){
    for( int b = 0; b < 50; b++ ){
        int tile = world[i][b];
        render(tile, i, b);
        //use i and b to position the tile on your world

生成哪些瓷砖去哪里有点棘手,然后在创建瓷砖后渲染它们。上面只制作了一个空矩阵。我会再次使用一个 for 循环,用代表瓷砖的不同 int id 值来填充你喜欢的世界。然而,这将是完全随机的,所以你需要一些方法来解决你的疯狂。我会在生成时测试周围的瓷砖,并给周围的瓷砖更高的生成概率,这样地形就会更加平滑。如果你想为你玩的每一个游戏提供相同的世界,你可以只为你的矩阵提供常量值,而不是生成它们。我不打算编写一个完整的等距视图引擎,但我希望其中一些概念可以帮助你。

【讨论】:

    【解决方案2】:
    1. 等距引擎

      首先你需要有功能的等距引擎。六边形网格有点棘手(特别是如果你是新手)我建议你从方形网格开始。这意味着您需要能够加载/保存您的世界地图。并且粗略地在某处可视化它。稍后您可以添加平移编辑等,但现在这并不重要。例如看这个:

      你可以在 C++ 中找到我的非常简单的等距引擎的早期版本。

    2. 地形生成器

      您需要将地图的生成分成几个单独的步骤。

      1. 高度图生成器

        创建伪随机 2D 高度图(与等轴测图具有相同的 x,y 分辨率),稍后您将转换为等轴测图。我建议你使用Diamond-square algorithm。也可以看看:

        在哪里可以找到我的 C++ 实现。

      2. 将高度图转换为等距地形图

        只需将高度图的Z 范围重新调整为等轴测图支持的最大高度。然后清除您的等轴测图。最后,所有单元格cell(x,y,0)...cell(x,y,height(x,y)) 填充地形立方体。这将产生一个伪随机贴图,但只对立方体(锐利的体素边缘)进行。所以这需要进一步过滤。

      3. 过滤掉小孔

        这取决于您的图块支持哪些形状。如果你不能用它们平滑小孔的边缘,那么在应用平滑之前用立方体填充它们。

      4. 平滑边缘

        找到地形的特定坡度并用边缘瓷砖填充它。

      这里以这种方式生成的部分平滑伪随机地形的示例:

      我没有对地图的边界单元进行平滑处理,所以你明白我所说的平滑和体素化输出是什么意思。

    3. 地图生成器

      现在,当您拥有地形时,您可以添加其他功能。就像将表面瓷砖更改为不同的材料,添加水,建筑物,道路,树木,草,......只需做一个循环,随机获得x,y位置和特征类型,然后将其设置在地形之上......更现实的是,您需要使用一些规则,例如水、沙、草、岩石、雪取决于高度,建筑物只能放置在平坦区域等。

    【讨论】:

      猜你喜欢
      • 2014-03-12
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多