This discussion is archived
6 Replies Latest reply: Nov 17, 2012 9:16 PM by Melissa13 RSS

Don't understand the code, about boucing ball

Melissa13 Newbie
Currently Being Moderated
this is a program intends to create a ball and let the ball bouncing until it reaches the right side of the console. It's in the stanford cs106a course.
I don't the part:
// 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);
does the ball actually reaches the bottom of the console, and them let the ball moves back upwards with the distance 2diff?

thanks a lot!

beside, I'm new in this forum, how to let the code show in the code mode? Cause it seems hard to read right now.




Here is the whole program:
/* 
 * 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); 
 
 
} 
 
} 
 /** 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); 
 
 
} 
 
} 
 
}
Edited by: 967521 on 2012-10-24 下午7:11

Edited by: 967521 on 2012-10-25 上午7:43

Edited by: Melissa13 on 2012-10-26 上午7:21

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points