Processing言語サンプル:画面内で複数個のボールが跳ね返る

複数個のボールを表示、ボールはそれぞれ異なる速度や色を持つ、ボールが画面端に到達したら跳ね返るサンプルプログラムです。動作イメージの動画の下にサンプルコードがあります。

Balls.pde

// 設定
int FRAME_RATE  =  60;   // 1秒間に何コマ動かすか
int BALL_NUM    =  50;   // ボールの数
int BALL_SIZE   =  40;   // ボールの直径
int BALL_ALPHA  = 150;   // ボールの不透明度(0~255),255が不透明
float SPEED_MIN = 0.1;   // ボールの速さ最小値
float SPEED_MAX = 3.0;   // ボールの速さ最大値

// ボールの配列
Ball[] balls = new Ball[BALL_NUM];

// セットアップ
void setup()
{
  // 画面サイズ
  size( 640, 480 );

  // 1秒間に何コマ動かすかを設定
  frameRate( FRAME_RATE );

  // ボールの個数分生成
  for( int i = 0; i < BALL_NUM; i++ ){
    balls[i] = new Ball();
  }
}

// 描画
void draw()
{
  // バックグラウンドを白で塗る
  background( 255, 255, 255 );

  // ボールの個数分描画を繰り返す
  for( int i = 0; i < BALL_NUM; i++ ){
    balls[i].draw();  // ボールを描画
  }
}

// ボールクラス
class Ball
{
  float x;       // 現在のX座標
  float y;       // 現在のY座標
  float dx;      // X方向のスピード
  float dy;      // Y方向のスピード
  int   R;       // ボールの色(赤成分)
  int   G;       // ボールの色(緑成分)
  int   B;       // ボールの色(青成分)

  // コンストラクタ
  public Ball()
  {
    // ボールの初期座標・スピード・色をランダムに決める
    this.x  = random( width );                 // 0 ~ 画面の幅
    this.y  = random( height );                // 0 ~ 画面の高さ
    this.dx = random( SPEED_MIN, SPEED_MAX );  // MIN ~ MAX の範囲で生成
    this.dy = random( SPEED_MIN, SPEED_MAX );  // MIN ~ MAX の範囲で生成
    this.R  = int( random( 256 ) );            // 0~255
    this.G  = int( random( 256 ) );            // 0~255
    this.B  = int( random( 256 ) );            // 0~255
  }

  // ボール描画
  public void draw()
  {
    // 移動後の座標算出
    x += dx;
    y += dy;

    // 描画
    noStroke();                             // 輪郭の線なし
    fill( R, G, B, BALL_ALPHA );            // 塗りつぶしの色
    ellipse( x, y, BALL_SIZE, BALL_SIZE );  // 円を描画

    // 中心点と画面端で衝突判定
    if( y <= 0 )      dy *= -1;   // 上
    if( y >= height ) dy *= -1;   // 下
    if( x <= 0 )      dx *= -1;   // 左
    if( x >= width )  dx *= -1;   // 右
  }
}

ご使用のPCのスペックに合わせてフレームレートやボールの数を調整してください。またプログラムを改造して実験することでプログラミングの勉強にもなるかと思います。ご活用ください。

タイトルとURLをコピーしました