/** getReady: Initialize the game */ private void getReady() { // Make up the bricks double brickPerWidth = (getWidth() - DIST_BRICK_WALL * 2 - DIST_BRICK_BRICK * (NUM_BRICK_ROW - 1)) / NUM_BRICK_ROW; double brickPerHeight = BRICK_HEIGHT; double x_start = DIST_BRICK_WALL; double y_start; for (int i = 1; i <= NUM_BRICK_ROW; i++) { for (int j = 1; j <= NUM_BRICK_COL; j++) { y_start = 50 + (j - 1) * (DIST_BRICK_BRICK + brickPerHeight); GRect tmpbrick = new GRect(brickPerWidth, brickPerHeight); tmpbrick.setFilled(true); add(tmpbrick, x_start, y_start); } x_start += DIST_BRICK_BRICK + brickPerWidth; } // Make up the board board = new GRect(BOARD_WIDTH, BOARD_HEIGHT); board.setFilled(true); add(board, (getWidth() - BOARD_WIDTH) / 2, (getHeight() - 30)); // Place the ball ball = new GOval(BALL_RADIUS * 2, BALL_RADIUS * 2); ball.setFilled(true); ball.setColor(Color.RED); add(ball, (getWidth() - BALL_RADIUS * 2) / 2, (getHeight() - 30 - BALL_RADIUS * 2)); // Set up random generator rgen = RandomGenerator.getInstance(); // Add Listeners addMouseListeners(); }
public void run() { GOval o = new GOval(40, 40); o.setColor(Color.RED); o.setFilled(true); add(o, 100, 100); while (true) { pause(WAIT); o.move(xMove, yMove); } }
private void PrecisionPaddle() { if (ball.getY() > HEIGHT - PADDLE_Y_OFFSET - PADDLE_HEIGHT - BALL_RADIUS * 2) { // check if the ball drops below the paddle double diff = ball.getY() - (HEIGHT - PADDLE_Y_OFFSET - PADDLE_HEIGHT - BALL_RADIUS * 2); ball.move(0, -2 * diff); // move ball an amount equal to the amount it drops below the paddle } }
private void checkWall() { boolean checkLeftWall = ball.getX() <= 0; boolean checkRightWall = ball.getX() + BALL_RADIUS * 2 >= WIDTH; boolean checkTop = ball.getY() <= 0; if ((checkLeftWall) || (checkRightWall)) { vx = -vx; } if (checkTop) { vy = -vy; } }
private void drawBall() { double x = WIDTH / 2 - BALL_RADIUS; double y = HEIGHT / 2 - BALL_RADIUS; double d = 2 * BALL_RADIUS; ball = new GOval(x, y, d, d); ball.setFilled(true); add(ball); }
private void checkObject() { // x and y parameters for the different corners double leftX = ball.getX(); double rightX = ball.getX() + (2 * BALL_RADIUS); double upperY = ball.getY(); double lowerY = ball.getY() + (2 * BALL_RADIUS); // check the corners for object GObject upperLeft = checkCorner(leftX, upperY); // check upper-left corner if (upperLeft == null) { GObject upperRight = checkCorner(rightX, upperY); // check upper-right corner } GObject lowerLeft = checkCorner(leftX, lowerY); // //check lower-left corner if (lowerLeft == null) { GObject lowerRight = checkCorner(rightX, lowerY); // check lower-right corner if ((lowerLeft == paddle) && (lowerRight == paddle)) { // When both lower corners hit paddle, change direction. vy = -vy; } } }
private void gaming() { boolean loseOneTurn; boolean win = false; boolean stillAlive = true; for (int i = NTURNS; i > 0; i--) { // loops for the number of turns. GLabel life = showLifeCount(i); waitForClick(); add(life); while (stillAlive) { // the ball moves and bounces until the user loses or wins the turn. moveBall(); loseOneTurn = (ball.getY() >= HEIGHT); // user loses one turn when the ball falls under the paddle. win = (brickCount == 0); // user wins when there is no brick left. stillAlive = !(loseOneTurn || win); } if (win) break; // breaks from the loop if the user wins in one turn. remove(ball); createBall(); // a new ball appears on the center of the screen after one turn stillAlive = true; remove(life); } }
/* Draw graph line with the name and rating */ private void drawEntry(NameSurferEntry entry, int entryNumber) { /* Draws graph line */ for (int i = 0; i < NDECADES - 1; i++) { int position1 = entry.getRank(i); int position2 = entry.getRank(i + 1); double x1 = i * (getWidth() / NDECADES); double x2 = (i + 1) * (getWidth() / NDECADES); double y1 = 0; double y2 = 0; if (position1 != 0 && position2 != 0) { y1 = GRAPH_MARGIN_SIZE + (getHeight() - GRAPH_MARGIN_SIZE * 2) * position1 / MAX_RANK; y2 = GRAPH_MARGIN_SIZE + (getHeight() - GRAPH_MARGIN_SIZE * 2) * position2 / MAX_RANK; } else if (position1 == 0 && position2 == 0) { y1 = getHeight() - GRAPH_MARGIN_SIZE; y2 = y1; } else if (position1 == 0) { y1 = getHeight() - GRAPH_MARGIN_SIZE; y2 = GRAPH_MARGIN_SIZE + (getHeight() - GRAPH_MARGIN_SIZE * 2) * position2 / MAX_RANK; } else { y1 = GRAPH_MARGIN_SIZE + (getHeight() - GRAPH_MARGIN_SIZE * 2) * position1 / MAX_RANK; y2 = getHeight() - GRAPH_MARGIN_SIZE; } GLine line = new GLine(x1, y1, x2, y2); /* Set line color */ if (entryNumber % 4 == 0) { line.setColor(Color.BLUE); } else if (entryNumber % 4 == 1) { line.setColor(Color.RED); } else if (entryNumber % 4 == 2) { line.setColor(Color.MAGENTA); } else if (entryNumber % 4 == 3) { line.setColor(Color.BLACK); } add(line); } /* Add label with the name and ranking */ for (int i = 0; i < NDECADES; i++) { String name = entry.getName(); int position = entry.getRank(i); String positionString = Integer.toString(position); String label = name + " " + positionString; double x = i * (getWidth() / NDECADES) + 10; double x1 = x - NDECADES; double y; int R = 5; if (position != 0) { y = GRAPH_MARGIN_SIZE + (getHeight() - GRAPH_MARGIN_SIZE * 2) * position / MAX_RANK; } else { /* Add "*" if name was not used and remove marker point */ label = name + " *"; y = getHeight() - GRAPH_MARGIN_SIZE - 10; R = 0; } /* Add marker point */ GOval marker = new GOval(x1, y - 2, R, R); /* Got "y-2" by scientific research =) */ marker.setFilled(true); GLabel nameLabel = new GLabel(label, x, y); nameLabel.setFont(new Font("Times Roman", Font.BOLD, 12)); /* Set label color */ if (entryNumber % 4 == 0) { nameLabel.setColor(Color.BLUE); marker.setColor(Color.BLUE); } else if (entryNumber % 4 == 1) { nameLabel.setColor(Color.RED); marker.setColor(Color.RED); } else if (entryNumber % 4 == 2) { nameLabel.setColor(Color.MAGENTA); marker.setColor(Color.MAGENTA); } else if (entryNumber % 4 == 3) { nameLabel.setColor(Color.BLACK); marker.setColor(Color.BLACK); } add(nameLabel); add(marker); } }
private void startFall() { ball.move(vx, vy); pause(DELAY); ball.sendToBack(); }
/** Check for collision */ private void checkRebounce() { // check for left/right/top wall if (ball.getX() < 0) { vx *= -1; ball.move(vx, 0); return; } else if ((ball.getX() + 2 * BALL_RADIUS) > getWidth()) { vx *= -1; ball.move(vx, 0); return; } else if (ball.getY() < 0) { ball.setLocation(ball.getX(), -ball.getY()); vy *= -1; return; } // check for collision with bricks: from the four vertexs lefttop = getElementAt(ball.getX(), ball.getY()); righttop = getElementAt(ball.getX() + 2 * BALL_RADIUS, ball.getY()); leftbottom = getElementAt(ball.getX(), ball.getY() + 2 * BALL_RADIUS); rightbottom = getElementAt(ball.getX() + 2 * BALL_RADIUS, ball.getY() + 2 * BALL_RADIUS); if ((lefttop != null) && (righttop != null) && (lefttop != board) && (lefttop != mylabel)) { remove(lefttop); num_brick_left--; vy *= -1; } else if ((righttop != null) && (rightbottom != null) && (righttop != board) && (righttop != mylabel)) { remove(righttop); num_brick_left--; vx *= -1; } else if ((rightbottom != null) && (leftbottom != null) && (rightbottom != board) && (rightbottom != mylabel)) { remove(rightbottom); num_brick_left--; vy *= -1; } else if ((leftbottom != null) && (lefttop != null) && (leftbottom != board) && (leftbottom != mylabel)) { remove(leftbottom); num_brick_left--; vx *= -1; } // check for collision with board if (getElementAt(ball.getX(), (ball.getY() + BALL_RADIUS / 2)) == board) { vy *= -1; ball.move(0, vy); } }
/** Move the ball */ private void moveBall() { ball.move(vx, vy); }
/** Check whether the game is over */ private boolean gameover() { return (ball.getY() > (getHeight() - 2 * BALL_RADIUS)) || (num_brick_left == 0); }
/*Defines and places the Rent state as a circle */ private void placeRent(int x, int y, int width, int height, Color rentColor) { GOval shape = new GOval(x, y, width, height); shape.setFilled(true); shape.setColor(rentColor); add(shape); }