1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| import pong.*;
import javax.swing.JApplet;
import javax.swing.Timer;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Image;
import java.awt.Graphics;
/**
* Classe moteur servant d'interface entre le jeu et sa mise en oeuvre.
*/
public class Pong extends JApplet implements KeyListener, ActionListener {
/**
* Constante paramétrant le nombre d'images par seconde du jeu.
*/
private final int fps = 50;
/**
* Timer orchestrant le jeu à la vitesse définie par la constante fps.
*/
private Timer cadenceur = new Timer(1000/fps, this);
/**
* Image utilisée pour le double buffering software.
*/
private Image backBuffer;
/**
* Jeu représentant la partie en cours.
*/
private Jeu jeu;
/* Méthodes KeyListener */
public void keyPressed(KeyEvent e){
/* Si un utilisateur appuye sur la touche Echap, on met le jeu en pause ou on l'enlève de la pause suivant son état actuel. */
if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
if(jeu.etat == Jeu.PAUSE){
jeu.etat = Jeu.JEU;
cadenceur.restart();
} else {
jeu.etat = Jeu.PAUSE;
repaint();
cadenceur.stop();
}
/* Sinon si un utilisateur appuye sur la barre Espace */
} else if(e.getKeyCode() == KeyEvent.VK_SPACE){
/* Si le jeu est en cours, on ajoute une balle. */
if(jeu.etat == Jeu.JEU){
jeu.ajouterBalle();
/* Sinon si le jeu est au début, on commence la partie. */
} else if(jeu.etat == Jeu.DEBUT ||jeu.etat == Jeu.FIN){
if(jeu.etat == Jeu.FIN){
jeu = new Jeu(getWidth(), getHeight(), "Joueur A", "Joueur B", Jeu.POINTS_MAX_PAR_DEFAUT);
}
jeu.start();
cadenceur.restart();
}
/* Sinon (autre touche), le jeu gère cet appui (pour savoir si un joueur a commandé le déplacement de sa raquette). */
} else {
jeu.gereAppuiTouche(e);
}
}
public void keyReleased(KeyEvent e){
/* Le jeu gère le relachement d'une touche pour savoir si un joueur a commandé l'arrêt de sa raquette. */
jeu.gereFinAppuiTouche(e);
}
public void keyTyped(KeyEvent e){}
// Call-back pour le minuteur
public void actionPerformed(ActionEvent evt){
/* Si le jeu est en cours, on commence une nouvelle scène, et on appelle la méthode paint. */
if(jeu.etat == Jeu.JEU){
jeu.gereScene();
} else if(jeu.etat == Jeu.FIN){
cadenceur.stop();
}
repaint();
}
public void init(){
addKeyListener(this);
backBuffer = createImage(getWidth(), getHeight());
jeu = new Jeu(getWidth(), getHeight(), "Joueur A", "Joueur B", Jeu.POINTS_MAX_PAR_DEFAUT);
}
/**
* Affiche une scène du jeu courant.
* @param g Objet Graphics du frontBuffer utilisé pour dessiner à l'écran.
*/
public void paint(Graphics g){
if(jeu.etat == Jeu.JEU){
jeu.afficherJeu(backBuffer.getGraphics());
/* Recopie le backBuffer dans le frontBuffer qui dessinera son contenu à l'écran. */
g.drawImage(backBuffer, 0, 0, this);
} else if(jeu.etat == Jeu.DEBUT){
jeu.afficherDebut(g);
} else if(jeu.etat == Jeu.PAUSE) {
jeu.afficherPause(g);
} else {
jeu.afficherFin(g);
}
requestFocus();
}
} |