アクティブなスケッチでは1個の〇を動かした。今度は〇を2つにしてみよう。それぞれの位置と動く方向を覚えておく必要がある。1つ目の〇の位置と方向をx1, y1, dx1、2つ目のそれをx2, y2, dx2とすれば、次のようなスケッチが書ける。
float x1, y1, dx1, x2, y2, dx2; void setup(){ size(400,400); x1 = 0; y1 = height / 3; dx1 = 2; x2 = width; y2 = height * 2 / 3; dx2 = -2; } void draw(){ background(64); circle(x1, y1, 20); circle(x2, y2, 20); if( x1 < 0 || x1 > width ) dx1 = - dx1; if( x2 < 0 || x2 > width ) dx2 = - dx2; x1 = x1 + dx1; x2 = x2 + dx2; }
2個ならばまだよいが、これが10個になったら、やる気が失せてくる。そこで、配列を用いる。配列は、x[0], x[1], x[2]のように番号が付いた変数の組であり、これを繰り返しとともに用いることで簡潔にプログラムを書くことができる。
int n=3; float x[] = new float[n]; float y[] = new float[n]; float dx[] = new float[n]; void setup(){ size(400,400); for( int i=0; i<n; i++ ){ x[i] = width / n * i; y[i] = width / (n+1) * (i+1); dx[i] = 2; } } void draw(){ background(64); for( int i=0; i<n; i++ ){ circle(x[i], y[i], 20); if( x[i] < 0 || x[i] > width ) dx[i] = - dx[i]; x[i] = x[i] + dx[i]; } }
float x[] = new float[n];
でx[0], x[1], ..., x[n-1]の、n個の要素からなる配列が用意される。 setup()のfor(){ }の{ }内では、x[0], x[1], ..., x[i], ..., x[n-1]、y[0], y[1], ..., y[i], ..., y[n-1]、dx[0], dx[1], ..., dx[i], ..., dx[n-1]の最初の値が設定され、draw()ではこれらを用いて〇を描き、値を更新している。
【課題】 最後のプログラムでnの値を変えてみよう。setup()の中で、i番目の点の出発位置(x[i], y[i])を決めているが、どのような値になっているか。