Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package games.complete;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Toolkit;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.util.Arrays;
- import javax.swing.JComponent;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- public class Pong
- {
- JFrame frame;
- JPanel mainPanel;
- Ball ball;
- Paddle player;
- Paddle enemy;
- MoveController mc = new MoveController();
- DisplayManager dm = new DisplayManager();
- int maxSpeed = 5;
- double movement = 1;
- public static void main(String[] args)
- {
- new Pong();
- }
- public Pong()
- {
- frame = new JFrame("Pong");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- mainPanel = new JPanel(null);
- mainPanel.setBackground(Color.black);
- mainPanel.setPreferredSize(new Dimension(500, 500));
- player = new Paddle(20, 100);
- enemy = new Paddle(20, 100);
- ball = new Ball(5, Color.GREEN);
- mainPanel.add(player);
- mainPanel.add(enemy);
- mainPanel.add(ball);
- enemy.setColor(Color.RED);
- frame.setContentPane(mainPanel);
- frame.pack();
- Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
- int x = screen.width/2 - frame.getWidth()/2;
- int y = screen.height/2 - frame.getHeight()/2;
- frame.setLocation(x, y);
- mainPanel.addKeyListener(mc);
- frame.setVisible(true);
- mainPanel.repaint();
- x = mainPanel.getWidth()/2 - ball.getWidth()/2;
- y = mainPanel.getHeight()/2 - ball.getHeight()/2;
- System.out.println("X: " + x + ", Y: " + y);
- ball.setLocation(x, y);
- x = 0;
- y = mainPanel.getHeight()/2 - player.getHeight()/2;
- System.out.println("X: " + x + ", Y: " + y);
- player.setLocation(x, y);
- x = mainPanel.getWidth() - enemy.getWidth();
- y = mainPanel.getHeight()/2 - enemy.getHeight()/2;
- System.out.println("X: " + x + ", Y: " + y);
- enemy.setLocation(x, y);
- System.out.println(Arrays.deepToString(mainPanel.getComponents()));
- mainPanel.repaint();
- frame.addMouseListener(new MouseAdapter()
- {
- @Override
- public void mousePressed(MouseEvent e)
- {
- mainPanel.requestFocus();
- }
- });
- dm.start();
- mainPanel.requestFocus();
- }
- private class Ball extends JComponent
- {
- private int radius;
- private Color color;
- public Ball(int size, Color c)
- {
- if(size > 0)
- radius = size;
- else
- radius = 1;
- this.setPreferredSize(new Dimension(radius, radius));
- color = c;
- }
- public Ball(int size)
- {
- this(size, Color.RED);
- }
- public Color getColor()
- {
- return color;
- }
- public void setColor(Color c)
- {
- color = c;
- }
- public int getRadius()
- {
- return radius;
- }
- public void setRadius(int r)
- {
- radius = r > 0 ? r : radius;
- }
- @Override
- public void paintComponent(Graphics g)
- {
- System.out.println("Radius: " + radius);
- g.setColor(color);
- g.fillOval(0, 0, radius, radius);
- }
- @Override
- public String toString()
- {
- return "games.common.Pong.Ball[Radius=" + radius + ",Color="+color.toString()+"]";
- }
- }
- private class Paddle extends JComponent
- {
- private int width;
- private int height;
- private Color color;
- public double vx;
- public double vy;
- public Paddle(int width, int height, Color c)
- {
- this.width = width > 0 ? width : 1;
- this.height = height > 0 ? height : 1;
- this.setPreferredSize(new Dimension(width, height));
- color = c;
- }
- public Paddle(int width, int height)
- {
- this(width, height, Color.BLUE);
- }
- public int getHeight()
- {
- return height;
- }
- public int getWidth()
- {
- return width;
- }
- public void setHeight(int h)
- {
- height = h > 0 ? h : height;
- }
- public void setWidth(int w)
- {
- width = w > 0 ? w : width;
- }
- public Color getColor()
- {
- return color;
- }
- public void setColor(Color c)
- {
- color = c;
- }
- @Override
- public void paintComponent(Graphics g)
- {
- g.setColor(color);
- g.fillRect(0, 0, width, height);
- }
- }
- private class DisplayManager extends Thread
- {
- public DisplayManager()
- {
- super(new Runnable() {
- boolean paused;
- boolean run;
- @Override
- public void run()
- {
- while(true)
- {
- mainPanel.repaint();
- player.setLocation(player.getX(), (int)Math.round(player.getY() + player.vy));
- enemy.setLocation(enemy.getX(), (int)Math.round(enemy.getY() + enemy.vy));
- if(player.getY() < 0)
- {
- player.setLocation(player.getX(), 0);
- player.vy = 0;
- }
- if(player.getY() > mainPanel.getHeight() - player.getHeight())
- {
- player.setLocation(player.getX(), mainPanel.getHeight() - player.getHeight());
- player.vy = 0;
- }
- if(enemy.getY() < 0)
- {
- enemy.setLocation(enemy.getX(), 0);
- player.vy = 0;
- }
- if(enemy.getY() > mainPanel.getHeight() - enemy.getHeight())
- {
- enemy.setLocation(enemy.getX(), mainPanel.getHeight() - enemy.getHeight());
- player.vy = 0;
- }
- if(player.vy > maxSpeed)
- player.vy = maxSpeed;
- if(player.vy < -maxSpeed)
- player.vy = -maxSpeed;
- if(enemy.vy > maxSpeed)
- enemy.vy = maxSpeed;
- if(enemy.vy < -maxSpeed)
- enemy.vy = -maxSpeed;
- try
- {
- Thread.sleep(1000/60);
- }
- catch(InterruptedException ex)
- {
- }
- player.vy *= 0.98;
- }
- }
- });
- }
- }
- private class MoveController implements KeyListener
- {
- @Override
- public void keyTyped(KeyEvent e) {
- }
- @Override
- public void keyPressed(KeyEvent e)
- {
- switch(e.getKeyCode())
- {
- case KeyEvent.VK_UP: case KeyEvent.VK_W:
- player.vy -= movement;
- break;
- case KeyEvent.VK_DOWN: case KeyEvent.VK_S:
- player.vy += movement;
- break;
- default:
- System.out.println("You're not doing it right!");
- }
- System.out.println("VX: " + player.vx + ", VY: " + player.vy);
- }
- @Override
- public void keyReleased(KeyEvent e) {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement