酔歩の応用問題として、雪がひらひらと舞う様子を表してみよう。雪が風にあおられて揺れる様子を乱数で表現する。酔歩との最大の違いとして、雪は必ず下に落ちるという点がある。そこで、画面の上下方向には酔歩ではなく、毎ステップ必ず下に進み、左右にはランダムに動くものとしよう。
まず、一個の雪が画面最上端の真ん中に出現し、毎時刻、下向きに2ずつ落ち、左右にはブラウン運動するプログラムを書いてみる。ウィンドウ下端に到達したら、再び画面最上端に出現。
int x,y; void setup(){ size(500,500); frameRate(10); x=int(random(500)); y=0; } void draw(){ x += int(random(2))*2-1; y += 2; if(y > 500){y=0;} background(0); rect(x,y,6,6); }
たくさんの雪を降らせてみよう。次のプログラムでは最初に200個の円をランダムな位置に置き、あとは上のプログラムと同じように進めている。色を雪らしくしてみた。
int x[]=new int[200]; int y[]=new int[200]; int i; void setup(){ size(500,500); frameRate(10); noStroke(); for(i=0;i<200;++i){ x[i]=int(random(500)); y[i]=int(random(500)); } } void draw(){ for(i=0;i<200;++i){ x[i] += int(random(2))*2-1; y[i] += 2; if(y[i] > 500){y[i]=0;} } background(100,100,200); for(i=0;i<200;++i){ ellipse(x[i],y[i],10,10); } }
もっと雪らしくするには、円の大きさをばらつかせたり、風の効果をとりいれたりするとよいだろう。風の効果はたとえば、左右に等確率で動くのではなく、いずれか一方により動きやすくすればよさそうだ。工夫して、雪らしくせよ