71 lines
2.2 KiB
Java
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 !");
|
|
}
|
|
}
|
|
}
|