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(); // MENUS protected MenuPrincipal menu; protected MenuCampagne menuCampagne; protected Cercle demiCercleAvant; protected Cercle demiCercleArriere; protected Ligne laligne = new Ligne(); protected Timer horloge; protected JLabel labScore; protected int score; public Jeu(){ score = 0; 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); score = 0; menu = new MenuPrincipal(this); menuCampagne = new MenuCampagne(this); // Initialisation initiale resetPartie(); // On ajoute l'action au bouton "Retour" de la ZoneDessin (Game Over) ecran.btnRetour.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { afficherMenuPrincipal(); } }); ecran.addKeyListener(this); conteneurPrincipal.add(menu, "MENU"); conteneurPrincipal.add(menuCampagne, "CAMPAGNE"); conteneurPrincipal.add(ecran, "JEU"); fenetre.setContentPane(conteneurPrincipal); fenetre.pack(); fenetre.setLocationRelativeTo(null); fenetre.setVisible(true); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void afficherMenuCampagne() { layout.show(conteneurPrincipal, "CAMPAGNE"); } public void afficherMenuPrincipal() { layout.show(conteneurPrincipal, "MENU"); } public void lancerNiveau(int numeroNiveau) { System.out.println("Lancement du niveau " + numeroNiveau); // Ici tu pourras configurer la difficulté selon le niveau lancerPartie(); } 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); score = 0; labScore.setText("

score : 0

"); } @Override public void actionPerformed(ActionEvent e) { ecran.traiterBoucleAnimation(); score ++; labScore.setText("

score : " + score+"

"); // Gestion collision simple double hauteurLigne = laligne.getHauteurLigneA(400); if (hauteurLigne != -1) { // calcule de la distance entre le centre du cercle et la ligne double distance = Math.abs(hauteurLigne - demiCercleAvant.getY()); // Si cette distance est strictement supérieure au rayon du bouclier, // cela signifie que la ligne est sortie de la bulle ! if (distance > demiCercleAvant.getRayon()) { gameOver(); } } else { // Si on arrive au bout de la ligne 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) {} }