class Ball {
   
   // Attributes
   float x, y;  // location
   float r;     // radius in pixels
   color c;     // color
   float dx, dy;  // speed
   Box b;       // the box the ball is in
   
   // Constructor(s)
   Ball(Box b) {
   this(random(width), random(height), 25, color(0), b);
   } // Ball()
   
   Ball(Box b, color c) {
   this(random(width), random(height), 25, c, b);
   } // Ball()
   
   Ball(float x, float y, float r, color c, Box b) {
   this.b = b;
   this.r = r;
   this.x = x;
   this.y = y;
   this.c = c;
   this.dx = random(-3, 3);
   this.dy = random(-3, 3);
   } // Ball()
   
   // Behaviors
   void display() {
   noStroke();
   fill(this.c);
   circle(this.x, this.y, 2*this.r);
   } // display()
   
   void move() {
   x = x + dx;
   y = y + dy;
   bounce();
   } // move()
   
   void bounce() {
   float bw = b.getWidth();
   float bh = b.getHeight();
   
   if (x > bw-r) {
   dx = -dx;
   x = bw-r;
   }
   
   if (x < r) {
   dx = -dx;
   x = r;
   }
   
   if (y > bh-r) {
   dy = -dy;
   y = bh-r;
   }
   if (y < r) {
   dy = -dy;
   y = r;
   }
   } // bounce()
   } // class Ball