コンテンツにスキップ

ボールをランダムなタイミングで落とす小技

※randomの引数の-400は、状況に合わせて適切な値にしてください

1.利用シーン

ボールキャッチゲームやテトリスなど、上から落ちてくるゲームで、何も工夫しないといつも決まったタイミングで落ちてくることになります。ボールをランダムなタイミングで落としたい場合、y = random(400); とすることもできますが、これではボールが画面の中ほどから突然出現してしまうことになります。

タイマーやフレームカウントを使えばランダムなタイミングは実現できますが、もっと簡単に実現する方法があります。それが

ball_y = random(-400);

です。ボールは-400~0 の位置、すなわち画面上辺より上の見えないところから落ち始め、画面上辺に達するタイミングはランダムになります。(randomの引数はマイナスであれば-400でなくても構いません。状況に合わせて適切な値にしてください)

下記のプログラムを実際に動かして比較してみてください。

2.小技を使わない場合

以下の例では、分かりやすくするため複数のボールを落下させています。 最初、y[i]=random(400); としたため、ボールが画面の中ほどから出現してしまいます。また、下に落ちたボールはその直後に上から落ちてくるので、タイミングが予測できてしまいます。

float[] ball_y = new float[3];
void setup() {
size(600, 400);
for (int i = 0; i < 3; i++) {
ball_y[i] = random(400);
}
}
void draw() {
background(200);
fill(255, 255, 0);
noStroke();
for (int i = 0; i < 3; i++) {
ball_y[i] += 5;
if (ball_y[i] > 400) {
ball_y[i] = 0;
}
ellipse(i*200+100, ball_y[i], 20, 20);
}
}

3.小技を使った場合

最初、およびボールが下に落ちた時に、 ball_y[i] = random(-400) とすることで、ボールはランダムなタイミングで画面上辺から出現します。randomの引数を調整することで、タイミングを調整できます。

float[] ball_y = new float[3];
void setup() {
size(600, 400);
for (int i = 0; i < 3; i++) {
ball_y[i] = random(-400);
}
}
void draw() {
background(200);
fill(255, 255, 0);
noStroke();
for (int i = 0; i < 3; i++) {
ball_y[i] += 5;
if (ball_y[i] > 400) {
ball_y[i] = random(-400);
}
ellipse(i*200+100, ball_y[i], 20, 20);
}
}