Files
SAE21_2025/ControleurJeu.java
2026-04-12 16:40:07 +02:00

71 lines
2.2 KiB
Java

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 !");
}
}
}