Advertisement
mbah_bejo

Pong

Dec 10th, 2020 (edited)
875
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.17 KB | None | 0 0
  1. /** ini dalah Main Class. Berfungsi mengendalikan objek yang telah dibuat.
  2.  * Seperti paddle, bola, bot, pengaturan skor, warna UI yang ceria,
  3.  * UI saat game, membaca respon key yang digunakan. Have fun kamu
  4.  *
  5.  * Author thomasdwi.a
  6.  * Version 20201210
  7.  */
  8.  
  9. package pong;
  10.  
  11. import javax.swing.*;
  12. import java.awt.*;
  13. import java.awt.event.ActionEvent;
  14. import java.awt.event.ActionListener;
  15. import java.awt.event.KeyEvent;
  16. import java.awt.event.KeyListener;
  17. import java.util.Random;
  18.  
  19. public class Pong implements ActionListener, KeyListener{
  20.  
  21.     public static Pong pong;
  22.     public int lebar =  1280, panjang = 720 ; //lebar-panjang panel
  23.     public Renderer renderer;
  24.     public Paddle player1, player2;
  25.     public Ball ball;
  26.     public boolean bot = false, selectingDifficulty;
  27.     public boolean w, s, up, down;
  28.     public int gameStatus = 0, scoreLimit = 3, playerWon; //0 = Menu, 1 = Paused, 2 = Playing, 3 = Over
  29.     public int botDifficulty, botMoves, botCooldown = 0;
  30.     public Random random;
  31.     public JFrame jframe;
  32.  
  33.     /**
  34.      * contructor
  35.      */
  36.     public Pong(){
  37.         Timer timer = new Timer(20,this);
  38.         random = new Random();
  39.         jframe = new JFrame("PONG PING");
  40.         renderer = new Renderer();
  41.  
  42.         jframe.setSize(lebar + 15, panjang + 35);
  43.         jframe.setVisible(true);
  44.         jframe.setDefaultCloseOperation(jframe.EXIT_ON_CLOSE);
  45.         jframe.add(renderer);
  46.         jframe.addKeyListener(this);
  47.  
  48.         timer.start();
  49.         }
  50.  
  51.     /**
  52.      * constructor saat mau mulai main
  53.      */
  54.     public void start(){
  55.         gameStatus =2;
  56.         player1 = new Paddle(this, 1);
  57.         player2 = new Paddle(this, 2);
  58.         ball = new Ball(this);
  59.     }
  60.  
  61.  
  62.     public void update(){
  63.         //cek skor setiap pemain
  64.         if (player1.score >= scoreLimit){
  65.             playerWon =1;
  66.             gameStatus = 3;
  67.         }
  68.  
  69.         if(player2.score >= scoreLimit){
  70.             playerWon = 2;
  71.             gameStatus = 3;
  72.         }
  73.  
  74.         //pergerakan paddle1
  75.         if(w) player1.move(true);
  76.         if(s) player1.move(false);
  77.  
  78.  
  79.         if(!bot){
  80.             //membaca pergerakan padlle2
  81.             if(up) player2.move(true);
  82.             if(down) player2.move(false);
  83.  
  84.         } else {
  85.  
  86.             if(botCooldown > 0){
  87.                 botCooldown--;
  88.                 if (botCooldown == 0) botMoves=0;
  89.             }
  90.  
  91.             if(botMoves <10){
  92.                 if(player2.y + player2.panjang/2 < ball.y){
  93.                     player2.move(false);
  94.                     botMoves++;
  95.                 }
  96.                 if(player2.y + player2.panjang/2 > ball.y){
  97.                     player2.move(true);
  98.                     botMoves++;
  99.                 }
  100.  
  101.                 if(botDifficulty == 0) botCooldown = 25;
  102.                 if(botDifficulty == 1) botCooldown = 15;
  103.                 if(botDifficulty == 2) botCooldown = 8;
  104.             }
  105.         }
  106.         ball.update(player1,player2);
  107.     }
  108.  
  109.     /**
  110.      * method yang membuat UI
  111.      * @param g
  112.      */
  113.     public void render(Graphics2D g){
  114.  
  115.         //untuk background
  116.         g.setColor(Color.BLACK);
  117.         g.fillRect(0,0, lebar, panjang);
  118.         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  119.  
  120.         //tampilan menu
  121.         if(gameStatus ==0){
  122.             g.setColor(Color.MAGENTA);
  123.             g.setFont(new Font("Arial", 1, 75));
  124.             g.drawString("PONG PING",lebar/2 - 230, 200);
  125.  
  126.             if(!selectingDifficulty){
  127.                 g.setColor(Color.PINK);
  128.                 g.setFont(new Font("Arial", 1, 30));
  129.                 g.drawString("TEKAN SPACE UNTUK BERMAIN/PAUSE", lebar/2 - 320, panjang/2 - 25);
  130.                 g.drawString("TEKAN SHIFT UNTUK BERMAIN DENGAN BOT", lebar/2 - 360, panjang/2 + 25);
  131.                 g.drawString("<< SCORE LIMIT: " + scoreLimit + " >>",lebar/2-176, panjang/2 + 75);
  132.             }
  133.         }
  134.         if(selectingDifficulty){
  135.             g.setColor(Color.ORANGE);
  136.             String string = botDifficulty == 0 ? "EZ" : (botDifficulty == 1 ? "MEDIUM" : "SUSAH NJIR");
  137.  
  138.             g.setFont(new Font("Arial", 1, 30));
  139.             if(botDifficulty == 0 )
  140.                 g.drawString("<< BOT DIFFICULTY: " + string + " >>",lebar/2 - 219, panjang/2 - 25);
  141.             else if(botDifficulty == 1)
  142.                 g.drawString("<< BOT DIFFICULTY: " + string + " >>",lebar/2 - 257, panjang/2 - 25);
  143.             else if(botDifficulty == 2)
  144.                 g.drawString("<< BOT DIFFICULTY: " + string + " >>",lebar/2 - 294, panjang/2 - 25);
  145.             g.drawString("PRESS SPACE TO PLAY/PAUSE", lebar/2 - 260 , panjang/2 + 25);
  146.         }
  147.  
  148.         //membuat arena permainan
  149.         if(gameStatus == 1 || gameStatus == 2){
  150.             g.setColor(Color.GREEN);
  151.  
  152.             g.setStroke(new BasicStroke(5f));
  153.             g.drawLine(lebar/2, 0,lebar/2,panjang);
  154.  
  155.             g.setStroke(new BasicStroke(2f));
  156.             g.drawOval(lebar/2 -125, panjang /2-120, 250,250);
  157.  
  158.             //untuk skor
  159.             g.setFont(new Font("Arial", 1, 50));
  160.             g.drawString(String.valueOf(player1.score), lebar/2 - 90, 100);
  161.             g.drawString(String.valueOf(player2.score), lebar/2 + 65, 100);
  162.  
  163.             player1.render(g);
  164.             player2.render(g);
  165.             ball.render(g);
  166.         }
  167.  
  168.         // ketika game di pause
  169.         if(gameStatus == 1){
  170.             g.setColor(Color.RED);
  171.             g.setFont(new Font("Arial", 1, 50));
  172.             g.drawString("PAUSE", lebar/2 - 89, panjang/2+20);
  173.         }
  174.  
  175.         //maka ini saat menang
  176.         if(gameStatus ==3){
  177.             g.setColor(Color.MAGENTA);
  178.             g.setFont(new Font("Arial", 1, 75));
  179.             g.drawString("PONG PING",lebar/2 - 230, 200);
  180.  
  181.             if(bot && playerWon == 2) g.drawString("BOT MENANG!", lebar/2-283, 300);
  182.             else g.drawString("PLAYER " + playerWon + " MENANG!", lebar/2-390, 330);
  183.  
  184.             g.setColor(Color.CYAN);
  185.             g.setFont(new Font("Arial", 1, 30));
  186.             g.drawString("TEKAN SPACE UNTUK BERMAIN", lebar/2 - 260, panjang/2 + 100);
  187.             g.drawString("TEKAN SHIFT UNTUK BERMAIN DENGAN BOT", lebar/2 - 360, panjang/2 + 150);
  188.         }
  189.     }
  190.  
  191.     @Override
  192.     public void actionPerformed(ActionEvent e){
  193.         if(gameStatus ==2) update();
  194.         renderer.repaint();
  195.     }
  196.  
  197.     public static void main(String [] args){
  198.         pong = new Pong();
  199.     }
  200.  
  201.     @Override
  202.     public void keyPressed(KeyEvent e){
  203.         int id = e.getKeyCode();
  204.  
  205.         if(id == KeyEvent.VK_W) w = true;
  206.         else if(id == KeyEvent.VK_S) s = true;
  207.         else if(id == KeyEvent.VK_UP) up = true;
  208.         else if(id == KeyEvent.VK_DOWN) down = true;
  209.         else if(id == KeyEvent.VK_RIGHT){
  210.             if(selectingDifficulty){
  211.                 if(botDifficulty < 2) botDifficulty++;
  212.                 else botDifficulty = 0;
  213.  
  214.             } else if(gameStatus ==0) scoreLimit ++;
  215.         }
  216.         else if(id == KeyEvent.VK_LEFT){
  217.             if (selectingDifficulty) {
  218.                 if(botDifficulty > 0) botDifficulty --;
  219.                 else  botDifficulty = 2;
  220.             }
  221.             else if ( gameStatus == 0 && scoreLimit>1) scoreLimit--;
  222.         }
  223.         else if(id == KeyEvent.VK_ESCAPE
  224.                 && (gameStatus == 2 || gameStatus == 3)) gameStatus = 0;
  225.         else if (id == KeyEvent.VK_SHIFT && gameStatus == 0){
  226.             bot = true;
  227.             selectingDifficulty = true;
  228.         }
  229.         else if (id == KeyEvent.VK_SPACE){
  230.             if(gameStatus == 0 || gameStatus == 3){
  231.                 if(!selectingDifficulty) bot = false;
  232.                 else  selectingDifficulty = false;
  233.  
  234.                 start();
  235.             }
  236.             else if(gameStatus == 1) gameStatus =2;
  237.             else if(gameStatus == 2) gameStatus =1;
  238.         }
  239.     }
  240.  
  241.     @Override
  242.     public void keyReleased (KeyEvent e){
  243.         int id = e.getKeyCode();
  244.  
  245.         if(id == KeyEvent.VK_W) w =false;
  246.         else if (id == KeyEvent.VK_S) s = false;
  247.         else if (id == KeyEvent.VK_UP) up = false;
  248.         else if (id == KeyEvent.VK_DOWN) down = false;
  249.     }
  250.  
  251.     @Override
  252.     public void keyTyped (KeyEvent e){}
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement