ajout d'un menu de fin et de pouvoir quitter
This commit is contained in:
153
fr/iut_fbleau/Avalam/EndGameDialog.java
Normal file
153
fr/iut_fbleau/Avalam/EndGameDialog.java
Normal file
@@ -0,0 +1,153 @@
|
||||
package fr.iut_fbleau.Avalam;
|
||||
|
||||
import fr.iut_fbleau.GameAPI.Result;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Fenêtre de fin de partie.
|
||||
* Affiche le gagnant, le score et propose plusieurs actions :
|
||||
* - Rejouer la même configuration
|
||||
* - Retour au menu principal
|
||||
* - Quitter le jeu
|
||||
*/
|
||||
public class EndGameDialog extends JDialog {
|
||||
|
||||
/**
|
||||
* Construit la fenêtre de fin de partie.
|
||||
*
|
||||
* @param parent fenêtre principale (AvalamWindow)
|
||||
* @param result résultat de la partie (WIN / LOSS / DRAW du point de vue de PLAYER1 / Jaune)
|
||||
* @param scoreJaune score du joueur jaune
|
||||
* @param scoreRouge score du joueur rouge
|
||||
* @param mode mode de jeu courant (pour l'information / le rejouer)
|
||||
* @param depth profondeur utilisée (pour les modes avec bot intelligent)
|
||||
* @param onReplay action à exécuter pour rejouer
|
||||
* @param onMenu action à exécuter pour revenir au menu
|
||||
* @param onQuit action à exécuter pour quitter l'application
|
||||
*/
|
||||
public EndGameDialog(
|
||||
JFrame parent,
|
||||
Result result,
|
||||
int scoreJaune,
|
||||
int scoreRouge,
|
||||
GameMode mode,
|
||||
int depth,
|
||||
Runnable onReplay,
|
||||
Runnable onMenu,
|
||||
Runnable onQuit
|
||||
) {
|
||||
super(parent, "Fin de partie", true);
|
||||
|
||||
setLayout(new BorderLayout(10, 10));
|
||||
|
||||
// Panel principal d'information
|
||||
JPanel infoPanel = new JPanel();
|
||||
infoPanel.setLayout(new BoxLayout(infoPanel, BoxLayout.Y_AXIS));
|
||||
infoPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
|
||||
JLabel titre = new JLabel("Partie terminée");
|
||||
titre.setFont(titre.getFont().deriveFont(Font.BOLD, 18f));
|
||||
titre.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
|
||||
String gagnant;
|
||||
switch (result) {
|
||||
case WIN:
|
||||
gagnant = "Le joueur JAUNE a gagné !";
|
||||
break;
|
||||
case LOSS:
|
||||
gagnant = "Le joueur ROUGE a gagné !";
|
||||
break;
|
||||
case DRAW:
|
||||
gagnant = "Égalité parfaite !";
|
||||
break;
|
||||
default:
|
||||
gagnant = "Fin de partie.";
|
||||
}
|
||||
|
||||
JLabel gagnantLabel = new JLabel(gagnant);
|
||||
gagnantLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
|
||||
JLabel scoreLabel = new JLabel(
|
||||
"Score - Jaune : " + scoreJaune + " | Rouge : " + scoreRouge
|
||||
);
|
||||
scoreLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
|
||||
JLabel modeLabel = new JLabel("Mode : " + modeToString(mode, depth));
|
||||
modeLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
|
||||
infoPanel.add(titre);
|
||||
infoPanel.add(Box.createVerticalStrut(10));
|
||||
infoPanel.add(gagnantLabel);
|
||||
infoPanel.add(Box.createVerticalStrut(5));
|
||||
infoPanel.add(scoreLabel);
|
||||
infoPanel.add(Box.createVerticalStrut(5));
|
||||
infoPanel.add(modeLabel);
|
||||
|
||||
add(infoPanel, BorderLayout.CENTER);
|
||||
|
||||
// Panel des boutons d'action
|
||||
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 15, 10));
|
||||
|
||||
JButton replayButton = new JButton("Rejouer");
|
||||
replayButton.addActionListener(e -> {
|
||||
if (onReplay != null) {
|
||||
onReplay.run();
|
||||
}
|
||||
dispose();
|
||||
});
|
||||
|
||||
JButton menuButton = new JButton("Menu principal");
|
||||
menuButton.addActionListener(e -> {
|
||||
if (onMenu != null) {
|
||||
onMenu.run();
|
||||
}
|
||||
dispose();
|
||||
});
|
||||
|
||||
JButton quitButton = new JButton("Quitter");
|
||||
quitButton.addActionListener(e -> {
|
||||
if (onQuit != null) {
|
||||
onQuit.run();
|
||||
}
|
||||
dispose();
|
||||
});
|
||||
|
||||
buttonPanel.add(replayButton);
|
||||
buttonPanel.add(menuButton);
|
||||
buttonPanel.add(quitButton);
|
||||
|
||||
add(buttonPanel, BorderLayout.SOUTH);
|
||||
|
||||
pack();
|
||||
setResizable(false);
|
||||
setLocationRelativeTo(parent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne une description lisible du mode de jeu courant.
|
||||
*
|
||||
* @param mode mode de jeu
|
||||
* @param depth profondeur (pour les bots intelligents)
|
||||
* @return chaîne décrivant le mode
|
||||
*/
|
||||
private String modeToString(GameMode mode, int depth) {
|
||||
switch (mode) {
|
||||
case PVP:
|
||||
return "Joueur vs Joueur";
|
||||
case PVBOT:
|
||||
return "Joueur vs Bot idiot";
|
||||
case PVALPHA:
|
||||
return "Joueur vs Bot Alpha (profondeur " + depth + ")";
|
||||
case PVGOD:
|
||||
return "Joueur vs Bot Divin (profondeur " + depth + ")";
|
||||
case ARENA:
|
||||
return "Arène (bots)"; // normalement non utilisé ici
|
||||
default:
|
||||
return mode.name();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user