/* * File: BouncingBall.java * ----------------------- * This file implements a simple bouncing ball using the run method * to drive the animation. */ import acm.program.*; public class BouncingBall extends GraphicsProgram { /** Initialize the ball and its velocity components */ public void init() { ball = new GBall(BALL_RADIUS); add(ball, getWidth() / 2, getHeight() / 2); dx = 2; dy = 1; } /** Run forever bouncing the ball */ public void run() { waitForClick(); while (true) { advanceOneTimeStep(); pause(PAUSE_TIME); } } /* Check for bounces and advance the ball */ private void advanceOneTimeStep() { double bx = ball.getX(); double by = ball.getY(); if (bx < BALL_RADIUS || bx > getWidth() - BALL_RADIUS) dx = -dx; if (by < BALL_RADIUS || by > getHeight() - BALL_RADIUS) dy = -dy; ball.move(dx, dy); } /* Private constants */ private static final double BALL_RADIUS = 10; private static final int PAUSE_TIME = 20; /* Private instance variables */ private GBall ball; /* The ball object */ private double dx; /* Velocity delta in the x direction */ private double dy; /* Velocity delta in the y direction */ /* Standard Java entry point */ /* This method can be eliminated in most Java environments */ public static void main(String[] args) { new BouncingBall().start(args); } }