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.
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);
}
}
}
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();
}
}