first commit
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
import java.awt.*;
|
||||
import java.awt.geom.*;
|
||||
|
||||
/**
|
||||
* Class BouncingBall - a graphical ball that observes the effect of gravity. The ball
|
||||
* has the ability to move. Details of movement are determined by the ball itself. It
|
||||
* will fall downwards, accelerating with time due to the effect of gravity, and bounce
|
||||
* upward again when hitting the ground.
|
||||
*
|
||||
* This movement can be initiated by repeated calls to the "move" method.
|
||||
*
|
||||
* @author Michael Kölling (mik)
|
||||
* @author David J. Barnes
|
||||
* @author Bruce Quig
|
||||
*
|
||||
* @version 2016.02.29
|
||||
*/
|
||||
|
||||
public class BouncingBall
|
||||
{
|
||||
private static final int GRAVITY = 3; // effect of gravity
|
||||
|
||||
private int ballDegradation = 2;
|
||||
private Ellipse2D.Double circle;
|
||||
private Color color;
|
||||
private int diameter;
|
||||
private int xPosition;
|
||||
private int yPosition;
|
||||
private final int groundPosition; // y position of ground
|
||||
private Canvas canvas;
|
||||
private int ySpeed = 1; // initial downward speed
|
||||
|
||||
/**
|
||||
* Constructor for objects of class BouncingBall
|
||||
*
|
||||
* @param xPos the horizontal coordinate of the ball
|
||||
* @param yPos the vertical coordinate of the ball
|
||||
* @param ballDiameter the diameter (in pixels) of the ball
|
||||
* @param ballColor the color of the ball
|
||||
* @param groundPos the position of the ground (where the wall will bounce)
|
||||
* @param drawingCanvas the canvas to draw this ball on
|
||||
*/
|
||||
public BouncingBall(int xPos, int yPos, int ballDiameter, Color ballColor,
|
||||
int groundPos, Canvas drawingCanvas)
|
||||
{
|
||||
xPosition = xPos;
|
||||
yPosition = yPos;
|
||||
color = ballColor;
|
||||
diameter = ballDiameter;
|
||||
groundPosition = groundPos;
|
||||
canvas = drawingCanvas;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw this ball at its current position onto the canvas.
|
||||
**/
|
||||
public void draw()
|
||||
{
|
||||
canvas.setForegroundColor(color);
|
||||
canvas.fillCircle(xPosition, yPosition, diameter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Erase this ball at its current position.
|
||||
**/
|
||||
public void erase()
|
||||
{
|
||||
canvas.eraseCircle(xPosition, yPosition, diameter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move this ball according to its position and speed and redraw.
|
||||
**/
|
||||
public void move()
|
||||
{
|
||||
// remove from canvas at the current position
|
||||
erase();
|
||||
|
||||
// compute new position
|
||||
ySpeed += GRAVITY;
|
||||
yPosition += ySpeed;
|
||||
xPosition +=2;
|
||||
|
||||
// check if it has hit the ground
|
||||
if (yPosition >= (groundPosition - diameter) && ySpeed > 0) {
|
||||
yPosition = (int)(groundPosition - diameter);
|
||||
ySpeed = -ySpeed + ballDegradation;
|
||||
}
|
||||
|
||||
// draw again at new position
|
||||
draw();
|
||||
}
|
||||
|
||||
/**
|
||||
* return the horizontal position of this ball
|
||||
*/
|
||||
public int getXPosition()
|
||||
{
|
||||
return xPosition;
|
||||
}
|
||||
|
||||
/**
|
||||
* return the vertical position of this ball
|
||||
*/
|
||||
public int getYPosition()
|
||||
{
|
||||
return yPosition;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user