Skip to content

Commit

Permalink
Merge pull request #2 from danydudiot/refactor
Browse files Browse the repository at this point in the history
documentation, refactor, optimisation dans les controleurs et l'ihm
  • Loading branch information
danydudiot authored Apr 6, 2024
2 parents 8cd34f3 + 0cab7ee commit 64059d5
Show file tree
Hide file tree
Showing 5 changed files with 168 additions and 66 deletions.
66 changes: 61 additions & 5 deletions src/controleur/Controleur.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,68 @@
import modele.Plateau;
import vue.Ihm;

/**
* Classe abstraite du contrôleur contenant les squelettes des méthodes, ainsi que les attributs
*/
public abstract class Controleur {
/** Numéro du joueur courant, x ∈ [0 ; 1]**/
protected int numeroJoueurCourant;

/** Nombre de parties jouées, incrémentée dans toursDeJeu()
* @see #toursDeJeu() */
protected int nombrePartie = 0;

/** Array contenant les objets Joueur représentant les joueurs
* @see Joueur*/
protected Joueur[] lesJoueurs;

/** Objet Plateau pouvant représenter ses sous-classes PlateauNim ou PlateauP4
* @see Plateau
* @see modele.PlateauNim
* @see modele.PlateauP4*/
protected Plateau plateau;

/**
* Objet Interface Humain Machine chargé de récupérer les commandes du joueur et d'afficher l'état de la partie
* @see Ihm
*/
protected Ihm ihm;

/**
* Méthode permettant d'initialiser un certain nombre de joueurs (pour l'instant, fixé à 2)
*/
protected void initJoueur() {
int nbJoueur = 2;
lesJoueurs = new Joueur[2];
int nbJoueur = 2; //Possiblité de demander à l'ihm un nombre de joueurs ou par le biais d'un futur paramètre
lesJoueurs = new Joueur[nbJoueur];
for (int i = 0; i < nbJoueur; i++) {
lesJoueurs[i] = new Joueur(ihm.demanderNomJoueur(i+1));
}
}


/**
* <p>Squelette du déroulement d'une partie appel des méthodes de ses sous-classes</p>
* <ul>
* <li>Incrémentation des variables et initialisation du plateau</li>
* <li>Demande du coup</li>
* <li>Vérification de la victoire</li>
* <li>Rappel de la méthode ou fin du programme</li>
* </ul>
*/
protected void toursDeJeu() {
nombrePartie+=1;
numeroJoueurCourant=1;
plateau.reset();
//plateau.steOption();
//setOption();
while (!plateau.verifierFin()){
tourSuivant();
boolean estCoupCorrect = false;
while (!estCoupCorrect){
try{
estCoupCorrect = true;
ihm.afficherPlateau(plateau.toString());
getCoup();
estCoupCorrect = true;
} catch (NombreBatonnetsInvalide | NumeroTasInvalide | ColonnePleine | FormatReponseInvalide exception){
estCoupCorrect = false;
ihm.afficherErreur(exception.getMessage());
}
}
Expand Down Expand Up @@ -103,7 +135,31 @@ protected String getNomJoueurCourant() {
}

//Déclaration des méthodes abstraite
/**
* <p>Méthode abstraite</p>
* <p>Doit demander le coup à l'ihm et demander au plateau de réaliser le coup</p>
*/
protected abstract void getCoup() throws FormatReponseInvalide, NombreBatonnetsInvalide, NumeroTasInvalide, ColonnePleine;

/**
* <p>Méthode abstraite</p>
* <p>Doit géré l'affichage du vainqueur,
* doit aussi prendre en compte la possibilité d'un ex aequo</p>
*/
protected abstract void victoire();

/**
* <p>Méthode abstraite</p>
* <p>Doit appeler initJoueur() pour initialiser les joueurs,
* doit aussi crée le plateau du jeu, ainsi que faire appel à toursDeJeu() pour lancer le jeu</p>
* @see Controleur#initJoueur()
* @see Controleur#toursDeJeu()
*/
public abstract void jouer();

/**
* <p>Méthode abstraite</p>
* <p>Doit demander l'activation de l'option à l'ihm et demander au plateau d'activer ou non l'option</p>
*/
protected abstract void setOption();
}
34 changes: 23 additions & 11 deletions src/controleur/ControleurJeuNim.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package controleur;

import exception.FormatReponseInvalide;
import exception.NombreBatonnetsInvalide;
import exception.NombreTasInvalides;
import exception.NumeroTasInvalide;
import modele.Joueur;
import exception.*;
import modele.PlateauNim;
import vue.Ihm;

/**
* Classe du contrôleur du jeu de Nim
* hérite de Controleur
* @see Controleur
*/
public class ControleurJeuNim extends Controleur{

Expand All @@ -20,26 +18,24 @@ public class ControleurJeuNim extends Controleur{
*/
public ControleurJeuNim (Ihm ihm) {
this.ihm = ihm;
this.lesJoueurs = new Joueur[2];
}

/**
* <p>Initialise une nouvelle partie en demandant le nombre de tas.</p>
* <p>Les noms des joueurs, et en créant le plateauNim de jeu.</p>
* Initialise une nouvelle partie en demandant le nombre de tas,
* les noms des joueurs, crée le PlateauNim de jeu et lance la partie.
*/
public void jouer() {
boolean isNbTasValide = false;

int nombreTas = 0;
while (!isNbTasValide) {
try {
isNbTasValide = true;
nombreTas = ihm.demanderNbTas();
if (nombreTas <1){
throw new NombreTasInvalides("Le nombre de tas ne peut pas être inférieur à 1");
}
isNbTasValide = true;
} catch (NombreTasInvalides exception) {
isNbTasValide = false;
ihm.afficherErreur(exception.getMessage());
}
}
Expand All @@ -49,15 +45,31 @@ public void jouer() {
initJoueur();
toursDeJeu();
}

/**
* Demande le coup à l'ihm et demander au plateau de réaliser le coup.
* @throws FormatReponseInvalide Si la réponse n'est pas au format `m n`.
* @throws NombreBatonnetsInvalide Si le nombre de bâtonnets dans le tas à inférieur au retrait demandé ou que la limite de bâtonnets par coup a été atteinte.
* @throws NumeroTasInvalide Si le tas demandé est inconnue.
*/
protected void getCoup() throws FormatReponseInvalide, NombreBatonnetsInvalide, NumeroTasInvalide {
int[] candidate = ihm.demanderCoupNim(getNomJoueurCourant());
plateau.retirerBatonnets(candidate[0], candidate[1]);
}

/**
* Incrément le nombre de victoires du joueur courant
* et gére l'affiche du vainqueur.
*/
protected void victoire(){
getJoueurCourant().incrementVictoires();
ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nombrePartie, false);
}

/**
* Demande à l'ihm si l'utilisateur veut activer ou non la limite de bâtonnets par coup,
* puis demande au plateau de l'activer.
*/
protected void setOption(){
//appel de l'ihm et transfère dans le plateau
}
}
26 changes: 21 additions & 5 deletions src/controleur/ControleurP4.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

import exception.ColonnePleine;
import exception.FormatReponseInvalide;
import modele.Joueur;
import modele.PlateauP4;
import vue.Ihm;

/**
* Classe du contrôleur du jeu de puissance 4
* Classe du contrôleur du jeu de puissance 4,
* hérite de Controleur
* @see Controleur
*/
public class ControleurP4 extends Controleur{

Expand All @@ -18,25 +19,32 @@ public class ControleurP4 extends Controleur{
*/
public ControleurP4(Ihm ihm) {
this.ihm = ihm;
this.lesJoueurs = new Joueur[2];
this.plateau = new PlateauP4();
}

/**
* Initialise une nouvelle partie en demandant les noms des joueurs,
* et en créant le plateauP4 de jeu.
* crée le PlateauP4 de jeu et lance la partie.
*/
public void jouer() {
initJoueur();
plateau = new PlateauP4();
toursDeJeu();
}

/**
* Demande le coup à l'ihm et demander au plateau de réaliser le coup.
* @throws FormatReponseInvalide Si la réponse n'est pas compris entre 1 et 7.
* @throws ColonnePleine Si la colonne est pleine.
*/
protected void getCoup() throws FormatReponseInvalide, ColonnePleine {
byte candidate = ihm.demanderCoupP4(getNomJoueurCourant());
plateau.placerJeton((byte) (candidate-1), (byte) (numeroJoueurCourant+1));
}

/**
* Incrément le nombre de victoires du joueur courant
* et gére l'affiche du vainqueur prendre aussi en compte la possibilité d'un ex aequo
*/
protected void victoire(){
if (!plateau.verifierVictoire()){
ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nombrePartie, true);
Expand All @@ -46,4 +54,12 @@ protected void victoire(){
}
ihm.afficherPlateau(plateau.toString());
}

/**
* Demande à l'ihm si l'utilisateur veut activer ou non la contrainte de rotation,
* puis demande au plateau de l'activer.
*/
protected void setOption(){
//appel de l'ihm et transfère dans le plateau
}
}
3 changes: 3 additions & 0 deletions src/modele/Plateau.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import exception.NombreBatonnetsInvalide;
import exception.NumeroTasInvalide;

/**
* Classe abstraite du plateau, n'est pas une interface pour que dans le controleur
*/
public abstract class Plateau {
public abstract void reset();
public abstract boolean verifierFin();
Expand Down
Loading

0 comments on commit 64059d5

Please sign in to comment.