Files
SAE21_2025/ControleurJeu.java
T

71 lines
2.2 KiB
Java
Raw Normal View History

2026-04-07 16:21:33 +02:00
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
2026-04-12 16:40:07 +02:00
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
import javax.swing.JOptionPane;
2026-04-07 16:21:33 +02:00
2026-04-12 16:40:07 +02:00
/**
* Observateur gérant le bouton situé en bas de la fenêtre de jeu.
*/
2026-04-07 16:21:33 +02:00
public class ControleurJeu implements ActionListener {
2026-04-12 16:40:07 +02:00
/** 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. */
2026-04-07 16:21:33 +02:00
private FenetreJeu fenetre;
2026-04-12 16:40:07 +02:00
/**
* Constructeur de l'écouteur du bouton de jeu.
* @param fenetreJeu la fenêtre à observer.
*/
public ControleurJeu(FenetreJeu fenetreJeu) {
this.fenetre = fenetreJeu;
2026-04-07 16:21:33 +02:00
}
2026-04-12 16:40:07 +02:00
/**
* Agit selon l'état de la partie : retourne au menu ou sauvegarde la progression.
* @param evenement le clic sur le bouton.
*/
2026-04-07 16:21:33 +02:00
@Override
2026-04-12 16:40:07 +02:00
public void actionPerformed(ActionEvent evenement) {
2026-04-07 16:21:33 +02:00
if (fenetre.getGrille().isPartieTerminee()) {
2026-04-12 16:40:07 +02:00
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 !");
2026-04-07 16:21:33 +02:00
}
}
}