package linea; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Jeu implements KeyListener, ActionListener { protected JFrame fenetre; protected JPanel conteneurPrincipal; protected CardLayout layout; protected ZoneDessin ecran = new ZoneDessin(); protected MenuPrincipal menu; protected Cercle demiCercleAvant; protected Cercle demiCercleArriere; protected Ligne laligne = new Ligne(); protected Timer horloge; protected JLabel labScore; public Jeu(){ labScore = new JLabel("

score : 0

"); labScore.setBounds(20, 540, 200, 50); ecran.add(labScore); } public void demarrer() { fenetre = new JFrame("Linea"); layout = new CardLayout(); conteneurPrincipal = new JPanel(layout); menu = new MenuPrincipal(this); // Initialisation initiale resetPartie(); // On ajoute l'action au bouton créé dans ZoneDessin ecran.btnRetour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 1. On change la carte visible vers le MENU layout.show(conteneurPrincipal, "MENU"); } }); ecran.addKeyListener(this); conteneurPrincipal.add(menu, "MENU"); conteneurPrincipal.add(ecran, "JEU"); fenetre.setContentPane(conteneurPrincipal); fenetre.pack(); fenetre.setLocationRelativeTo(null); fenetre.setVisible(true); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void lancerPartie() { resetPartie(); layout.show(conteneurPrincipal, "JEU"); ecran.setFocusable(true); ecran.requestFocusInWindow(); horloge.start(); } private void resetPartie() { if(horloge != null) { horloge.stop(); } horloge = new Timer(40, this); demiCercleAvant = new Cercle(90, -180); demiCercleArriere = new Cercle(90, 180); laligne = new Ligne(); demiCercleArriere.setCouleur(new Color(0.8f, 0.0f, 0.0f)); demiCercleAvant.setCouleur(new Color(1.0f, 0.2f, 0.2f)); ecran.viderObjets(); ecran.ajouterObjet(demiCercleArriere); ecran.ajouterObjet(demiCercleAvant); ecran.ajouterObjet(laligne); ecran.setGameOver(false); labScore.setText("

score : 0

"); } @Override public void actionPerformed(ActionEvent e) { ecran.traiterBoucleAnimation(); // Gestion collision simple if (Math.abs(laligne.getHauteurLigneA(400) - demiCercleAvant.getY()) > 30) { gameOver(); } } public void gameOver() { horloge.stop(); ecran.setGameOver(true); // Affiche "Game Over" et le bouton Retour } // Gestion touches... @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == 38) { demiCercleAvant.Monter(); demiCercleArriere.Monter(); } } @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == 38) { demiCercleAvant.ArreterMonter(); demiCercleArriere.ArreterMonter(); } } @Override public void keyTyped(KeyEvent e) {} }