0% found this document useful (0 votes)
10 views2 pages

21 Bouncing Ball Example

This document contains the code for a program that graphically simulates a bouncing ball. It includes constants for the ball diameter, gravity, animation delay, and initial position. Methods are used to setup the ball graphic, move the ball by updating its velocities, and check for collisions with the floor to reverse the y-velocity and adjust position. The ball bounces until it reaches the right side of the screen.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views2 pages

21 Bouncing Ball Example

This document contains the code for a program that graphically simulates a bouncing ball. It includes constants for the ball diameter, gravity, animation delay, and initial position. Methods are used to setup the ball graphic, move the ball by updating its velocities, and check for collisions with the floor to reverse the y-velocity and adjust position. The ball bounces until it reaches the right side of the screen.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

Mehran Sahami Handout #21

CS 106A October 15, 2007


Bouncing Ball Example
Based on a handout by Patrick Young.

/*
* File: BouncingBall.java
* -----------------------
* This program graphically simulates a bouncing ball.
*/

import acm.program.*;
import acm.graphics.*;

public class BouncingBall extends GraphicsProgram {

/** Size (diameter) of the ball */


private static final int DIAM_BALL = 30;

/** Amount Y velocity is increased each cycle as a


* result of gravity */
private static final double GRAVITY = 3;

/** Animation delay or pause time between ball moves */


private static final int DELAY = 50;

/** Initial X and Y location of ball */


private static final double X_START = DIAM_BALL / 2;
private static final double Y_START = 100;

/** X Velocity */
private static final double X_VEL = 5;

/** Amount Y Velocity is reduced when it bounces */


private static final double BOUNCE_REDUCE = 0.9;

/** Starting X and Y Velocties */


private double xVel = X_VEL;
private double yVel = 0.0;

/* private instance variable */


private GOval ball;

public void run() {


setup();

// Simulation ends when ball goes off right hand


// end of screen
while (ball.getX() < getWidth()) {
moveBall();
checkForCollision();
pause(DELAY);
}
}
–2–

/** Create and place ball. */


private void setup() {
ball = new GOval(X_START, Y_START, DIAM_BALL, DIAM_BALL);
ball.setFilled(true);
add(ball);
}

/** Update and move ball */


private void moveBall() {
// increase yVelocity due to gravity on each cycle
yVel += GRAVITY;
ball.move(xVel,yVel);
}

/** Determine if collision with floor, update velocities


* and location as appropriate. */
private void checkForCollision() {
// determine if ball has dropped below the floor
if (ball.getY() > getHeight() - DIAM_BALL) {

// change ball's Y velocity to now bounce upwards


yVel = -yVel * BOUNCE_REDUCE;

// assume bounce will move ball an amount above the


// floor equal to the amount it would have dropped
// below the floor.
double diff = ball.getY() - (getHeight() - DIAM_BALL);
ball.move(0, -2 * diff);
}
}

You might also like