Computer Science 252
Problem Solving with Java

Spring 2014, The College of Saint Rose

FallingBallUglyButtons Demo

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



FallingBallUglyButtons BlueJ Project

Click here to download a BlueJ project for FallingBallUglyButtons.


FallingBallUglyButtons Source Code

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


FallingBallUglyButtons.java

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

/*
 * Example FallingBallUglyButtons: the way NOT to make buttons
 *
 * Jim Teresco, The College of Saint Rose, Fall 2013
 *
 * $Id: FallingBallUglyButtons.java 2221 2013-10-22 02:48:35Z terescoj $
 */

public class FallingBallUglyButtons extends WindowController {

    private static final int SLOW_SPEED = 2;
    private static final int MEDIUM_SPEED = 5;
    private static final int FAST_SPEED = 10;

    // three difficulty buttons
    private FramedRect easy, medium, hard;

    // constants for the difficulty box sizes and left corners
    private final static int BUTTON_WIDTH = 100;
    private final static int BUTTON_HEIGHT = 50;
    private final static int BUTTON_LEFT_Y = 400;
    private final static int EASY_LEFT_X = 75;
    private final static int MEDIUM_LEFT_X = 200;
    private final static int HARD_LEFT_X = 325;

    // location of text box and indent distances within box
    private final static int TEXT_BOX_X = 230;
    private final static int TEXT_BOX_Y = 450;
    private final static int TEXT_INDENT_LEFT = 30;
    private final static int TEXT_INDENT_DOWN = 10;

    public void begin()
    {
        setSize(500,500);
        
        new FilledRect(EASY_LEFT_X, BUTTON_LEFT_Y, BUTTON_WIDTH, BUTTON_HEIGHT,
            canvas).setColor(Color.lightGray);
        easy = new FramedRect(EASY_LEFT_X, BUTTON_LEFT_Y, BUTTON_WIDTH, BUTTON_HEIGHT,
            canvas);
        new Text("Slow", EASY_LEFT_X + TEXT_INDENT_LEFT,
            BUTTON_LEFT_Y + TEXT_INDENT_DOWN, canvas).setFontSize(24);

        new FilledRect(MEDIUM_LEFT_X, BUTTON_LEFT_Y, BUTTON_WIDTH, BUTTON_HEIGHT,
            canvas).setColor(Color.lightGray);
        medium = new FramedRect(MEDIUM_LEFT_X, BUTTON_LEFT_Y, BUTTON_WIDTH,
            BUTTON_HEIGHT, canvas);
        new Text("Med.", MEDIUM_LEFT_X + TEXT_INDENT_LEFT,
            BUTTON_LEFT_Y + TEXT_INDENT_DOWN, canvas).setFontSize(24);

        new FilledRect(HARD_LEFT_X, BUTTON_LEFT_Y, BUTTON_WIDTH, BUTTON_HEIGHT,
            canvas).setColor(Color.lightGray);
        hard = new FramedRect(HARD_LEFT_X, BUTTON_LEFT_Y, BUTTON_WIDTH, BUTTON_HEIGHT,
            canvas);
        new Text("Fast", HARD_LEFT_X + TEXT_INDENT_LEFT,
            BUTTON_LEFT_Y + TEXT_INDENT_DOWN, canvas).setFontSize(24);

    }

    public void onMousePress(Location point)
    {
        if (easy.contains(point)) {
            new Ball(new Location(200, 0), SLOW_SPEED, canvas);
        } else if (medium.contains(point)) {
            new Ball(new Location(200, 0), MEDIUM_SPEED, canvas);
        } else if (hard.contains(point)) {
            new Ball(new Location(200, 0), FAST_SPEED, canvas);
        }
    }

}

Ball.java

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

/*
/*
 * Example FallingBallUglyButtons: 
 * A Ball that will drop to the bottom of the canvas.
 *
 * Jim Teresco, The College of Saint Rose, Fall 2013
 *
 * $Id: Ball.java 2221 2013-10-22 02:48:35Z terescoj $
 */

public class Ball extends ActiveObject {
    private static final int BALL_SIZE = 30;
    private static final int PAUSE_TIME = 30;

    // The representation of the ball on the screen
    private FilledOval ball;

    // The bottom of the playing area
    private int bottomHeight;

    private double ySpeed;

    // Construct a new Ball with the given starting location and y velocity.
    public Ball(Location point, double speed, DrawingCanvas aCanvas) {
        ball = new FilledOval(point, BALL_SIZE, BALL_SIZE, aCanvas);
        ySpeed = speed;
        bottomHeight = aCanvas.getHeight();
        start();
    }

    public void run() {
        while (ball.getY() < bottomHeight) {
            ball.move(0, ySpeed);
            pause(PAUSE_TIME);
        }
        ball.removeFromCanvas();
    }
}