float x = 0; float y = 0; void setup() { size(800, 800); } void draw() { background(0); fill(255); rect(width/2, height/2, 300, 300); fill(255); if (width/2 < x & width/2 + 300 > x & height/2 < y & height/2 + 300 > y) { fill(255,0,0); } ellipse(x, y, 20, 20); y = y + 10; if (y > height) { y = 0; x = random(width); } }
さて、前回のコードはこんな感じでした。
このプログラムは、if文の中に
fill(255,0,0);
を入れる事によって、条件に合致する場合のみ、ifの前に実行されている
fill(255);
の効果を上書きする事によって色を変化させていました。
elseを使う
しかし、もし四角形の中でのみ、円の大きさを変化させたい、という場合には(変数を新たに用意する、という方法もありますが)、elseというifの対になっている構文を使うのが便利です。
float x = 0; float y = 0; void setup() { size(800, 800); } void draw() { background(0); fill(255); rect(width/2, height/2, 300, 300); fill(255); if (width/2 < x & width/2 + 300 > x & height/2 < y & height/2 + 300 > y) { fill(255,0,0); ellipse(x, y, 50, 50); } else { ellipse(x, y, 20, 20); } y = y + 10; if (y > height) { y = 0; x = random(width); } }
実装はこんな感じ。
elseは、もしif文の条件式に当てはまらなかった場合にはこちらを実行しなさい、という意味です。
なので、ifの後のブロックか、elseの後のブロックのどちらかが必ず実行されます。
さらに、elseの後にifで他の条件式を加える
else if()
という構文も存在します。
else ifはif文の後に複数付けることが出来、しかもどの条件にも当てはまらなかった場合には何も実行されない、という可能性も残しています。
例
float x = 0; float y = 0; void setup() { size(800, 800); } void draw() { background(0); fill(255); rect(width/2, height/2, 300, 300); fill(255); if (width/2 < x & width/2 + 300 > x & height/2 < y & height/2 + 300 > y) { fill(255, 0, 0); ellipse(x, y, 50, 50); } else if ( y < height/2 ) { ellipse(x, y, 5, 5); } else { ellipse(x, y, 20, 20); } y = y + 10; if (y > height) { y = 0; x = random(width); } }
この例では、画面の上半分に玉がある場合にはサイズを5に、半分以下なら20に、そして四角形の中ならば50にしています。
もし最後のelse{ }がなければ、玉が下半分に来た時に消えて(描画されなくなって)しまいます。
問題
最後のelse { }を、elseキーワードごと消して、ボールが下半分に来た時に消えてしまう事を確認せよ。
そして、消えてしまう理由について考えなさい。