From 669ba0f74f9708945963610be79a0742d2254a62 Mon Sep 17 00:00:00 2001 From: martins Date: Thu, 10 Nov 2022 11:35:05 +0100 Subject: [PATCH] ajout fonction supprimer les pions --- projetAgile/Makefile | 6 +++- .../projetAgile/Menu/View/BoutonsMenu.java | 1 + .../Controller/ModelEventListener.java | 5 +++ .../Event/AbstractGridInitiater.java | 10 ++++++ .../Puissance4/Event/GridChangedListener.java | 6 ++++ .../Puissance4/Event/PlayerEvent.java | 21 ++++++++++++ .../Puissance4/Model/GrilleModel.java | 34 +++++++++++++++++-- .../Puissance4/Utils/GameStatus.java | 1 + .../projetAgile/Puissance4/View/Grille.java | 16 +++++++++ .../Puissance4/View/Puissance4Panel.java | 10 ++++++ 10 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/PlayerEvent.java diff --git a/projetAgile/Makefile b/projetAgile/Makefile index b9f1c51..754008e 100644 --- a/projetAgile/Makefile +++ b/projetAgile/Makefile @@ -14,7 +14,8 @@ Utils = build/$(PACKAGE_PATH)/Puissance4/Utils/Constants.class \ Events = build/$(PACKAGE_PATH)/Puissance4/Event/GridChangedListener.class \ build/$(PACKAGE_PATH)/Puissance4/Event/GridEvent.class \ - build/$(PACKAGE_PATH)/Puissance4/Event/StatusEvent.class + build/$(PACKAGE_PATH)/Puissance4/Event/StatusEvent.class \ + build/$(PACKAGE_PATH)/Puissance4/Event/PlayerEvent.class Model = build/$(PACKAGE_PATH)/Puissance4/Model/GrilleModel.class @@ -45,6 +46,9 @@ build/$(PACKAGE_PATH)/Puissance4/Event/AbstractGridInitiater.class : src/$(PACKA $(Events) @javac $(@JAVAC_OPT) $< +build/$(PACKAGE_PATH)/Puissance4/Event/PlayerEvent.class : src/$(PACKAGE_PATH)/Puissance4/Event/PlayerEvent.java + @javac $(@JAVAC_OPT) $< + #------- Controleur ------ build/$(PACKAGE_PATH)/Menu/Controleur/ObservateurAccueil.class : src/$(PACKAGE_PATH)/Menu/Controller/ObservateurAccueil.java diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/BoutonsMenu.java b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/BoutonsMenu.java index 011c1f4..1166a92 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/BoutonsMenu.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Menu/View/BoutonsMenu.java @@ -66,6 +66,7 @@ public class BoutonsMenu extends JComponent{ }else{ secondPinceau.drawImage(this.img, 0, 0, this.getWidth(), this.getHeight(), this); secondPinceau.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), this.getWidth()/100*9, this.getHeight()/100*29); + } secondPinceau.setColor(new Color(255, 255, 255)); secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/10))); diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ModelEventListener.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ModelEventListener.java index b128c93..669651c 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ModelEventListener.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Controller/ModelEventListener.java @@ -22,4 +22,9 @@ public class ModelEventListener implements GridChangedListener { this.panel.changeHoverColor(e.getPlayerTurn()); this.panel.setGameStatus(e.getStatus(), e.getPlayerTurn(), e.getPlayerOneScore(), e.getPlayerTwoScore()); } + + @Override + public void playerRemove(PlayerEvent e){ + this.panel.RemovePlayer(e.getJ(), e.getGrille()); + } } diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/AbstractGridInitiater.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/AbstractGridInitiater.java index 2287cd3..bf6353c 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/AbstractGridInitiater.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/AbstractGridInitiater.java @@ -64,4 +64,14 @@ public abstract class AbstractGridInitiater { listener.statusChanged(event); } } + + protected void firePlayerChanged(int playerRemove, int[][] grille){ + PlayerEvent event=null; + for(GridChangedListener listener : getGridListeners()) { + if(event == null) + event= new PlayerEvent(playerRemove, grille); + listener.playerRemove(event); + } + + } } diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/GridChangedListener.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/GridChangedListener.java index c17c426..a07c853 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/GridChangedListener.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/GridChangedListener.java @@ -17,5 +17,11 @@ public interface GridChangedListener extends EventListener{ * @param e Evenement contenant les informations sur le status du jeu */ void statusChanged(StatusEvent e); + + /** + * Méthode invoqué lors de la suppréssion d'un joueur + * @param e evenement du joueur a supprimé + */ + void playerRemove(PlayerEvent e); } diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/PlayerEvent.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/PlayerEvent.java new file mode 100644 index 0000000..19fb482 --- /dev/null +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Event/PlayerEvent.java @@ -0,0 +1,21 @@ +package fr.iutfbleau.projetAgile.Puissance4.Event; + +/** + * evénement lors de la supprésion d'un joueur + */ +public class PlayerEvent { + private int J; + private int[][] grille; + + public PlayerEvent(int j0, int[][] grille0){ + this.J=j0; + this.grille=grille0; + } + public int getJ() { + return J; + } + + public int[][] getGrille() { + return grille; + } +} diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Model/GrilleModel.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Model/GrilleModel.java index 9c55bef..44a94d8 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Model/GrilleModel.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Model/GrilleModel.java @@ -80,7 +80,7 @@ public class GrilleModel extends AbstractGridInitiater{ int diagonalRow = row; //Vérification horizontal et vertical if(verifyAlignedPiece(column, 0, 0, 1, playerColor) || verifyAlignedPiece(0, row, 1, 0, playerColor)) { - this.setPartyStatus(GameStatus.WIN); + this.setPartyStatus(GameStatus.FIRST); return true; } @@ -153,13 +153,43 @@ public class GrilleModel extends AbstractGridInitiater{ */ public void setPartyStatus(GameStatus gameStatus) { this.gameStatus = gameStatus; - if(gameStatus == GameStatus.WIN) { + if(gameStatus == GameStatus.WIN || gameStatus == GameStatus.FIRST) { if(this.playerTurn == Constants.PLAYER_ONE) playerOneScore++; else playerTwoScore++; } fireStatusChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore); + if(this.gameStatus==GameStatus.FIRST){ + this.removePlayerPion(); + firePlayerChanged(this.playerTurn, this.grille); + this.gameStatus=GameStatus.PLAYING; + fireStatusChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore); + } + } + + /** + * retire les pions du joueur qui viens de gagner + */ + private void removePlayerPion(){ + for(int i=0; i=0; i--){ + if(i>0){ + col[i]=col[i-1]; + }else{ + col[0]=Constants.EMPTY_PLAYER; + } + } } /** diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/GameStatus.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/GameStatus.java index b74bace..3cfc643 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/GameStatus.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/Utils/GameStatus.java @@ -4,6 +4,7 @@ package fr.iutfbleau.projetAgile.Puissance4.Utils; * Enumeration du status d'une partie (En cours, gagné, égalité) */ public enum GameStatus { + FIRST, /** * Status d'une partie en cours */ diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Grille.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Grille.java index 6434fdc..0d48344 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Grille.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Grille.java @@ -81,6 +81,18 @@ public class Grille extends JPanel{ this.repaint(); } + public void RemovePlayer(int Joueur, int[][] j){ + for (int x = 0; x < this.column; x++) { + for (int y = 0; y < this.row; y++) { + this.grille[x][y].setPlayer(j[x][y]); + this.grille[x][y].setHover(false); + } + } + this.repaint(); + } + + + /** * Change la couleur de survol des pions selon le tour du joueur * @param player le joueur qui joue @@ -134,4 +146,8 @@ public class Grille extends JPanel{ } } } + + public void removePlayerPion(int Joueur){ + + } } \ No newline at end of file diff --git a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Puissance4Panel.java b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Puissance4Panel.java index 7162861..b0d76af 100644 --- a/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Puissance4Panel.java +++ b/projetAgile/src/fr/iutfbleau/projetAgile/Puissance4/View/Puissance4Panel.java @@ -200,6 +200,10 @@ public class Puissance4Panel extends JPanel{ this.playerTurn.setText("Egalité"); break; + case FIRST: + JOptionPane.showMessageDialog(this, "Victoire de : " + (playerTurn == Constants.PLAYER_ONE ? this.playerOneName : this.playerTwoName), "Victoire", JOptionPane.DEFAULT_OPTION); + break; + default: this.changeLabel(playerTurn); break; @@ -207,6 +211,12 @@ public class Puissance4Panel extends JPanel{ this.changeScore(playerOneScore, playerTwoScore); } + public void RemovePlayer(int Player, int[][] grille){ + this.grille.RemovePlayer(Player, grille); + this.changeHoverColor(Player); + this.changeLabel(Player); + } + /** * Permet de définir le nom du joueur 1 * @param playerOneName le nom du joueur