/* PlayerBall class defines behaviours for the player-controlled ball child of Rectangle because that makes it easy to draw and check for collision In 2D GUI, basically everything is a rectangle even if it doesn't look like it! */ import java.awt.*; import java.awt.event.*; public class GenericSprite extends Rectangle{ public double yVelocity; public double xVelocity; public final double SPEED = 20; //movement speed of ball public final double speedCap = 7; //Speed cap of ball public static final int BALL_DIAMETER = 20; //size of ball public boolean rightPressed = false; public boolean leftPressed = false; public boolean upPressed= false; public boolean downPressed = false; public boolean isGrounded = false; //constructor creates ball at given location with given dimensions public GenericSprite(int x, int y, int height, int width){ super(x, y, height, width); } //called from GamePanel when any keyboard input is detected //updates the direction of the ball based on user input //if the keyboard input isn't any of the options (d, a, w, s), then nothing happens public void keyPressed(KeyEvent e){ if(e.getKeyChar() == 'd'){ rightPressed = true; move(); } if(e.getKeyChar() == 'a'){ leftPressed = true; move(); } if(e.getKeyChar() == 'w'){ upPressed = true; move(); } if(e.getKeyChar() == 's'){ downPressed = true; move(); } } //called from GamePanel when any key is released (no longer being pressed down) //Makes the ball stop moving in that direction public void keyReleased(KeyEvent e){ if(e.getKeyChar() == 'd'){ rightPressed = false; move(); } if(e.getKeyChar() == 'a'){ leftPressed = false; move(); } if(e.getKeyChar() == 'w'){ upPressed = false; move(); } if(e.getKeyChar() == 's'){ downPressed = false; move(); } } //called from GamePanel whenever a mouse click is detected //changes the current location of the ball to be wherever the mouse is located on the screen public void mousePressed(MouseEvent e){ //x = e.getX(); // y = e.getY(); } public void move(){ y = y + (int)yVelocity; x = x + (int)xVelocity; if(rightPressed==true){ xVelocity+=1; } if(leftPressed==true){ xVelocity-=1; } if(upPressed&isGrounded){ yVelocity = -10; } xVelocity*=0.9; yVelocity+=0.3; capSpeed(); } public void capSpeed(){ if(xVelocity>speedCap){ xVelocity = speedCap; } else if(xVelocity<-1*speedCap) { xVelocity = -1*speedCap; } } //called frequently from the GamePanel class //draws the current location of the ball to the screen public void draw(Graphics g){ g.setColor(Color.black); g.fillOval(x, y, BALL_DIAMETER, BALL_DIAMETER); } }