Vérification après la première victoire + regroupement de code dans fonctions
This commit is contained in:
parent
7a1d8aadac
commit
e688fb131a
@ -133,7 +133,8 @@ build/$(PACKAGE_PATH)/Menu/View/Menu.class : src/$(PACKAGE_PATH)/Menu/View/Menu.
|
||||
build/$(PACKAGE_PATH)/Menu/Controller/ObservateurMenuSouris.class \
|
||||
build/$(PACKAGE_PATH)/Menu/View/BoutonsMenu.class \
|
||||
build/$(PACKAGE_PATH)/Menu/Controller/ObservateurFenetre.class \
|
||||
build/$(PACKAGE_PATH)/Puissance4/LancementPuissance4.class
|
||||
build/$(PACKAGE_PATH)/Menu/Controleur/ObservateurAccueil.class \
|
||||
build/$(PACKAGE_PATH)/Puissance4/LancementPuissance4.class
|
||||
@javac $(@JAVAC_OPT) $<
|
||||
|
||||
|
||||
|
@ -0,0 +1,5 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Menu groupe toutes les classes qui controllent le menu (Listener)
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Menu.Controller;
|
||||
//Fichier vide pour la javadoc
|
@ -9,6 +9,7 @@ import fr.iutfbleau.projetAgile.Jeu;
|
||||
import fr.iutfbleau.projetAgile.Menu.Controller.*;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.LancementPuissance4;
|
||||
import java.awt.event.WindowListener;
|
||||
import java.util.concurrent.CancellationException;
|
||||
|
||||
public abstract class Menu{
|
||||
public static String PUISSANCE_4="puissance4";
|
||||
@ -141,7 +142,7 @@ public abstract class Menu{
|
||||
if(g==Menu.PUISSANCE_4){
|
||||
try{
|
||||
jeu = new LancementPuissance4(Menu.frame);
|
||||
}catch(Exception e){
|
||||
}catch(CancellationException e){
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Menu groupe toutes les classes de la vue du menu
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Menu.View;
|
||||
//Fichier vide pour la javadoc
|
@ -44,10 +44,12 @@ public class Puissance4Controller {
|
||||
*/
|
||||
public void initPanel() {
|
||||
this.panel.init();
|
||||
this.panel.setPlayerNumber(this.modele.getPlayerNumber());
|
||||
this.panel.changeHoverColor(this.modele.getPlayerTurn());
|
||||
this.panel.changeLabel(this.modele.getPlayerTurn());
|
||||
this.panel.changeScore(this.modele.getPlayerOneScore(), this.modele.getPlayerTwoScore(), this.modele.getPlayerThreeScore());
|
||||
if(this.modele.getPlayerNumber() == 2)
|
||||
this.panel.changeScore(this.modele.getPlayerOneScore(), this.modele.getPlayerTwoScore());
|
||||
else
|
||||
this.panel.changeScore(this.modele.getPlayerOneScore(), this.modele.getPlayerTwoScore(), this.modele.getPlayerThreeScore());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -63,10 +65,6 @@ public class Puissance4Controller {
|
||||
}
|
||||
this.grille.reset();
|
||||
this.modele.reset();
|
||||
if(this.modele.getPlayerThreeName() != null) {
|
||||
this.modele.setPlayerNumber(3);
|
||||
this.panel.setPlayerNumber(3);
|
||||
}
|
||||
this.panel.changeHoverColor(this.modele.getPlayerTurn());
|
||||
this.panel.changeLabel(this.modele.getPlayerTurn());
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.Controller groupe toutes les classes qui controllent les évènements (Listeners) du Puissance 4
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.Controller;
|
||||
//Fichier vide pour la javadoc
|
@ -0,0 +1,5 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.Event groupe toutes les classes représentant un évènement personnalisé du Puissance 4
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.Event;
|
||||
//Fichier vide pour la javadoc
|
@ -39,6 +39,7 @@ public class LancementPuissance4 implements Jeu{
|
||||
ButtonGroup buttons = new ButtonGroup();
|
||||
buttons.add(twoPlayer);
|
||||
buttons.add(threePlayer);
|
||||
buttons.setSelected(twoPlayer.getModel(), true);
|
||||
Object[] message = {
|
||||
"Combien de joueurs ?", twoPlayer, threePlayer
|
||||
};
|
||||
|
@ -21,7 +21,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
private int playerOneScore;
|
||||
private int playerTwoScore;
|
||||
private int playerThreeScore;
|
||||
private LinkedList<Integer> tour;
|
||||
private LinkedList<Integer> playersList;
|
||||
private int playerNumber;
|
||||
/**
|
||||
* Crée le modèle et l'initialise avec des cases vides
|
||||
@ -33,34 +33,11 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
this.grille = new int[this.column][this.row];
|
||||
this.playerOneScore = 0;
|
||||
this.playerTwoScore = 0;
|
||||
this.playerThreeScore = 0;
|
||||
this.tour = new LinkedList<Integer>();
|
||||
this.tour.add(Constants.PLAYER_ONE);
|
||||
this.tour.add(Constants.PLAYER_TWO);
|
||||
if(playerNumber==3){
|
||||
this.tour.add(Constants.PLAYER_THREE);
|
||||
}
|
||||
this.playerNumber=playerNumber;
|
||||
this.reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Crée le modèle et l'initialise avec des les cases du tableau donné en arguments
|
||||
*/
|
||||
public GrilleModel(int[][] tab, int playerNumber) {
|
||||
//Faire un test pour le nombre de colonnes/lignes
|
||||
super();
|
||||
this.column = Constants.COLUMN_COUNT;
|
||||
this.row = Constants.ROW_COUNT;
|
||||
this.grille = tab;
|
||||
this.playerOneScore = 0;
|
||||
this.playerTwoScore = 0;
|
||||
this.playerThreeScore = 0;
|
||||
this.tour=new LinkedList<Integer>();
|
||||
this.tour.add(Constants.PLAYER_ONE);
|
||||
this.tour.add(Constants.PLAYER_TWO);
|
||||
if(playerNumber==3){
|
||||
this.tour.add(Constants.PLAYER_THREE);
|
||||
this.playerThreeScore = -1;
|
||||
this.playersList = new LinkedList<Integer>();
|
||||
this.resetList();
|
||||
if(playerNumber == 3){
|
||||
this.playerThreeScore = 0;
|
||||
}
|
||||
this.playerNumber=playerNumber;
|
||||
this.reset();
|
||||
@ -75,17 +52,21 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
this.grille[i][j] = Constants.EMPTY_PLAYER;
|
||||
}
|
||||
}
|
||||
this.tour.clear();
|
||||
this.tour.add(Constants.PLAYER_ONE);
|
||||
this.tour.add(Constants.PLAYER_TWO);
|
||||
if(this.playerNumber==3){
|
||||
this.tour.add(Constants.PLAYER_THREE);
|
||||
}
|
||||
this.resetList();
|
||||
this.switchPlayer();
|
||||
this.piecePlayed = 0;
|
||||
this.setPartyStatus(GameStatus.PLAYING);
|
||||
}
|
||||
|
||||
private void resetList() {
|
||||
this.playersList.clear();
|
||||
this.playersList.add(Constants.PLAYER_ONE);
|
||||
this.playersList.add(Constants.PLAYER_TWO);
|
||||
if(this.playerNumber==3){
|
||||
this.playersList.add(Constants.PLAYER_THREE);
|
||||
}
|
||||
}
|
||||
|
||||
private void addPiece(int column, int row) {
|
||||
grille[column][row] = this.playerTurn;
|
||||
fireGridChanged(column, row, this.playerTurn);
|
||||
@ -93,14 +74,14 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un pion dans une colonne si elle n'est pas complète, met à jour le status de la partie et change le tour du joueur si nécessaire
|
||||
* Ajoute un pion dans une colonne si elle n'est pas complète, met à jour le status de la partie et change le playersList du joueur si nécessaire
|
||||
* @param column La colonne dans laquelle ajouter le pion
|
||||
*/
|
||||
public void verifyColumn(int column) {
|
||||
for (int row = this.row - 1; row >= 0; row--) {
|
||||
if (grille[column][row] == Constants.EMPTY_PLAYER) {
|
||||
this.addPiece(column, row);
|
||||
if(!this.verifyWin(column, row)){
|
||||
if(!this.verifyWin(column, row, this.playerTurn)){
|
||||
this.switchPlayer();
|
||||
}
|
||||
this.verifyDraw();
|
||||
@ -109,20 +90,53 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
private void removePlayer(){
|
||||
this.increaseScore();
|
||||
this.removePlayerPion();
|
||||
this.firePlayerChanged(this.playerTurn, this.grille);
|
||||
this.playersList.pollLast();
|
||||
this.switchPlayer();
|
||||
this.verifyNewWin();
|
||||
}
|
||||
|
||||
private void verifyNewWin() {
|
||||
int firstLastPlayer = this.playersList.get(0);
|
||||
int seconfLastPlayer = this.playersList.get(1);
|
||||
boolean verifyFirstWin = this.verifyWinAll(firstLastPlayer);
|
||||
boolean verifySecondWin = this.verifyWinAll(seconfLastPlayer);
|
||||
if(verifyFirstWin && verifySecondWin) {
|
||||
this.setPartyStatus(GameStatus.DRAW);
|
||||
}
|
||||
else if(verifyFirstWin || verifySecondWin) {
|
||||
this.playerTurn = verifyFirstWin ? firstLastPlayer : seconfLastPlayer;
|
||||
this.setPartyStatus(GameStatus.WIN);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean verifyWinAll(int playerColor) {
|
||||
for(int y = 0; y < this.column; y++) {
|
||||
for(int x = this.row - 1; x >= 0; x--) {
|
||||
if(this.grille[y][x] == playerColor)
|
||||
if(verifyWin(y, x, playerColor))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si le jeton qui vient d'être joué termine la partie
|
||||
* @param column La colonne du pion qui vient d'être joué
|
||||
* @param row La ligne du pion qui vient d'être joué
|
||||
* @return Retourne true si le jeu est fini
|
||||
* @return retourne true si le jeu est fini
|
||||
*/
|
||||
private boolean verifyWin(int column, int row) {
|
||||
int playerColor = this.playerTurn;
|
||||
private boolean verifyWin(int column, int row, int playerColor) {
|
||||
int diagonalColumn = column;
|
||||
int diagonalRow = row;
|
||||
//Vérification horizontal et vertical
|
||||
if(verifyAlignedPiece(column, 0, 0, 1, playerColor) || verifyAlignedPiece(0, row, 1, 0, playerColor)) {
|
||||
if(this.tour.size()==3){
|
||||
this.Player3();
|
||||
if(this.playersList.size()==3){
|
||||
this.removePlayer();
|
||||
}else{
|
||||
this.setPartyStatus(GameStatus.WIN);
|
||||
}
|
||||
@ -135,8 +149,8 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
//Vérification diagonale haut à gauche -> bas à droite
|
||||
if(verifyAlignedPiece(diagonalColumn, diagonalRow, 1, 1, playerColor)) {
|
||||
if(this.tour.size()==3){
|
||||
this.Player3();
|
||||
if(this.playersList.size() > 2){
|
||||
this.removePlayer();
|
||||
}else{
|
||||
this.setPartyStatus(GameStatus.WIN);
|
||||
}
|
||||
@ -152,8 +166,8 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
|
||||
//Vérification diagonale haut à droite -> bas à gauche
|
||||
if(verifyAlignedPiece(diagonalColumn, diagonalRow, -1, 1, playerColor)) {
|
||||
if(this.tour.size()==3){
|
||||
this.Player3();
|
||||
if(this.playersList.size() > 2){
|
||||
this.removePlayer();
|
||||
}else{
|
||||
this.setPartyStatus(GameStatus.WIN);
|
||||
}
|
||||
@ -162,41 +176,21 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
return false;
|
||||
}
|
||||
|
||||
private void Player3(){
|
||||
switch(this.playerTurn){
|
||||
case Constants.PLAYER_ONE:
|
||||
this.playerOneScore++;
|
||||
break;
|
||||
|
||||
case Constants.PLAYER_TWO:
|
||||
this.playerTwoScore++;
|
||||
break;
|
||||
|
||||
case Constants.PLAYER_THREE:
|
||||
this.playerThreeScore++;
|
||||
break;
|
||||
}
|
||||
this.removePlayerPion();
|
||||
this.firePlayerChanged(this.playerTurn, this.grille);
|
||||
this.tour.pollLast();
|
||||
this.switchPlayer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne true si 4 jetons de la même couleur ou plus sont alignés
|
||||
* ReplayersListne true si 4 jetons de la même couleur ou plus sont alignés
|
||||
* @param numColumn La colonne où commencer
|
||||
* @param numRow La ligne où commencer
|
||||
* @param columnOffset l'offset de déplacement vertical
|
||||
* @param rowOffset l'offset de déplacement horizontal
|
||||
* @param playerColor La couleur du joueur (entier)
|
||||
* @return Retourne true si 4 jetons ou plus sont alignés
|
||||
* @return ReplayersListne true si 4 jetons ou plus sont alignés
|
||||
*/
|
||||
private boolean verifyAlignedPiece(int numColumn, int numRow, int columnOffset, int rowOffset, int playerColor) {
|
||||
int couleur = playerColor;
|
||||
int max = 0;
|
||||
int compteur = 0;
|
||||
|
||||
if(this.tour.size() == 2)
|
||||
if(this.playersList.size() == 2)
|
||||
max = Constants.ALIGNED_NUMBER_TWO;
|
||||
else
|
||||
max = Constants.ALIGNED_NUMBER_THREE;
|
||||
@ -218,16 +212,16 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
if(this.piecePlayed >= this.column * this.row)
|
||||
this.setPartyStatus(GameStatus.DRAW);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change le tour du joueur et notifie tous les listeners
|
||||
* Change le playersList du joueur et notifie tous les listeners
|
||||
*/
|
||||
public void switchPlayer() {
|
||||
this.playerTurn=(int)this.tour.pollFirst();
|
||||
this.tour.add((Integer)this.playerTurn);
|
||||
|
||||
this.playerTurn=(int)this.playersList.remove();
|
||||
this.playersList.add((Integer)this.playerTurn);
|
||||
fireStatusChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore, this.playerThreeScore);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Change le status de la partie et notifie tous les listeners
|
||||
* @param gameStatus le status de la partie
|
||||
@ -235,17 +229,21 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
public void setPartyStatus(GameStatus gameStatus) {
|
||||
this.gameStatus = gameStatus;
|
||||
if(gameStatus == GameStatus.WIN) {
|
||||
if(this.playerTurn == Constants.PLAYER_ONE)
|
||||
playerOneScore++;
|
||||
else if(this.playerTurn == Constants.PLAYER_TWO)
|
||||
playerTwoScore++;
|
||||
else
|
||||
playerThreeScore++;
|
||||
this.increaseScore();
|
||||
}
|
||||
|
||||
fireStatusChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore, this.playerThreeScore);
|
||||
}
|
||||
|
||||
|
||||
private void increaseScore() {
|
||||
if(this.playerTurn == Constants.PLAYER_ONE)
|
||||
playerOneScore++;
|
||||
else if(this.playerTurn == Constants.PLAYER_TWO)
|
||||
playerTwoScore++;
|
||||
else
|
||||
playerThreeScore++;
|
||||
}
|
||||
|
||||
/**
|
||||
* retire les pions du joueur qui viens de gagner
|
||||
*/
|
||||
@ -271,15 +269,15 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le tour du joueur
|
||||
* @return Le tour du joueur
|
||||
* ReplayersListne le playersList du joueur
|
||||
* @return Le playersList du joueur
|
||||
*/
|
||||
public int getPlayerTurn() {
|
||||
return this.playerTurn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le tableau d'entier qui représente l'état de la grille
|
||||
* ReplayersListne le tableau d'entier qui représente l'état de la grille
|
||||
* @return Le tableau d'entier
|
||||
*/
|
||||
public int[][] getTab() {
|
||||
@ -287,7 +285,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le nombre de colonne de la grille
|
||||
* ReplayersListne le nombre de colonne de la grille
|
||||
* @return Le nombre de colonne
|
||||
*/
|
||||
public int getColumn() {
|
||||
@ -295,7 +293,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le nombre de ligne de la grille
|
||||
* ReplayersListne le nombre de ligne de la grille
|
||||
* @return Le nombre de ligne
|
||||
*/
|
||||
public int getRow() {
|
||||
@ -303,7 +301,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le nom du joueur 1
|
||||
* ReplayersListne le nom du joueur 1
|
||||
* @return Un string du nom du joueur 1
|
||||
*/
|
||||
public String getPlayerOneName() {
|
||||
@ -311,7 +309,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le nom du joueur 2
|
||||
* ReplayersListne le nom du joueur 2
|
||||
* @return Un string du nom du joueur 2
|
||||
*/
|
||||
public String getPlayerTwoName() {
|
||||
@ -319,7 +317,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le nom du joueur 3
|
||||
* ReplayersListne le nom du joueur 3
|
||||
* @return Un string du nom du joueur 2
|
||||
*/
|
||||
public String getPlayerThreeName() {
|
||||
@ -328,7 +326,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
|
||||
|
||||
/**
|
||||
* Retourne le score du joueur 1
|
||||
* ReplayersListne le score du joueur 1
|
||||
* @return Le score du joueur 1
|
||||
*/
|
||||
public int getPlayerOneScore() {
|
||||
@ -336,7 +334,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le score du joueur 2
|
||||
* ReplayersListne le score du joueur 2
|
||||
* @return Le score du joueur 2
|
||||
*/
|
||||
public int getPlayerTwoScore() {
|
||||
@ -344,7 +342,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le score du joueur 3
|
||||
* ReplayersListne le score du joueur 3
|
||||
* @return Le score du joueur 3
|
||||
*/
|
||||
public int getPlayerThreeScore() {
|
||||
@ -352,7 +350,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le {@link fr.iutfbleau.projetAgile.Puissance4.Utils.GameStatus status} de la partie
|
||||
* ReplayersListne le {@link fr.iutfbleau.projetAgile.Puissance4.Utils.GameStatus status} de la partie
|
||||
* @return Le status de la partie
|
||||
*/
|
||||
public GameStatus getGameStatus() {
|
||||
@ -360,7 +358,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
public int getPlayerNumber() {
|
||||
return this.tour.size();
|
||||
return this.playersList.size();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,5 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.Model groupe toutes les classes du modèle du Puissance 4
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.Model;
|
||||
//Fichier vide pour la javadoc
|
@ -0,0 +1,5 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.View groupe toutes les classes des paramètres/constantes du jeu
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.Utils;
|
||||
//Fichier vide pour la javadoc
|
@ -21,7 +21,6 @@ public class Puissance4Panel extends JPanel{
|
||||
private String playerOneName;
|
||||
private String playerTwoName;
|
||||
private String playerThreeName;
|
||||
private int playerNumber;
|
||||
|
||||
/**
|
||||
* Crée un panneau avec la grille
|
||||
@ -225,7 +224,7 @@ public class Puissance4Panel extends JPanel{
|
||||
this.changeLabel(playerTurn);
|
||||
break;
|
||||
}
|
||||
if(this.playerNumber == 2)
|
||||
if(playerThreeScore == -1)
|
||||
this.changeScore(playerOneScore, playerTwoScore);
|
||||
else
|
||||
this.changeScore(playerOneScore, playerTwoScore, playerThreeScore);
|
||||
@ -260,10 +259,6 @@ public class Puissance4Panel extends JPanel{
|
||||
this.playerThreeName = playerThreeName;
|
||||
}
|
||||
|
||||
public void setPlayerNumber(int playerNumber) {
|
||||
this.playerNumber = playerNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne la grille du Puissance 4
|
||||
* @return La grille du Puissance 4
|
||||
|
@ -0,0 +1,5 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.View groupe toutes les classes de la vue du Puissance 4
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.View;
|
||||
//Fichier vide pour la javadoc
|
Loading…
Reference in New Issue
Block a user