public BallsFrame() throws HeadlessException { super("Funny balls"); setLayout(new BorderLayout()); executorService = Executors.newScheduledThreadPool(1); ballsPanel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (blueBallVisible) { g.setColor(Color.BLUE); g.fillOval(blueBall.x, getHeight() / 2, BALL_DIAGONAL, BALL_DIAGONAL); } g.setColor(Color.RED); g.fillOval(redBall.x, getHeight() / 2, BALL_DIAGONAL, BALL_DIAGONAL); } }; add(ballsPanel, BorderLayout.CENTER); blueBallSwitch = new JCheckBox("Collision", true); blueBallSwitch.addItemListener( e -> { if (blueBallVisible = blueBallSwitch.isSelected()) { int x; do x = random.nextInt(getWidth() - BALL_DIAGONAL); while (redBall.x <= x && x <= redBall.rightX() || redBall.x <= x + BALL_DIAGONAL && x + BALL_DIAGONAL <= redBall.rightX()); blueBall.x = x; } }); add(blueBallSwitch, BorderLayout.SOUTH); blueBallVisible = true; moveToRight = true; setSize(500, 500); }
public void paintComponent(Graphics g) { super.paintComponent(g); if (!t.isRunning()) { t.start(); } this.detectCollitions(); for (Ball i : b) { int[] oval = i.getOval(); i.move(); g.fillOval(oval[0], oval[1], oval[2], oval[3]); } }
private void startAnimation() { redBall = new Ball(1); blueBall = new Ball(getWidth() / 2); executorService.scheduleAtFixedRate( () -> { if (redBall.rightX() >= getWidth() || redBall.x <= 0 || blueBallVisible && redBall.intersectsWith(blueBall)) moveToRight = !moveToRight; redBall.x += moveToRight ? 1 : -1; ballsPanel.repaint(); }, 1, 5, TimeUnit.MILLISECONDS); }
@Override public void paint(Graphics g) { super.paint(g); for (Ball b : ballsList) { g.setColor(b.getColor()); g.fillOval(b.getX(), b.getY(), b.getSize(), b.getSize()); b.move(getWidth(), getHeight()); } }
@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(); } }
// Constructor// public Game_Screen() { JFrame game_frame = new JFrame("Legend of Pong"); // creates the jframe JLabel Background = new JLabel( new ImageIcon( "C:\\Users\\Daniel\\workspace\\Pong_Game\\src\\resources\\Pics\\gameScreen.jpg")); // gets the BG image game_frame.setContentPane(Background); // places background image // setting the header section// // Score// long score = getScore(); // int to hold score value JLabel scoreL = new JLabel(); // label to display score scoreL.setText("Score: " + String.valueOf(score)); // connects label and int scoreL.setBounds(25, 15, 200, 35); // sets location of score scoreL.setFont(new Font("Courier New", Font.BOLD, 20)); // sets font and size of font scoreL.setForeground(Color.GREEN); // sets color of Score game_frame.add(scoreL); // adds score // Timer// int time = getTime(); JLabel timeL = new JLabel(); // label to hold time timeL.setText("Time(sec): " + String.valueOf(time)); // connects label and int timeL.setBounds(350, 15, 200, 35); // set location of time timeL.setFont(new Font("Courier New", Font.BOLD, 20)); // sets font and size of font timeL.setForeground(Color.GREEN); // sets color game_frame.add(timeL); // adds time // Life// int life = getLife(); // int to hold value of lives left JLabel lifeL = new JLabel(); // label to hold life lifeL.setText("Lives: " + String.valueOf(life)); // connects label and int lifeL.setBounds(700, 15, 200, 35); // sets location of life lifeL.setFont(new Font("Courier New", Font.BOLD, 20)); // sets font and size of font lifeL.setForeground(Color.GREEN); // sets color of life game_frame.add(lifeL); // adds life // Paddle// JPanel paddle = new JPanel(); // new panel for paddle object and image Paddle object = new Paddle(); // creates new paddle object JLabel link = new JLabel( new ImageIcon( "C:\\Users\\Daniel\\workspace\\Pong_Game\\src\\resources\\Pics\\Link.gif")); // new // paddle image(also link) paddle.add(object); // adds the actual object paddle.add(link); // adds image to the paddle Panel paddle.setBounds( object.getX(), object.getY(), object.getWidth(), object.getHeight()); // sets location and size of the paddle game_frame.add(paddle); // game_frame gets link image // a single ball = test // JPanel ball = new JPanel(); // creates the JPanel to hold the ball object and image Ball obj = new Ball(); // creates the ball object JLabel stone = new JLabel( new ImageIcon( "C:\\Users\\Daniel\\workspace\\Pong_Game\\src\\resources\\Pics\\Ball.png")); // creates the ball image ball.add(obj); // adds the object ball.add(stone); // adds the image ball.setBounds(750, 250, obj.getWidth(), obj.getHeight()); // sets ball location and size game_frame.add(ball); // adds it to the screen // final frame things// game_frame.pack(); game_frame.setResizable(false); game_frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); game_frame.setVisible(true); } // end of screen constructor
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); } } } } }
public boolean intersectsWith(Ball other) { return this.x <= other.x && other.x <= this.rightX() || this.x <= other.rightX() && other.rightX() <= this.rightX(); }