Ajout de commentaire + simplication code

This commit is contained in:
Justine Yannis 2022-10-26 14:42:43 +02:00
parent a3f51bada2
commit 75d7cb20c8
11 changed files with 120 additions and 54 deletions

View File

@ -18,7 +18,7 @@ public class ObservateurFenetre implements WindowListener{
} // après fermeture
public void windowClosing(WindowEvent evenement){
int confirmation = JOptionPane.showConfirmDialog(this.fenetre.getContentPane(), "Etes-vous sûr de vouloir fermer la fenetre ?", "Quitter", JOptionPane.YES_NO_OPTION);
if(confirmation == 1) return;
if(confirmation != JOptionPane.OK_OPTION) return;
this.fenetre.dispose();
} // avant fermeture
public void windowDeactivated(WindowEvent evenement){

View File

@ -17,13 +17,9 @@ public class ModelEventListener implements GridChangedListener {
}
@Override
public void playerChanged(StatusEvent e) {
public void statusChanged(StatusEvent e) {
this.panel.changeLabel(e.getPlayerTurn());
this.panel.changeHoverColor(e.getPlayerTurn());
}
@Override
public void statusChanged(StatusEvent e) {
this.panel.setGameStatus(e.getStatus(), e.getPlayerTurn(), e.getPlayerOneScore(), e.getPlayerTwoScore());
}
}

View File

@ -42,6 +42,7 @@ public class Puissance4Controller {
this.panel.init();
this.panel.changeHoverColor(this.modele.getPlayerTurn());
this.panel.changeLabel(this.modele.getPlayerTurn());
this.panel.changeScore(this.modele.getPlayerOneScore(), this.modele.getPlayerTwoScore());
}
public void reset() {
@ -55,6 +56,11 @@ public class Puissance4Controller {
this.panel.changeLabel(this.modele.getPlayerTurn());
}
/**
* Vérifie si un pion peut-être placé dans la colonne
* @param x la position de la souris lors du clic
* @see fr.iutfbleau.projetAgile.Puissance4.Model.GrilleModel#verifyColumn(int)
*/
public void verifyColumn(int x) {
if(this.modele.getGameStatus() == GameStatus.PLAYING) {
int column = (x * this.modele.getColumn() / grille.getWidth());
@ -77,6 +83,11 @@ public class Puissance4Controller {
return this.panel;
}
/**
* Ajoute un listener au bouton du panneau
* @param l Le listener
* @see fr.iutfbleau.projetAgile.Puissance4.View.Puissance4Panel#accueilButton(ActionListener)
*/
public void accueilButton(ActionListener l){
this.panel.accueilButton(l);
}

View File

@ -3,6 +3,9 @@ package fr.iutfbleau.projetAgile.Puissance4.Event;
import javax.swing.event.EventListenerList;
import fr.iutfbleau.projetAgile.Puissance4.Utils.GameStatus;
/**
* Classe abstraite qui factorise les fonctions pour la classe observé (Initiater)
*/
public abstract class AbstractGridInitiater {
protected EventListenerList listeners = new EventListenerList();
@ -46,23 +49,12 @@ public abstract class AbstractGridInitiater {
}
}
/**
* Notifie tous les listeners lorsque le joueur change
* @param status
* @param playerTurn
*/
protected void firePlayerChanged(GameStatus status, int playerTurn, int playerOneScore, int playerTwoScore) {
StatusEvent event = null;
for(GridChangedListener listener : getGridListeners()) {
if(event == null)
event = new StatusEvent(status, playerTurn, playerOneScore, playerTwoScore);
listener.playerChanged(event);
}
}
/**
* Notifie tous les listeners lorsque le status du jeu change
* @param status Le nouveau status
* @param playerTurn Le tour du joueur
* @param playerOneScore Le score du joueur 1
* @param playerTwoScore Le score du joueur 2
*/
protected void fireStatusChanged(GameStatus status, int playerTurn, int playerOneScore, int playerTwoScore) {
StatusEvent event = null;

View File

@ -2,6 +2,9 @@ package fr.iutfbleau.projetAgile.Puissance4.Event;
import java.util.EventListener;
/**
* Interface des listeners de la grille
*/
public interface GridChangedListener extends EventListener{
/**
* Méthode invoqué lorsque la grille est modifié
@ -9,15 +12,9 @@ public interface GridChangedListener extends EventListener{
*/
void gridChanged(GridEvent e);
/**
* Méthode invoqué lorsque le tour du joueur est modifié
* @param e Evenement contenant l'ancien joueur et le nouveau
*/
void playerChanged(StatusEvent e);
/**
* Méthode invoqué lorsque le tour du joueur est modifié
* @param e Evenement contenant l'ancien joueur et le nouveau
* Méthode invoqué lorsque le tour du joueur est modifié ou que le status du jeu est modifié
* @param e Evenement contenant les informations sur le status du jeu
*/
void statusChanged(StatusEvent e);

View File

@ -1,12 +1,15 @@
package fr.iutfbleau.projetAgile.Puissance4.Event;
/**
* Evenement représentant un changement dans la grille
*/
public class GridEvent {
private int column;
private int row;
private int player;
/**
* Evenement représentant le changement dans la grille
* Crée un évènement
* @param column la colonne modifié
* @param row la ligne modifié
* @param player le joueur qui a joué

View File

@ -2,13 +2,21 @@ package fr.iutfbleau.projetAgile.Puissance4.Event;
import fr.iutfbleau.projetAgile.Puissance4.Utils.GameStatus;
/**
* Evenement représentant le changement de status du jeu
*/
public class StatusEvent {
private GameStatus status;
private int playerTurn;
private int playerOneScore;
private int playerTwoScore;
/**
* Evenement représentant le changement de status du jeu
* Crée un évènement
* @param status le status du jeu
* @param playerTurn le tour du joueur
* @param playerOneScore le score du joueur 1
* @param playerTwoScore le score du joueur 2
*/
public StatusEvent(GameStatus status, int playerTurn, int playerOneScore, int playerTwoScore) {
this.status = status;
@ -25,14 +33,26 @@ public class StatusEvent {
return this.status;
}
/**
* Retourne le tour du joueur
* @return Le tour du joueur
*/
public int getPlayerTurn() {
return this.playerTurn;
}
/**
* Retourne le score du joueur 1
* @return Le score du joueur 1
*/
public int getPlayerOneScore() {
return playerOneScore;
}
/**
* Retourne le score du joueur 2
* @return Le score du joueur 2
*/
public int getPlayerTwoScore() {
return playerTwoScore;
}

View File

@ -36,12 +36,16 @@ public class LancementPartie {
if (choix == JOptionPane.OK_OPTION) {
J1 = field1.getText();
J2 = field2.getText();
if(J1.length() > 10)
J1 = J1.substring(0, 9);
if(J2.length() > 10)
J2 = J2.substring(0, 9);
nameCorrect = true;
if(J1.isEmpty() || J2.isEmpty()) {
JOptionPane.showMessageDialog(fenetre,"Un des noms est vides","Erreur ", JOptionPane.ERROR_MESSAGE);
nameCorrect = false;
}
if(J1.compareTo(J2) == 0) {
else if(J1.compareTo(J2) == 0) {
JOptionPane.showMessageDialog(fenetre,"Les deux noms sont identiques","Erreur ", JOptionPane.ERROR_MESSAGE);
nameCorrect = false;
}

View File

@ -144,7 +144,7 @@ public class GrilleModel extends AbstractGridInitiater{
*/
public void switchPlayer() {
this.playerTurn = this.playerTurn == Constants.PLAYER_ONE ? Constants.PLAYER_TWO : Constants.PLAYER_ONE;
firePlayerChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore);
fireStatusChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore);
}
public int getPlayerTurn() {
@ -171,11 +171,20 @@ public class GrilleModel extends AbstractGridInitiater{
return this.playerTwoName;
}
public int getPlayerOneScore() {
return playerOneScore;
}
public int getPlayerTwoScore() {
return playerTwoScore;
}
public GameStatus getGameStatus() {
return this.gameStatus;
}
/**
* Change le status de la partie et notifie tous les listeners
* @param gameStatus le status de la partie
*/
public void setPartyStatus(GameStatus gameStatus) {
this.gameStatus = gameStatus;

View File

@ -37,7 +37,7 @@ public class Pion extends JComponent{
}
/**
* Change le "propriétaire" du pion
* @param player
* @param player le joueur
*/
public void setPlayer(int player) {
this.player = player;
@ -58,7 +58,7 @@ public class Pion extends JComponent{
}
/**
* Set la couleur de survol d'un pion
* @param c
* @param c la couleur du survol
*/
public static void setHighlightColor(Color c) {
Pion.HIGHLIGHT_COLOR = c;

View File

@ -15,7 +15,8 @@ public class Puissance4Panel extends JPanel{
private JButton reset;
private JButton menu;
private JLabel label;
private JLabel playerTurn;
private JLabel score;
private Grille grille;
private String playerOneName;
private String playerTwoName;
@ -28,7 +29,8 @@ public class Puissance4Panel extends JPanel{
super();
this.reset = new JButton("RECOMMENCER");
this.menu = new JButton("ACCUEIL");
this.label = new JLabel();
this.playerTurn = new JLabel();
this.score = new JLabel();
this.grille = grille;
}
@ -76,15 +78,12 @@ public class Puissance4Panel extends JPanel{
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 1.75;
gbc.weightx = 1;
gbc.weighty = 0;
gbc.insets = new Insets(0, 0, 0, 0);
this.add(this.grille, gbc);
JPanel panneauBas = new JPanel(new FlowLayout());
panneauBas.add(this.label);
panneauBas.add(this.reset);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.NONE;
@ -93,12 +92,37 @@ public class Puissance4Panel extends JPanel{
gbc.gridheight = 1;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.insets = new Insets(50, 0, 0, 0);
gbc.insets = new Insets(5, 0, 0, 0);
panneauBas.setOpaque(false);
label.setForeground(Color.WHITE);
label.setFont(new Font("",Font.BOLD, 20));
this.add(panneauBas, gbc);
playerTurn.setForeground(Color.WHITE);
playerTurn.setFont(new Font("",Font.BOLD, 20));
this.add(this.playerTurn, gbc);
gbc.gridx = 1;
gbc.gridy = 3;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.insets = new Insets(5, 0, 0, 0);
score.setForeground(new Color(183,183,183));
score.setFont(new Font("",Font.BOLD, 20));
this.add(this.score, gbc);
gbc.gridx = 1;
gbc.gridy = 4;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.insets = new Insets(10, 0, 0, 0);
this.add(this.reset, gbc);
reset.setBackground(new Color(255,64,64));
reset.setForeground(Color.WHITE);
@ -123,22 +147,31 @@ public class Puissance4Panel extends JPanel{
* Change le texte affichant le tour du joueur
* @param player le joueur qui joue
*/
public void changeLabel(int joueur) {
switch(joueur){
public void changeLabel(int player) {
switch(player){
case Constants.PLAYER_ONE:
this.label.setText("Tour de : " + this.playerOneName);
this.playerTurn.setText("Tour de : " + this.playerOneName);
break;
case Constants.PLAYER_TWO:
this.label.setText("Tour de : " + this.playerTwoName);
this.playerTurn.setText("Tour de : " + this.playerTwoName);
break;
default:
this.label.setText("JOUEUR INCONNU");
this.playerTurn.setText("JOUEUR INCONNU");
break;
}
}
/**
* Change le texte affichant le score des joueurs
* @param playerOneScore le score du joueur 1
* @param playerTwoScore le score du joueur 2
*/
public void changeScore(int playerOneScore, int playerTwoScore) {
this.score.setText(this.playerOneName + " : " + playerOneScore + " - " + playerTwoScore + " : " + this.playerTwoName);
}
/**
* Change le propriétaire d'un pion et le redessine
* @param column la colonne du pion a changer
@ -160,23 +193,23 @@ public class Puissance4Panel extends JPanel{
this.grille.hover(-1);
switch(status){
case WIN:
this.label.setText("Victoire de : " + (playerTurn == Constants.PLAYER_ONE ? this.playerOneName : this.playerTwoName));
System.out.println("Score : " + playerOneName + " = " + playerOneScore + " " + playerTwoName + " = " + playerTwoScore);
this.playerTurn.setText("Victoire de : " + (playerTurn == Constants.PLAYER_ONE ? this.playerOneName : this.playerTwoName));
break;
case DRAW:
this.label.setText("Egalité");
this.playerTurn.setText("Egalité");
break;
default:
this.changeLabel(playerTurn);
break;
}
this.changeScore(playerOneScore, playerTwoScore);
}
/**
* Permet de définir le nom du joueur 1
* @param playerOneName le nom du joueur
*/
public void setPlayerOneName(String playerOneName) {
this.playerOneName = playerOneName;
@ -184,6 +217,7 @@ public class Puissance4Panel extends JPanel{
/**
* Permet de définir le nom du joueur 2
* @param playerTwoName le nom du joueur
*/
public void setPlayerTwoName(String playerTwoName) {
this.playerTwoName = playerTwoName;