Sabtu, 26 Agustus 2023

BOLA MEMANTUL JAVA

 








Bola.java

package bola;


import javax.swing.JFrame;


/**

 *

 * @author Acer

 */

public class Bola {


    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        // TODO code application logic here

        javax.swing.SwingUtilities.invokeLater(new Runnable() {

         public void run() {

            // Set up main window (using Swing's Jframe)

            JFrame frame = new JFrame("A Bouncing Ball");

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            frame.setContentPane(new BouncingBallSimple());

            frame.pack();

            frame.setVisible(true);

         }

      });

   }


    }

    


BouncingBallSimple.java

package bola;

import java.awt.*;

import java.util.Formatter;

import javax.swing.*;

/**

 * One ball bouncing inside a rectangular box. 

 * All codes in one file. Poor design!

 */

// Extends JPanel, so as to override the paintComponent() for custom rendering codes. 

public class BouncingBallSimple extends JPanel {

   // Container box's width and height

   private static final int BOX_WIDTH = 640;

   private static final int BOX_HEIGHT = 480;

  

   // Ball's properties

   private float ballRadius = 200; // Ball's radius

   private float ballX = ballRadius + 50; // Ball's center (x, y)

   private float ballY = ballRadius + 20; 

   private float ballSpeedX = 3;   // Ball's speed for x and y

   private float ballSpeedY = 2;

  

   private static final int UPDATE_RATE = 30; // Number of refresh per second

  

   /** Constructor to create the UI components and init game objects. */

   public BouncingBallSimple() {

      this.setPreferredSize(new Dimension(BOX_WIDTH, BOX_HEIGHT));

  

      // Start the ball bouncing (in its own thread)

      Thread gameThread = new Thread() {

         public void run() {

            while (true) { // Execute one update step

               // Calculate the ball's new position

               ballX += ballSpeedX;

               ballY += ballSpeedY;

               // Check if the ball moves over the bounds

               // If so, adjust the position and speed.

               if (ballX - ballRadius < 0) {

                  ballSpeedX = -ballSpeedX; // Reflect along normal

                  ballX = ballRadius; // Re-position the ball at the edge

               } else if (ballX + ballRadius > BOX_WIDTH) {

                  ballSpeedX = -ballSpeedX;

                  ballX = BOX_WIDTH - ballRadius;

               }

               // May cross both x and y bounds

               if (ballY - ballRadius < 0) {

                  ballSpeedY = -ballSpeedY;

                  ballY = ballRadius;

               } else if (ballY + ballRadius > BOX_HEIGHT) {

                  ballSpeedY = -ballSpeedY;

                  ballY = BOX_HEIGHT - ballRadius;

               }

               // Refresh the display

               repaint(); // Callback paintComponent()

               // Delay for timing control and give other threads a chance

               try {

                  Thread.sleep(1000 / UPDATE_RATE);  // milliseconds

               } catch (InterruptedException ex) { }

            }

         }

      };

      gameThread.start();  // Callback run()

   }

  

   /** Custom rendering codes for drawing the JPanel */

   @Override

   public void paintComponent(Graphics g) {

      super.paintComponent(g);    // Paint background

  

      // Draw the box

      g.setColor(Color.BLACK);

      g.fillRect(0, 0, BOX_WIDTH, BOX_HEIGHT);

  

      // Draw the ball

      g.setColor(Color.BLUE);

      g.fillOval((int) (ballX - ballRadius), (int) (ballY - ballRadius),

            (int)(2 * ballRadius), (int)(2 * ballRadius));

  

      // Display the ball's information

      g.setColor(Color.WHITE);

      g.setFont(new Font("Courier New", Font.PLAIN, 12));

      StringBuilder sb = new StringBuilder();

      Formatter formatter = new Formatter(sb);

      formatter.format("Ball @(%3.0f,%3.0f) Speed=(%2.0f,%2.0f)", ballX, ballY,

            ballSpeedX, ballSpeedY);

      g.drawString(sb.toString(), 20, 30);

   }

  


/**

 *

 * @author Acer

 */

public class Frame extends javax.swing.JFrame {


    /**

     * Creates new form Frame

     */

    public Frame() {

        initComponents();

    }


    /**

     * This method is called from within the constructor to initialize the form.

     * WARNING: Do NOT modify this code. The content of this method is always

     * regenerated by the Form Editor.

     */

    @SuppressWarnings("unchecked")

    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          

    private void initComponents() {


        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);


        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

        getContentPane().setLayout(layout);

        layout.setHorizontalGroup(

            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

            .addGap(0, 400, Short.MAX_VALUE)

        );

        layout.setVerticalGroup(

            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

            .addGap(0, 300, Short.MAX_VALUE)

        );


        pack();

    }// </editor-fold>                        

}

}

Tidak ada komentar: