Tuesday, December 2, 2025

Pertemuan 15 | Pong Game

 Nama : Naufal Daffa Alfa Zain

 NRP    : 5025241066

 Kelas   : Pemrograman Berorientasi Objek A

    Pada pertemuan ke 15, kami diminta untuk membuat game pong sederhana di BlueJ. disini source code berasal dari file source code pdf yang dibagikan. saya juga melakukan beberapa penyesuaian yaitu mengubah warna bola dan paddle menjadi hitam agar lebih mudah terlihat.



Source Code:

Ball.Java

import java.awt.*;
import java.util.Random;

public class Ball {
    Random random = new Random();
    int x, y;
    int xVelocity = (5 + random.nextInt(3)) * randomPlusMinus();
    int yVelocity = (5 + random.nextInt(3)) * randomPlusMinus();
    int diameter = 30;
   
    private int randomPlusMinus() {
        if(random.nextBoolean()) {
            return 1;
        } else {
            return -1;
        }
    }
   
    public Ball(int x, int y) {
        this.x = x;
        this.y = y;
    }
   
    public void draw(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillOval(x, y, diameter, diameter);
    }
   
    public void move(Paddle paddle1, Paddle paddle2) {
        x += xVelocity;
        y += yVelocity;
        if (y <= 0 || y >= GamePanel.GAME_HEIGHT - diameter)
            yVelocity = -yVelocity;
           
        if (x >= GamePanel.GAME_WIDTH - paddle2.width - diameter
            && y <= paddle2.y + paddle2.height
            && y >= paddle2.y - paddle2.height)
            xVelocity = -xVelocity;
           
        if (x <= paddle1.width
            && y <= paddle1.y + paddle1.height
            && y >= paddle1.y - paddle1.height)
            xVelocity = -xVelocity;
           
    }
   
}

Paddle.Java

import java.awt.*;
import java.awt.event.*;

public class Paddle {
    int x, y;
    int yVelocity = 0;
    int speed = 10;
    int width = 20;
    int height = 100;
    int paddleNumber;
   
    public Paddle(int x, int y, int paddleNumber) {
        this.x = x;
        this.y = y;
        this.paddleNumber = paddleNumber;
    }
   
    public void draw(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(x, y, width, height);
    }
   
    public void move() {
        y += yVelocity;
    }
   
    public void keyPressed(KeyEvent e) {
        switch(e.getKeyCode()) {
            case KeyEvent.VK_W:
                if(this.paddleNumber==1)
                    this.yVelocity = -speed;
                break;
            case KeyEvent.VK_S:
                if(this.paddleNumber==1)
                    this.yVelocity = speed;
                break;
            case KeyEvent.VK_UP:
                if(this.paddleNumber==2)
                    yVelocity = -speed;
                break;
            case KeyEvent.VK_DOWN:
                if(this.paddleNumber==2)
                    yVelocity = speed;
                break;
        }
    }
   
    public void keyReleased(KeyEvent e) {
        switch(e.getKeyCode()) {
            case KeyEvent.VK_W:
            case KeyEvent.VK_S:
                if(this.paddleNumber==1)
                    yVelocity = 0;
                break;
            case KeyEvent.VK_UP:
            case KeyEvent.VK_DOWN:
                if(this.paddleNumber==2)
                    yVelocity = 0;
                break;
        }
    }
}

GamePanel.Java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GamePanel extends JPanel implements Runnable {
    static final int GAME_WIDTH = 800;
    static final int GAME_HEIGHT = 600;
    Thread gameThread;
    Image image;
    Graphics graphics;
    Paddle player1, player2;
    Ball ball;
   
    public GamePanel() {
        player1 = new Paddle(0, (GAME_HEIGHT/2)-50, 1);
        player2 = new Paddle(GAME_WIDTH-20, (GAME_HEIGHT/2)-50, 2);
        ball = new Ball((GAME_WIDTH/2)-15, (GAME_HEIGHT/2)-15);
        this.setPreferredSize(new Dimension(GAME_WIDTH, GAME_HEIGHT));
        this.setFocusable(true);
        this.addKeyListener(new AL());
        gameThread = new Thread(this);
        gameThread.start();
    }
   
    public void paint(Graphics g) {
        image = createImage(getWidth(), getHeight());
        graphics = image.getGraphics();
        draw(graphics);
        g.drawImage(image, 0, 0, this);
    }
   
    public void draw(Graphics g) {
        player1.draw(g);
        player2.draw(g);
        ball.draw(g);
    }
   
    public void move() {
        player1.move();
        player2.move();
        ball.move(player1, player2);
    }
   
    public void run() {
        double nsPerFrame = 1000000000 / 60.0;
        long lastTime = System.nanoTime();
        double delta = 0;
        while (true) {
            long now = System.nanoTime();
            delta += (now - lastTime) / nsPerFrame;
            lastTime = now;
            while (delta >= 1) {
                move();
                repaint();
                delta--;
            }
        }
    }

    public class AL extends KeyAdapter {
        public void keyPressed(KeyEvent e) {
            player1.keyPressed(e);
            player2.keyPressed(e);
        }
       
        public void keyReleased(KeyEvent e) {
            player1.keyReleased(e);
            player2.keyReleased(e);
        }
   
       
    }
}

GameFrame.Java

import javax.swing.*;
public class GameFrame extends JFrame {
    public GameFrame() {
        this.add(new GamePanel());
        this.setTitle("Pong Game");
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }
}

PongGame.Java

public class PongGame
{
    public static void main(String[] args)
    {
        new GameFrame();
    }
}


No comments:

Post a Comment

Pertemuan 13 | Abstract Class

 Nama     : Naufal Daffa Alfa Zain  Nrp         : 5025241066  Kelas      : Pemrograman Web A2 Pada pertemuan ke‑13 kami mendapat dua tugas. ...