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

时间:2015-10-20 22:36:06

标签: java

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

2 个答案:

答案 0 :(得分:2)

塞尔达传说中的地图从前不久使用等距瓷砖视图。您需要做的第一件事是将等距瓷砖集加载到您的程序中,我相信您可以找到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 :(得分:0)

  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. 光滑边缘

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

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

      example

      我将地图的边框单元格放平,因此您可以通过平滑和体素输出看出我的意思。

    6. 地图生成器

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