package linea; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.Timer; public class Jeu implements KeyListener, ActionListener{ //------------------------------------------------------------------------- // PROPRIETES //------------------------------------------------------------------------- // Ecran : instance de ZoneDessin, qui contiendra tous les objets graphiques // et les animera protected ZoneDessin ecran = new ZoneDessin(); // Le cercle : en fait 2 demis-cercles, un qui passera sous la ligne // un qui passera dessus protected Cercle demiCercleAvant = new Cercle(90,-180); // celui qui est sur la ligne protected Cercle demiCercleArriere = new Cercle(90,180); // celui qui est derrière la ligne Ligne laligne = new Ligne(); // A FAIRE : ajouter les objets graphiques manquants, s'il y en a // Timer : un objet qui émet des événements à un intervalle choisi, // il sert à donner le pas de l'animation protected Timer horloge; // Une variable qui contiendra le score protected double score=0; // un label qui servira à afficher le score protected JLabel labScore; //------------------------------------------------------------------------- // METHODES //------------------------------------------------------------------------- //------------------------------------------------------------------------- // Constructeur de la classe //------------------------------------------------------------------------- public Jeu(){ // Gestion du score : a réactiver en fin de TP, inutile au début labScore = new JLabel(); labScore.setText("

score : 0

"); labScore.setBounds(20, 0, 200, 50); ecran.add(labScore); } //------------------------------------------------------------------------- // Méthodes qu'il faut implémenter pour être // conforme à un KeyListener //------------------------------------------------------------------------- //------------------------------------------------------------------------- // Appui sur une touche // -> l'événement est émis lorsqu'on appuie, puis selon le rythme de // répétition du clavier //------------------------------------------------------------------------- @Override public void keyPressed(KeyEvent e){ //keyCode 38 : up // keyCode 40 : down int keyCode = e.getKeyCode(); if (keyCode==38){ // touche "flèche vers le haut" // On demande aux deux demi-cercle de "monter" demiCercleAvant.Monter(); demiCercleArriere.Monter(); } } //------------------------------------------------------------------------- // Relâchement de la touche //------------------------------------------------------------------------- @Override public void keyReleased(KeyEvent e){ // keyCode 38 : up // keyCode 40 : down int keyCode = e.getKeyCode(); if (keyCode==38){ // On demande aux deux demi-cercle "d'arrêter de monter" demiCercleAvant.ArreterMonter(); demiCercleArriere.ArreterMonter(); } } //------------------------------------------------------------------------- // Une méthode que nous n'utilisons pas //------------------------------------------------------------------------- @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } //------------------------------------------------------------------------- // Démarrage du jeu : // création de diverses instances et //------------------------------------------------------------------------- public void demarrer(){ // Création d'une fenêtre JFrame fenetre = new JFrame(); ecran.ajouterObjet(demiCercleArriere); ecran.ajouterObjet(demiCercleAvant); ecran.ajouterObjet(laligne); // on indique que c'est le jeu qui traitera les appuis sur une touche ecran.addKeyListener(this); ecran.setFocusable(true); fenetre.setContentPane(ecran); fenetre.pack(); fenetre.setLocation(100, 100); fenetre.setVisible(true); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Démarrage du timer, qui rythmera l'animation horloge = new Timer(20, this); horloge.start(); demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f)); demiCercleAvant.setCouleur(new Color(1.0f, 0.2f, 0.2f)); } //------------------------------------------------------------------------- // Méthode appelée lorsqu'un événement timer se produit //------------------------------------------------------------------------- @Override public void actionPerformed(ActionEvent e) { ecran.traiterBoucleAnimation(); } }