import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.IOException; import javax.swing.JOptionPane; /** * Observateur gérant le bouton situé en bas de la fenêtre de jeu. */ public class ControleurJeu implements ActionListener { /** Constante définissant le nom du fichier de sauvegarde. */ private static final String NOM_FICHIER_SAUVEGARDE = "sauvegarde.dat"; /** Constante définissant le code de sortie normal de l'application. */ private static final int CODE_SORTIE_NORMALE = 0; /** Référence à la fenêtre de jeu actuellement ouverte. */ private FenetreJeu fenetre; /** * Constructeur de l'écouteur du bouton de jeu. * @param fenetreJeu la fenêtre à observer. */ public ControleurJeu(FenetreJeu fenetreJeu) { this.fenetre = fenetreJeu; } /** * Agit selon l'état de la partie : retourne au menu ou sauvegarde la progression. * @param evenement le clic sur le bouton. */ @Override public void actionPerformed(ActionEvent evenement) { if (fenetre.getGrille().isPartieTerminee()) { retournerAuMenu(); } else { sauvegarderEtQuitter(); } } /** * Ferme la partie et rouvre une nouvelle instance du menu principal. */ private void retournerAuMenu() { this.fenetre.dispose(); MenuPrincipal nouveauMenu = new MenuPrincipal(); nouveauMenu.setVisible(true); } /** * Grave la grille en mémoire dans un fichier et ferme l'application. */ private void sauvegarderEtQuitter() { try { FileOutputStream fluxSortie = new FileOutputStream(NOM_FICHIER_SAUVEGARDE); ObjectOutputStream graveurObjet = new ObjectOutputStream(fluxSortie); graveurObjet.writeObject(fenetre.getGrille()); graveurObjet.close(); fluxSortie.close(); System.exit(CODE_SORTIE_NORMALE); } catch (IOException exception) { JOptionPane.showMessageDialog(fenetre, "Erreur lors de la sauvegarde !"); } } }