MORYLAB;

エンジニアの卵がソースコードやライフログを綴るブログ。

ラケットとボールで遊ぶ - Processing

画面内を跳ね返りながら進むボールをラケットで打ち返すプログラムを書いてみた。
実行結果はソースコードの下に。

int[] x = new int[4];    // ボールのX座標 
int[] y = new int[4];    // ボールのY座標 
int[] dx = {1, 1, -1, -1};    // 各ボールのX方向移動量 
int[] dy = {1, -1, -1, 1};    // 各ボールのY方向移動量 
int rx, ry;      //  ラケットの座標 
int rsize = 20;  //  ラケットのサイズ 
 
void setup() { 
  size(500, 500);
  // ボールの初期位置 
  for(int i = 0; i < 4; i++){ 
    x[i] = (int)random(width); 
    y[i] = (int)random(height); 
  } 
  // ラケットの初期位置 
  rx = width / 2; 
  ry = height - 50; 
} 
 
void draw(){ 
    background(0); 
    stroke(255); 
    fill(255); 
     
    // ラケット 
    line(rx-rsize/2, ry, rx+rsize/2, ry); 
    rx = mouseX; 
    if(rx>=width-rsize/2) rx = width-rsize/2; 
    if(rx<=rsize/2) rx = rsize/2;
    
    // ボール
    for(int i=0; i<4; i++){ 
      ellipse(x[i],  y[i],  3,  3);
      x[i] += dx[i];
      y[i] += dy[i];
      // 画面の枠からはみ出さないように
      if(x[i]<0 || x[i]>width) dx[i] *= -1; 
      if(y[i]<0 || y[i]>height) dy[i] *= -1; 
      // ラケットに当たったら跳ね返す
      if(y[i] == ry && x[i] >= rx-rsize/2 && x[i] <= rx+rsize) dy[i] *= -1; 
    } 
}