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

标签 ios algorithm random

我正在生成一种您可以在 2D 屏幕中飞过的隧道。我希望墙壁从左到右随机平滑移动。现在我只是以“尖峰”结束。

我希望它看起来像这样

而不是这个

我正在为看起来像这样的墙使用代码,左右各四十次。

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);

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

最佳答案

您正在寻找的是所谓的“相关”随机数生成。

生成此类数字的最流行方法之一称为 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;
    //...
}

关于ios - 随机生成的隧道墙,不会从一个墙跳到另一个墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23301197/

相关文章:

java - 在 Java 中生成 UUID 字符串的有效方法(不带破折号的 UUID.randomUUID().toString())

ios - NSAutolayoutConstraint - 在乘数之前应用常量

algorithm - 这个游戏的名字是什么?

algorithm - 比较 2 个一维信号

algorithm - 顶点着色/分配以最小化 "color crossings"的数量

java - java 猜数字游戏

c - 为数组中的每个元素选择数组中的随机元素

ios - 如何添加警报 View

IOS TableViewCell exc_bad_access 自动释放错误

ios - 列出可用的输出音频目标 AVAudioSession