Computer Science 120
Introduction to Programming

Spring 2012, Siena College

DrawBBalls Demo

A working demo of DrawBBalls will appear below. Click inside the applet to interact with it.



DrawBBalls BlueJ Project

Click here to download a BlueJ project for DrawBBalls.


DrawBBalls Source Code

The Java source code for DrawBBalls is below. Click on a file name to download it.


DrawBBalls.java

import objectdraw.*;
import java.awt.*;

/*
 * Example DrawBBalls: draw basketballs on mouse dragging
 *
 * Jim Teresco, Siena College, CSIS 120, Spring 2011
 *
 * $Id: DrawBBalls.java 1540 2011-02-15 17:50:40Z terescoj $
 */

public class DrawBBalls extends WindowController {

    public static final double BBALL_SIZE = 50;

    // draw a nice basketball centered at the mouse point on each drag
    public void onMouseDrag(Location point) {

        new NiceBBall(point.getX() - BBALL_SIZE/2,
            point.getY() - BBALL_SIZE/2,
            BBALL_SIZE, canvas);
    }

    // clean up when we re-enter the window  
    public void onMouseEnter(Location point) {

        canvas.clear();
    }
}

NiceBBall.java

import objectdraw.*;
import java.awt.Color;

/*
 * A class that implements a nice looking basketball.
 */
public class NiceBBall {

  // the color to draw the ball
  private static final Color BALL_ORANGE = new Color(250, 85, 10);

  // size and starting angles for cut arc in degrees
  private static final int CUTSIZE = 100;
  private static final int RIGHTCUTSTART = 90 + (180 - CUTSIZE) / 2;
  private static final int LEFTCUTSTART = 270 + (180 - CUTSIZE) / 2;

  // the orange part of the ball
  private FilledOval body;

  // the border of the ball
  private FramedOval border;

  // the two curves on the sides of the ball
  private FramedArc leftCut, rightCut;

  // the vertical and horizontal lines through the ball
  private Line vert, horiz;

  // to pick new random color for ball
  private RandomIntGenerator colorPicker = new RandomIntGenerator(0,255);

  /*
   * Create a new basketball.
   */
  public NiceBBall(double left, double top, double size, DrawingCanvas aCanvas) {

    // draw the circles that make it look like a ball
    body = new FilledOval(left, top, size, size, aCanvas);
    body.setColor(BALL_ORANGE);
    border = new FramedOval(left, top, size, size, aCanvas);

    // draw the lines and arcs that make it look like a basketball
    rightCut = new FramedArc(left + size * 2 / 3, top, size, size, RIGHTCUTSTART, CUTSIZE, aCanvas);
    leftCut = new FramedArc(left - size * 2 / 3, top, size, size, LEFTCUTSTART, CUTSIZE, aCanvas);
    vert = new Line(left + size / 2, top, left + size / 2, top + size, aCanvas);
    horiz = new Line(left, top + size / 2, left + size, top + size / 2, aCanvas);

  }

  /*
   * Move the ball by specified offsets.
   */
  public void move(double dx, double dy) {
    // move each part of the ball by the offsets provided
    body.move(dx, dy);
    border.move(dx, dy);
    vert.move(dx, dy);
    horiz.move(dx, dy);
    leftCut.move(dx, dy);
    rightCut.move(dx, dy);
  }

  /*
   * Check to see if the ball contains a specified location.
   */
  public boolean contains(Location point) {
    return body.contains(point);
  }

  /*
   * Move the ball to a specified position. 
   */
  public void moveTo(double x, double y) {
    // determine how far away (x,y) is
    double dx, dy;
    dx = x - body.getX();
    dy = y - body.getY();

    // move each part of the ball by the offset,
    //   using our own move method.
    this.move(dx, dy);
  }

  /*
   * Return the x coordinate of ball's corner.
   */
  public double getX() {
    return body.getX();
  }

  /*
   * Return the y coordinate of ball's corner.
   */
  public double getY() {
    return body.getY();
  }

  public void changeToRandomColor() {
    Color newBallColor = new Color(colorPicker.nextValue(),
        colorPicker.nextValue(), 
        colorPicker.nextValue());
    body.setColor(newBallColor);
  }
  
  public void backToNormalColor() {
      
    body.setColor(BALL_ORANGE);
  }
}