如何在java中程序生成类似make的Zelda

我如何在java中制作程序生成的地图? 游戏本身就像是Zelda是程序生成的……帮助?

塞尔达地图的传说从前不久使用等距瓷砖视图。 您需要做的第一件事是将等距瓷砖集加载到您的程序中,我相信您可以找到Zelda瓷砖集。 然后,您需要决定如何在程序上生成地图。 是否会有海洋,不同的生物群落,建设? 在制作用于生成地图的等式时,需要考虑所有这些因素。 每个磁贴需要存储在某个地方,所以我会创建一个二维数组来打包所有的tile值。然后使用嵌套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值表示tile。 然而,这将是完全随机的,所以你需要一些方法来解决你的疯狂问题。 我会在生成时测试周围的瓷砖,并为周围的瓷砖生成更高的概率,以便更加平滑地形。 如果你想为你玩的每个游戏都想要相同的世界,你可以为你的矩阵提供恒定的值而不是生成它们。 我不打算编写整个等轴测视图引擎,但我希望其中一些概念可以帮助你。

  1. 等距引擎

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

    • 提高交错列等距网格上的点击检测性能

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

  2. 地形发电机

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

    1. 高度图生成器

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

      • 菱形算法不起作用

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

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

      只需将高度贴图的Z范围重新缩放到等轴测图的最大支撑高度即可。 然后清除等轴测图。 最后,所有单元cell(x,y,0)...cell(x,y,height(x,y))填充了地形立方体。 这将产生伪随机图,但仅使用立方体(尖锐的体素边缘)。 所以这需要进一步过滤。

    3. 过滤掉小孔

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

    4. 光滑的边缘

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

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

    例

    我没有平滑地图边框细胞,所以你可以通过平滑和体素输出看到我的意思。

  3. 地图生成器

    现在,当您拥有地形时,您可以添加其他function。 比如将表面瓷砖更换为不同的材料,添加watter,建筑物,道路,树木,草地……只需做一个循环,你随机获取x,y位置和要素类型,然后将其设置在地形之上……更现实的是你需要使用一些规则,如watter,sand,grass,rocks,snow依赖于高度,建筑物只能放置在平坦区域等。