6 Replies Latest reply: Nov 17, 2012 11:16 PM by Melissa13 RSS

    Don't understand the code, about boucing ball

    Melissa13
      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