如果设置为随机,变量不会重新启动

Ann*_*nna 5 processing

使用的语言称为“Processo”,是我学校使用的一种较弱且更简单的 Processo 版本,用于以可视化方式介绍 Java 语法。我仍在编写代码,但总体目的类似于十字路口,但当玩家避开它们时,汽车会沿着屏幕移动。玩家只能水平移动,敌人只能垂直移动。使用 if 语句,一旦敌方汽车到达用户可以看到的屏幕下方,敌方汽车的 y 变量将重置为屏幕上方。我希望汽车的速度相同,因此为了确保它们不会同时掉落,每次敌方汽车重置时,敌方汽车的 y 坐标都会设置为屏幕上方的随机点。

这就是问题开始的地方,如果 y 坐标设置为一个设定值,例如 int i = 10;然后敌方汽车将按需要重置。但是如果汽车的 y 坐标设置为随机,例如 int i = random(-400, -100); 那么汽车将不会复位并继续向下移动。如何使汽车重置或找到新的解决方案以确保汽车以相同的速度但不同时移动?

size (300, 400);

double baddie1 = -100;
double baddie2 = -300;
double baddie3 = -600;

void player() {
    noStroke();
    fill(rgb(0, 255, 0));
    rect(mouseX-50, 320, 80, 80);
}

void enemy1() {
    fill(rgb(255, 0, 0));
    rect(10, baddie1, 80, 80);
}

void enemy2() {
    rect(110, baddie2, 80, 80);
}

void enemy3() {
    rect(210, baddie3, 80, 80);
}

void draw() {
    background(rgb(226, 225, 225));
    if(baddie1 == 400) {
        baddie1 = random(-600, -100);
    } else {
        baddie1 += 5;
    }
    if(baddie2 == 400) {
        baddie2 = random(-600, -100);
    } else {
        baddie2 += 5;
    }
    if(baddie3 == 400) {
        baddie3 = random(-600, -100);
    } else {
        baddie3 += 5;
    }
    player();
    enemy1();
    enemy2();
    enemy3();

}
Run Code Online (Sandbox Code Playgroud)

这是上述版本的处理兼容版本:

size (300, 400);

double baddie1 = -100;
double baddie2 = -300;
double baddie3 = -600;

void player() {
    noStroke();
    fill(rgb(0, 255, 0));
    rect(mouseX-50, 320, 80, 80);
}

void enemy1() {
    fill(rgb(255, 0, 0));
    rect(10, baddie1, 80, 80);
}

void enemy2() {
    rect(110, baddie2, 80, 80);
}

void enemy3() {
    rect(210, baddie3, 80, 80);
}

void draw() {
    background(rgb(226, 225, 225));
    if(baddie1 == 400) {
        baddie1 = random(-600, -100);
    } else {
        baddie1 += 5;
    }
    if(baddie2 == 400) {
        baddie2 = random(-600, -100);
    } else {
        baddie2 += 5;
    }
    if(baddie3 == 400) {
        baddie3 = random(-600, -100);
    } else {
        baddie3 += 5;
    }
    player();
    enemy1();
    enemy2();
    enemy3();

}
Run Code Online (Sandbox Code Playgroud)

laa*_*lot 3

这个问题比看起来简单得多:当你检查坏人的 y 坐标以了解它们是否足够远以重置它们时,发出的随机数并不总是 5 的倍数,并且你检查 ,所以(baddie1 == 400)如果这个数字从 397 增加到 402,您将永远不会再看到这个数字。

您可以使用>=运算符来解决此问题:

if (baddie1 >= 400) {
  baddie1 = random(-600, -100);
} else {
  baddie1 += 5;
}
if (baddie2 >= 400) {
  baddie2 = random(-600, -100);
} else {
  baddie2 += 5;
}
if (baddie3 >= 400) {
  baddie3 = random(-600, -100);
} else {
  baddie3 += 5;
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。玩得开心!