随机生成的隧道墙不会从一个跳到另一个

时间:2014-04-25 19:13:00

标签: ios algorithm random

我在2D屏幕中生成一种可以飞过的隧道。我想让墙壁随意地从左向右平滑移动。现在我最终得到了" spikes"。

我希望它看起来像这样

而不是

我使用代码看起来像是这样的墙,每个左右四十次。

if (Left1.center.y > 568) {
    RandomPosition = arc4random() %55;
    Left1.center = CGPointMake(RandomPosition, 0);
    RandomPosition = RandomPosition + 265;
    Right1.center = CGPointMake(RandomPosition, 0);
}

然后这个

RandomPosition = arc4random() %55;
Left1.center = CGPointMake(RandomPosition, 0);
RandomPosition = RandomPosition + 265;
Right1.center = CGPointMake(RandomPosition, 0);

但它并没有按照我想要的方式移动墙壁。

1 个答案:

答案 0 :(得分:3)

您正在寻找的内容被称为"相关"随机数生成。

产生此类数字的最常用方法之一称为Perlin noise,这可能过于复杂,无法满足您的需求。

在你的情况下最简单的做法是跟踪最后一个墙的位置,并从中生成一个随机的偏移,而不是用于数值生成器的数值生成器。壁。这称为"random" or "drunken" walk

为了保持隧道宽度不变,随机选择左墙的终点,然后将右墙的末端放置正确的距离。

CGFloat leftWallX = /* starting value */;
for( int i = 0; i < NUM_WALLS; i++ ){
    // Generate a number from -MAX_OFFSET to MAX_OFFSET
    CGFloat offset = (CGFloat)arc4random_uniform(2*MAX_OFFSET) - MAX_OFFSET;
    leftWallX += offset;
    rightWallX = leftWallX + tunnelWidth;
    //...
}