예제 #1
0
    @Override
    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;

      // paint ball, paddle, and brick configuration
      g2.drawImage(background.getImage(), 0, 0, null);
      bconfig.paint(g2);
      paddle.paint(g2);
      ball.paint(g2);
      g2.setColor(Color.WHITE);
      g2.setFont(new Font("Serif", Font.PLAIN, 20));
      g2.drawString("Score: " + score, 15, 20);
      if (ball.getY() > 500) {
        g2.setColor(Color.WHITE);
        g2.setFont(new Font("Serif", Font.PLAIN, 30));
        g2.drawString("Game Over!", 200, 300);
        g2.drawString("Your final score was " + score, 150, 330);
        timer.stop();
      }
    }
예제 #2
0
  /**
   * Moves the paddle left by the movement offset field within the picture window's bounds avoiding
   * the given ball
   *
   * @param pict is the Picture object with the boundary to keep the paddle within
   * @param ball is a ball that causes the paddle to move back if it's in the way
   */
  public void moveLeft(JFrame pict, Ball ball) {
    this.x -= this.offset; // Move x left by the offset

    // Test to see if the paddle moved into the ball
    if (ball.distance(this.x, this.y) < ball.getRadius()
        || ball.distance(this.x, this.y + this.height / 2) < ball.getRadius()
        || ball.distance(this.x, this.y + this.height) < ball.getRadius())
      this.x += this.offset; // If so, move it out of the ball

    // Test to see if the boundary was in the way to the left
    if (this.x < 0) this.x = 0; // If so, set left of paddle to zero
  }
예제 #3
0
  /**
   * Moves the paddle up by the movement offset field within the picture window's bounds avoiding
   * the given ball
   *
   * @param pict is the Picture object with the boundary to keep the paddle within
   * @param ball is a ball that causes the paddle to move back if it's in the way
   */
  public void moveUp(JFrame pict, Ball ball) {
    this.y -= this.offset; // Move y up by the offset

    // Test to see if the paddle moved into the ball
    if (ball.distance(this.x, this.y) < ball.getRadius()
        || ball.distance(this.x + this.width / 2, this.y) < ball.getRadius()
        || ball.distance(this.x + this.width, this.y) < ball.getRadius())
      this.y += this.offset; // If so, move it out of the ball

    // Test to see if the boundary was in the way above
    if (this.y < 0) this.y = 0; // If so, set top of paddle to zero
  }
예제 #4
0
  /**
   * Moves the paddle right by the movement offset field within the picture window's bounds avoiding
   * the given ball
   *
   * @param pict is the Picture object with the boundary to keep the paddle within
   * @param ball is a ball that causes the paddle to move back if it's in the way
   */
  public void moveRight(JFrame pict, Ball ball) {
    this.x += this.offset; // Move x right by the offset

    // Test to see if the paddle moved into the ball
    if (ball.distance(this.x + this.width, this.y) < ball.getRadius()
        || ball.distance(this.x + this.width, this.y + this.height / 2) < ball.getRadius()
        || ball.distance(this.x + this.width, this.y + this.height) < ball.getRadius())
      this.x -= this.offset; // If so, move it out of the ball

    // Test to see if the boundary was in the way on the right
    if (this.x + this.width > pict.getWidth())
      this.x = pict.getWidth() - this.width; // If so, set right to right edge
  }
예제 #5
0
  /**
   * Moves the paddle down by the movement offset field within the picture window's bounds avoiding
   * the given ball
   *
   * @param pict is the Picture object with the boundary to keep the paddle within
   * @param ball is a ball that causes the paddle to move back if it's in the way
   */
  public void moveDown(JFrame pict, Ball ball) {
    this.y += this.offset; // Move y down by the offset

    // Test to see if the paddle moved into the ball
    if (ball.distance(this.x, this.y + this.height) < ball.getRadius()
        || ball.distance(this.x + this.width / 2, this.y + this.height) < ball.getRadius()
        || ball.distance(this.x + this.width, this.y + this.height) < ball.getRadius())
      this.y -= this.offset; // If so, move it out of the ball

    // Test to see if the boundary was in the way below
    if (this.y + this.height > pict.getHeight())
      this.y = pict.getHeight() - this.height; // If so, set bottom to picture bottom
  }
예제 #6
0
    public void checkForHit() {

      // change ball speed when ball hits paddle
      if (ball.getShape().intersects(paddle.getShape())) {
        int leftSide = paddle.getX();
        int middleLeft = paddle.getX() + (int) (paddle.getWidth() / 3);
        int middleRight = paddle.getX() + (int) (2 * paddle.getWidth() / 3);
        int rightSide = paddle.getX() + paddle.getWidth();

        if ((ball.getX() >= leftSide) && (ball.getX() < middleLeft)) {
          // change ball speed
          ball.setXspeed(-2);
          ball.setYspeed(-2);
        }
        if ((ball.getX() >= middleLeft) && (ball.getX() <= middleRight)) {
          // change ball speed
          ball.setYspeed(-2);
        }
        if ((ball.getX() > middleRight) && (ball.getX() <= rightSide)) {
          // change ball speed
          ball.setXspeed(2);
          ball.setYspeed(-2);
        }
      }

      // change ball speed when ball hits brick
      for (int i = 0; i < bconfig.getRows(); i++) {
        for (int j = 0; j < bconfig.getCols(); j++) {
          if (bconfig.exists(i, j)) {
            if (ball.getShape().intersects(bconfig.getBrick(i, j).getShape())) {
              Point ballLeft =
                  new Point(
                      (int) ball.getShape().getX(),
                      (int) (ball.getShape().getY() + ball.getShape().getHeight() / 2));
              Point ballRight =
                  new Point(
                      (int) (ball.getShape().getX() + ball.getShape().getWidth()),
                      (int) (ball.getShape().getY() + ball.getShape().getHeight() / 2));
              Point ballTop =
                  new Point(
                      (int) (ball.getShape().getX() + ball.getShape().getWidth() / 2),
                      (int) ball.getShape().getY());
              Point ballBottom =
                  new Point(
                      (int) (ball.getShape().getX() + ball.getShape().getWidth() / 2),
                      (int) (ball.getShape().getY() + ball.getShape().getHeight()));
              if (bconfig.getBrick(i, j).getShape().contains(ballLeft)) {
                // change ball speed
                ball.setXspeed(2);
                score++;
              } else if (bconfig.getBrick(i, j).getShape().contains(ballRight)) {
                // change ball speed
                ball.setXspeed(-2);
                score++;
              }
              if (bconfig.getBrick(i, j).getShape().contains(ballTop)) {
                // change ball speed
                ball.setYspeed(2);
                score++;
              } else if (bconfig.getBrick(i, j).getShape().contains(ballBottom)) {
                // change ball speed
                ball.setYspeed(-2);
                score++;
              }

              // remove brick
              bconfig.removeBrick(i, j);
            }
          }
        }
      }
    }
예제 #7
0
  /**
   * Determines if the given ball has collided with the paddle and returns true if it has and false
   * if it has not. If the ball has collided with the paddle the balls movement vectors are modified
   * so the ball will bounce back at the proper angle.
   *
   * @param ball is the ball to examine to see if it has collided with the paddle
   * @return Returns true if ball collides with paddle and if so updates vectors
   */
  public boolean collision(Ball ball) {
    // Temp variables for paddle corner coordinates;
    int pX1 = this.x;
    int pX2 = pX1 + this.width - 1;
    int pY1 = this.y;
    int pY2 = pY1 + this.height - 1;

    // Temp variables  for ball coordinates, movement vectors, and radius
    int bX = ball.getX();
    int bY = ball.getY();
    int vX = ball.getXVector();
    int vY = ball.getYVector();
    int bRad = ball.getRadius();

    // Testing for collisions with the paddle edges and the Ball
    if (bX < pX1 && bY >= pY1 && bY <= pY2 && vX > 0) // left edge
    {
      if (bX + bRad > pX1) // will collide with edge
      {
        ball.setX(pX1 - bRad);
        ball.setXVector(-Math.abs(vX)); // Change x direction
        return true;
      }
    } else if (bX > pX2 && bY >= pY1 && bY <= pY2 && vX < 0) // right edge
    {
      if (bX - bRad < pX2) // will collide with edge
      {
        ball.setX(pX2 + bRad);
        ball.setXVector(Math.abs(vX)); // Change x direction
        return true;
      }
    } else if (bY < pY1 && bX >= pX1 && bX <= pX2 && vY > 0) // top edge
    {
      if (bY + bRad > pY1) // will collide with edge
      {
        ball.setY(pY1 - bRad);
        ball.setYVector(-Math.abs(vY)); // Change y direction
        return true;
      }
    } else if (bY > pY2 && bX >= pX1 && bX <= pX2 && vY < 0) // bottom edge
    {
      if (bY - bRad < pY2) // will collide with edge
      {
        ball.setY(pY2 + bRad);
        ball.setYVector(Math.abs(vY)); // Change y direction
        return true;
      }
    } else // Otherwise test to see if the ball hits a corner of the paddle
    {
      if (ball.distance(pX1, pY1) <= bRad
          && ball.distance(pX1, pY1) <= ball.distance(pX2, pY1)) { // top-left corner collision
        if (Math.abs(pX1 - bX) >= Math.abs(pY1 - bY)) if (vX > 0) ball.setXVector(-vX);
        if (Math.abs(pX1 - bX) <= Math.abs(pY1 - bY)) if (vY > 0) ball.setYVector(-vY);
        return true;
      } else if (ball.distance(pX2, pY1) <= bRad) { // top-right corner collision
        if (Math.abs(pX2 - bX) >= Math.abs(pY1 - bY)) if (vX < 0) ball.setXVector(-vX);
        if (Math.abs(pX2 - bX) <= Math.abs(pY1 - bY)) if (vY > 0) ball.setYVector(-vY);
        return true;
      } else if (ball.distance(pX2, pY2) <= bRad
          && ball.distance(pX2, pY2) <= ball.distance(pX1, pY2)) { // bottom-right corner collision
        if (Math.abs(pX2 - bX) >= Math.abs(pY2 - bY)) if (vX < 0) ball.setXVector(-vX);
        if (Math.abs(pX2 - bX) <= Math.abs(pY2 - bY)) if (vY < 0) ball.setYVector(-vY);
        return true;
      } else if (ball.distance(pX1, pY2) <= bRad) { // bottom-left corner collision
        if (Math.abs(pX1 - bX) >= Math.abs(pY2 - bY)) if (vX > 0) ball.setXVector(-vX);
        if (Math.abs(pX1 - bX) <= Math.abs(pY2 - bY)) if (vY < 0) ball.setYVector(-vY);
        return true;
      }
    }
    return false;
  }