Computer Science 120
Introduction to Programming

Spring 2011, Siena College

FallingBalls Demo

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



FallingBalls BlueJ Project

Click here to download a BlueJ project for FallingBalls.


FallingBalls Source Code

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


FallingBall.java

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

/*
 * Example FallingBalls
 * 
 * A simple active object that controls a ball that falls down the
 * canvas
 *
 * Jim Teresco, Siena College, CSIS 120, Spring 2011
 *
 * $Id: FallingBall.java 1536 2011-02-14 15:57:51Z terescoj $
 */

public class FallingBall extends ActiveObject {

    // size and speed of falling balls
    private static final int BALLSIZE = 30;
    private static final double Y_SPEED = 8;
    private static final int DELAY_TIME = 33;

    // the ball controlled by this instance
    private FilledOval ball;

    // how far to fall before stopping and disappearing?
    private double yMax;

    // Draw a ball and start it falling.
    public FallingBall(Location start, DrawingCanvas aCanvas) {

        // draw the ball at its initial position
        ball = new FilledOval(start.getX() - BALLSIZE/2,
            start.getY() - BALLSIZE/2,
            BALLSIZE, BALLSIZE, aCanvas);

        // ask the canvas how big it is so we know when to stop
        yMax = aCanvas.getHeight();

        // activate!
        start();
    }

    // move the ball repeatedly until it falls off screen
    public void run() {
        while (ball.getY() <= yMax) {
            ball.move(0, Y_SPEED);
            pause(DELAY_TIME);
        }
        ball.removeFromCanvas();
    }
}

FallingBalls.java

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

/*
 * Example FallingBalls: create an active object representing a ball
 * on each mouse click
 *
 * Jim Teresco, Siena College, CSIS 120, Spring 2011
 *
 * $Id: FallingBalls.java 1536 2011-02-14 15:57:51Z terescoj $
 */

public class FallingBalls extends WindowController {

    // the work happens here: create a FallingBall centered
    // at the mouse position each time someone clicks
    public void onMouseClick(Location point) {
        
        new FallingBall(point, canvas);
    }
}