コンテンツにスキップ

敵の動きを遅くする小技(その2)

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

1.利用シーン

パックマンや横スクロールゲームなど、敵が上下左右の4方向にランダムに動くゲームの場合、敵の動く方向を下記のようにrandomで決めて敵を動かすと、敵の動きが速すぎてしまう場合があります。

teki_houkou = int(random(4))

その場合、タイマーやフレームカウント(frameCount )を使って敵の動きを遅らせることもできますが、もっと簡単に速さを調整する方法があります。それが

teki_houkou = int(random(100));

です。(randomの引数は4より大きければ100でなくても構いません。状況に合わせて適切な値にしてください)

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

2.小技を使わない場合

敵はものすごく速く動いてしまいます。

float teki_x=300;
float teki_y=200;
int teki_houkou;
void setup() {
size(600, 400);
}
void draw() {
background(0);
teki_houkou = int(random(4));
if (teki_houkou == 0) {
teki_x += 40;
} else if (teki_houkou == 1) {
teki_x -= 40;
} else if (teki_houkou == 2) {
teki_y += 40;
} else if (teki_houkou == 3) {
teki_y -= 40;
}
rect(teki_x, teki_y, 40, 40);
}

3.小技を使った場合

下記の例ではteki_houkouはrandomにより0~99の値を取りますが、4~99は敵の動きにはならなず(if文に引っかからずに無視される)、結局敵は4/100の確率で動くことになります。randomの引数を調整することで、動く速さを調整できます。

float teki_x=300;
float teki_y=200;
int teki_houkou;
void setup() {
size(600, 400);
}
void draw() {
background(0);
teki_houkou = int(random(100));
if (teki_houkou == 0) {
teki_x += 40;
} else if (teki_houkou == 1) {
teki_x -= 40;
} else if (teki_houkou == 2) {
teki_y += 40;
} else if (teki_houkou == 3) {
teki_y -= 40;
}
rect(teki_x, teki_y, 40, 40);
}

※この小技は、敵が画面上を動く時に使えます。敵が動かない場合は、frameCount を使った方法の方が便利でしょう。frameCount を使った小技は、敵の動きを遅くする小技(その1) を参照してください。