游戏制作者随机洞穴生成

时间:2013-11-20 15:55:11

标签: game-engine game-maker

我想在game maker 8.0中制作洞穴探险家游戏。 我做了一个块对象和一个发生器但是我被卡住了。这是我的生成器代码

var r;
r = random_range(0, 1);
repeat(room_width/16) {
    repeat(room_height/16) {
        if (r == 1) {
            instance_create(x, y, obj_block)
        }
        y += 16;
    }
    x += 16;
}

现在我总是得到一个空白框架

7 个答案:

答案 0 :(得分:1)

您需要使用irandom(1)才能获得整数。你也应该把它放在循环中,这样每次都会生成一个新的值。

答案 1 :(得分:1)

在第二个语句中,您将生成一个随机 real 值并将其存储在r中。您实际需要的是选择这两个值中的一个。我建议您使用函数choose(...)。这是纠正的声明:

r = choose(0,1);    //Choose either 0 or 1 and store it in r

另外,将上述语句移到内部循环中。 (因为你想决定是否要在每个地点的所述(x,y)位置放置一个块,对吗?)

此外,我建议您替换sprite_widthsprite_height而不是直接使用值16,这样您对精灵所做的任何更改都会相应地调整块的最终布局。

以下是带有更正的代码:

var r;
repeat(room_width/sprite_width) {
    repeat(room_height/sprite_height) {
        r = choose(0, 1);
        if (r == 1)
            instance_create(x, y, obj_block);
        y += sprite_height;
    }
    x += sprite_width;
}

那应该有用。我希望有所帮助!

答案 2 :(得分:0)

如果r == 1,您似乎只是在创建一个实例。你不应该每次都创建一个实例吗?

答案 3 :(得分:0)

  1. 变量赋值r = random_range(0, 1);在循环之外。因此在开始循环之前只执行一次。

  2. random_range(0, 1)返回0到1之间的随机实数(不是整数!)。但是你有if (r == 1) - 获得1的可能性非常小。

  3. 例如:

    repeat(room_width/16) {
        repeat(room_height/16) {
            if (irandom(1)) {
                instance_create(x, y, obj_block)
            }
            y += 16;
        }
        x += 16;
    }
    

答案 4 :(得分:0)

这是一个可能的,甚至更好的解决方案:

length = room_width/16;
height = room_height/16;

for(xx = 0; xx < length; xx+=1)
{
    for(yy = 0; yy < height; yy+=1)
    {
    if choose(0, 1) = 1 {
    instance_create(xx*16, yy*16, obj_block); }
    }
}

如果你想要随机洞穴,你应该删除这些块的随机部分, 不只是单身。

答案 5 :(得分:0)

对于奖励积分,您可以使用种子值进行随机洞穴生成。您还可以拥有一条路径随机生成,它将通过随机开口和从该路径随机生成的伪路径保证完成路径。然后你可以用其他随机件填充额外的空间。

但是对于你的代码,你必须在每次放置一个块时重新定义随机数,这就是为什么它们都是相同的。它应该在循环内部调用,并且应该是整数而不是小数值。

答案 6 :(得分:0)

问题在第一行,您需要在for循环中放入r =