college/ss2010/gdi2/java/libs/acm/demo/RunnableGBall.java
2013-12-19 19:05:28 +01:00

55 lines
1.2 KiB
Java

/*
* File: RunnableGBall.java
* ------------------------
* This file defines an extension to the GBall class that is
* designed to run as a separate thread of control.
*/
public class RunnableGBall extends GBall implements Runnable {
/** Creates a new ball with radius r centered at the origin */
public RunnableGBall(double r) {
super(r);
}
/** Sets the size of the enclosure */
public void setEnclosureSize(double width, double height) {
enclosureWidth = width;
enclosureHeight = height;
}
/** Sets the velocity of the ball */
public void setVelocity(double vx, double vy) {
dx = vx;
dy = vy;
}
/** Run forever bouncing the ball */
public void run() {
while (true) {
advanceOneTimeStep();
pause(PAUSE_TIME);
}
}
/** Check for bounces and advance the ball */
private void advanceOneTimeStep() {
double bx = getX();
double by = getY();
double r = getWidth() / 2;
if (bx < r || bx > enclosureWidth - r) dx = -dx;
if (by < r || by > enclosureHeight - r) dy = -dy;
move(dx, dy);
}
/* Private constants */
private static final int PAUSE_TIME = 20;
/* Private instance variables */
private double enclosureWidth;
private double enclosureHeight;
private double dx;
private double dy;
}