前のページの最後では、画面の端から出たものが反対側から出現するように見せるために%
を使う方法を紹介した。しかし、たとえば画面の端まできたら跳ね返るようにしたいときはどうすればいいだろうか。さまざまな場合ごとに違う命令を使っていたのではきりがないので、ここでは一般的な条件分岐というものを使う。このための命令は if
である。
たとえば、真横に進む円が画面の端に達したら反対向きに進むようにしよう。この場合、今は「右に進んでいる」状態なのか「左に進んでいる」状態なのかを知っている必要がある。そして、「円が右に進んでいる状態で、右端に達したら、円を左に進む状態に変える」とすればいいだろう。右に進むときは毎回x
に 1 を足し、左に進むときは 1 を引けばよい。以下のプログラムを実行してみる
int x,lr; void setup() { x = 20; lr = 1; noStroke(); } void draw() { int j; background(0); x += lr; ellipse(x,50,30,30); if (x == 85) { lr = -1;} else if (x == 14) { lr = 1;} }
これはちょっとトリッキーで、左右どちらに進んでいるかを示すための変数 lr
の値は右に進むときに 1 、左に進むときに -1 となるようにしている。そこで、x
に lr
を足せば、望みの方向に進むことになる。
方向転換に条件分岐の if
を使っている
Aの条件が成り立てば、Bを実行する
上のプログラムでは、x
が85のとき、lr = -1
を実行する。x
が85になるのは右向きに進んでいる場合に限られることに注意。
次の行にはif
ではなくelse if
と書かれている。実はこれはひとつ前のif
の続きになっていて、if
が成りたたないとき(だから、else)にその次のif
が成り立てば、という意味。つまり
Aの条件が成り立てば、Bを実行する
Aの条件が成り立たず、Cの条件が成り立てば、Dを実行する
ということになる。else if
はさらにいくつ続けてもよい。さらに、どの条件も成り立たない場合に実行したい命令があるなら、単にelse
のあとに命令を書けばよい。したがって、全部含む形では
if ( A ) { B } else if ( C ) { D } else if ( E ) { F } ... この後、else ifを好きなだけ書く else { G }
という構造になる
なお、条件が複合的なとき、たとえば「Aの条件かBの条件のどちらかが成り立つ」とか「Aの条件とBの条件の両方が成り立つ」は条件の書き方は以下のようになる
Aの条件かBの条件のどちらかまたは両方が成り立つ
Aの条件かBの条件の両方が成り立つ
注意しなくてはならないのは、AとBはそれぞれが条件として完結していなくてはならないことだ。たとえば、「xが0または1ならば」という条件を表現したければ
if ( x == 0 || x == 1 )
と書く。
円がウィンドウの縁に沿って移動する(つまり、動いた跡は四角形)プログラムを作れ。 左右の運動方向を指定する lr のほかに上下の運動を指定する変数を用意し、 それぞれ1,-1のほかに、その方向には動かない場合には0となることにすれば簡単。 だいたい、以下の絵のような感じ