package pong; import java.awt.*; import MGui.*; import java.applet.Applet; import java.applet.AudioClip; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.JOptionPane; import javax.swing.Timer; public class Game extends MFrame implements ActionListener { private Timer timer,_timer; private File sourceimage; private Image immagineIc; private int movement,points,_points,score,scorePX,scoreCX,scoreY; private final int width,height; private Ball ball; private final Paddle player; private final AIPaddle ai; private boolean right,down,up,ballMovement; private boolean[] keys; private final URL url,_url; private final AudioClip clipContact,clipScore; private final KeyListener listener; private final double SPEED_AI= 5.5; public Game(int width, int height, String title) { super(width, height); super.setTitle(title); super.setResizable(false); super.setLocationRelativeTo(null); super.setCanvasBackground(Color.BLACK); try { sourceimage=new java.io.File("src\\icon\\pong.gif"); Image image = ImageIO.read(sourceimage); immagineIc=Toolkit.getDefaultToolkit().getImage(sourceimage.toString()); super.setIconImage(image); } catch (IOException ex) { Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex); } listener = new MyKeyListener(); keys=new boolean[256]; for(int i=0;i=ai.getX()) down=false; ball.moveY(down); ball.moveX(right); break; case 5: right=false; ball.setSpeed(9); ball.moveX(right); ball.setSpeed(6); break; case 6: right=false; if(ball.getX()>=ai.getX()) down=false; ball.moveY(down); ball.moveX(right); break; case 7: right=true; if(ball.getX()<=player.getX()) down=true; ball.moveY(down); ball.moveX(right); break; case 8: right=true; ball.setSpeed(9); ball.moveX(right); ball.setSpeed(6); break; case 9: right=true; if(ball.getX()<=player.getX()) down=true; ball.moveY(down); ball.moveX(right); break; default:ball.moveX(true); ball.moveY(true); down=true; right=true; break; } } private void printScore() { timer.stop(); _timer=new Timer(1200,this); _timer.start(); ballMovement=false; } private void reset() { ball=new Ball(350,80,20,20); ball.setSpeed(6); points=0; _points=0; player.setY(0); mrepaint(); } private void jackpot(String msg,String ttl) { if(JOptionPane.showConfirmDialog(this,msg,ttl, JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION) reset(); else { dispose(); System.exit(0); } } void setDimension(Graphics2D g2) //check the presence of a custom font { if(!g2.getFont().getName().equals("8BIT WONDER")) { g2.setFont(new Font("Serif", Font.BOLD, 50)); scoreY=40; scorePX=width/5; scoreCX=450; } } private void updateStatus() { if(player.getY()>=2) if(keys[KeyEvent.VK_UP]) { player.move(false); } if(player.getY()<=(height-50)) if(keys[KeyEvent.VK_DOWN]) { player.move(true); } } @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(timer)) { if(ballMovement) { updateStatus(); ai.moveAi(ball.x,ball.y); moveBall(); mrepaint(); } } else if(e.getSource().equals(_timer)) { mrepaint(); score=0; ballMovement=true; _timer.stop(); timer.start(); } } private class MyKeyListener implements KeyListener { @Override public void keyTyped(KeyEvent e) { keys[e.getKeyCode()]=true; } @Override public void keyPressed(KeyEvent e) { keys[e.getKeyCode()]=true; } @Override public void keyReleased(KeyEvent e) { keys[e.getKeyCode()]=false; } } }