diff --git a/Document/Iteration2/Iteration2.md b/Document/Iteration2/Iteration2.md index 91e1b22..ffb4d8e 100644 --- a/Document/Iteration2/Iteration2.md +++ b/Document/Iteration2/Iteration2.md @@ -23,7 +23,7 @@ flowchart LR 5. Le système demande au joueur 2 6. Le joueur 2 répond 7. Le système enregistre le nom du joueur 2 -8. Le système affiche le plateau ainsi que le nom du joueur qui doit jouer +8. Le système affiche le plateauNim ainsi que le nom du joueur qui doit jouer 9. Le joueur choisi dans quelle colonne il souhaite mettre un jeton 10. Le système vérifie si la partie est gagné 11. Le système affiche le vainqueur et demande si l'utilisateur souhaite refaire une partie ("y" or "n") @@ -112,7 +112,7 @@ classDiagram } class Plateau { - - byte[][] plateau + - byte[][] plateauNim - byte[] dernierCoup + Plateau () diff --git a/Document/Iteration3/Iteration3.md b/Document/Iteration3/Iteration3.md index 42dba5f..2d01e0d 100644 --- a/Document/Iteration3/Iteration3.md +++ b/Document/Iteration3/Iteration3.md @@ -140,7 +140,7 @@ graph LR 8. Le système demande aux joueurs s'ils veulent activer la rotation 9. Le joueur répond 10. Le système enregistre la réponse du joueur -11. Le système affiche le plateau ainsi que le nom du joueur qui doit jouer +11. Le système affiche le plateauNim ainsi que le nom du joueur qui doit jouer 12. Le joueur choisi dans quelle colonne il souhaite mettre un jeton 13. Le système vérifie si la partie est gagné 14. Le système affiche le vainqueur et demande si l'utilisateur souhaite refaire une partie ("y" or "n") @@ -169,7 +169,7 @@ graph LR 1. Le système affiche un message d'erreur 2. retour au point 11 du scénario nominal -- 13.c L'utilisateur choisit de faire tourner le plateau +- 13.c L'utilisateur choisit de faire tourner le plateauNim 1. Le système vérifie que l'option est activée 1. Le système affiche un message d'erreur 2. retour au point 11 du scénario nominal @@ -208,7 +208,7 @@ classDiagram # int nombrePartie = 0 # Joueur[] lesjoueurs - # Plateau plateau + # Plateau plateauNim # Ihm ihm + Controleur(Ihm ihm) @@ -252,7 +252,7 @@ classDiagram } class PlateauP4 { - - byte[][] plateau + - byte[][] plateauNim - byte[] dernierCoup + PlateauP4() @@ -339,15 +339,15 @@ public class Controleur{ private void toursDeJeu() { nombrePartie += 1; numeroJoueurCourant = 1; - plateau.reset(); - plateau.setOption(ihm.demanderOption()); - while (!plateau.verifierFin()) { + plateauNim.reset(); + plateauNim.setOption(ihm.demanderOption()); + while (!plateauNim.verifierFin()) { tourSuivant(); boolean estCoupCorrect = false; while (!estCoupCorrect) { try { estCoupCorrect = true; - ihm.afficherPlateau(plateau.toString()); + ihm.afficherPlateau(plateauNim.toString()); getCoup(); } catch (CoupImpossible | FormatReponseInvalide exception) { estCoupCorrect = false; @@ -371,23 +371,23 @@ public class Controleur{ public class ControleurNim{ public void jouer() { initJoueur(); - plateau = new PlateauNim(ihm.demanderNbTas); + plateauNim = new PlateauNim(ihm.demanderNbTas); tourDeJeu(); } protected void getCoup(){ int[] candidate = ihm.demanderCoupNim(getNomJoueurCourant()); - plateau.retirerBatonnets(candidate[0], candidate[1]); + plateauNim.retirerBatonnets(candidate[0], candidate[1]); } protected void victoire(){ - if (!plateau.verifierVictoire()){ + if (!plateauNim.verifierVictoire()){ ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nbParties, true); } else { getJoueurCourant().incrementVictoires(); ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nbParties, false); } - ihm.afficherPlateau(plateau.toString()); + ihm.afficherPlateau(plateauNim.toString()); } } @@ -396,18 +396,18 @@ public class ControleurNim{ public class ControleurP4{ public void jouer() { initJoueur(); - plateau = new PlateauP4(); + plateauNim = new PlateauP4(); tourDeJeu(); } protected void getCoup(){ if (ihm.demanderCoupOuRotation()){ byte candidate = ihm.demanderCoupP4(getNomJoueurCourant()); - plateau.placerJeton((byte) (candidate-1), (byte) (numeroJoueurCourant+1)); + plateauNim.placerJeton((byte) (candidate-1), (byte) (numeroJoueurCourant+1)); } else{ boolean candidate = ihm.demanderRotation(getNomJoueurCourant()); //à définir que signifie true gauche ou droite - plateau.rotation(candidate); + plateauNim.rotation(candidate); } } protected void victoire(){ diff --git a/Document/Misc/scenario.md b/Document/Misc/scenario.md index 0c4cf60..65b8c0b 100644 --- a/Document/Misc/scenario.md +++ b/Document/Misc/scenario.md @@ -136,7 +136,7 @@ graph LR 4. Le système demande au joueur 2 5. Le joueur 2 répond 6. Le système enregistre le nom du joueur 2 -7. Le système affiche le plateau ainsi que le nom du joueur qui doit jouer +7. Le système affiche le plateauNim ainsi que le nom du joueur qui doit jouer 8. Le joueur choisi dans quel colonne il souhaite jouer 9. Le système vérifie si la partie est gagné 10. Le système affiche le vainqueur et demande si l'utilisateur souhaite refaire une partie (y or n) diff --git a/Javadoc/allclasses-index.html b/Javadoc/allclasses-index.html index 8885232..b295bd8 100644 --- a/Javadoc/allclasses-index.html +++ b/Javadoc/allclasses-index.html @@ -102,11 +102,11 @@
private Plateau
Initialise une nouvelle partie en demandant le nombre de tas.
-Les noms des joueurs, et en créant le plateau de jeu.
Les noms des joueurs, et en créant le plateauNim de jeu.
Facilite le déroulement complet d'une série de tours de jeu jusqu'à la fin.
-À chaque tour, demande le coup au joueur courant, met à jour le plateau, et gère les erreurs.
+À chaque tour, demande le coup au joueur courant, met à jour le plateauNim, et gère les erreurs.
Après la fin du jeu, incrémente les victoires du joueur courant, affiche le résultat, puis demande si les joueurs veulent jouer encore.
En cas de réponse affirmative, démarre une nouvelle partie ; sinon, termine le programme.
private Plateau
private void
private void
jouer()
private void
Incrémente le nombre de parties, reset / crée le plateau.
+Incrémente le nombre de parties, reset / crée le plateauNim.
Puis lance la séquence de tours de jeu.
Facilite le déroulement complet d'une série de tours de jeu jusqu'à la fin.
-À chaque tour, demande le coup au joueur courant, met à jour le plateau, et gère les erreurs.
+À chaque tour, demande le coup au joueur courant, met à jour le plateauNim, et gère les erreurs.
Après la fin du jeu, incrémente les victoires du joueur courant, affiche le résultat, puis demande si les joueurs veulent jouer encore.
En cas de réponse affirmative, démarre une nouvelle partie ; sinon, termine le programme.
int[]
void
reset()
void
retirerBatonnets(int m,
int n)
toString()
nombreTas
- : nombre de tas à créer dans le plateaunombreTas
- : nombre de tas à créer dans le plateauNimm
- Le numéro du tas à partir duquel retirer les bâtonnets.int[]
void
reset()
void
retirerBatonnets(int m,
int n)
toString()
nombreTas
- : nombre de tas à créer dans le plateaunombreTas
- : nombre de tas à créer dans le plateauNimRemplit le plateau en créant les tas
+Remplit le plateauNim en créant les tas
Remplace les tas déjà existant
Permet de retourner l'état du plateau sous la forme d'un tableau d'entier
+Permet de retourner l'état du plateauNim sous la forme d'un tableau d'entier
Inutilisé, pourra être supprimé si jamais utilisé (sera probablement utilisée quand les IA seront implémenté)
m
- Le numéro du tas à partir duquel retirer les bâtonnets.Test :
private byte[][]
boolean
estPlein()
byte[][]
void
placerJeton(byte colonne,
@@ -163,7 +163,7 @@ Method Summary
void
reset()
-Remplit le plateau en créant le plateau
+Remplit le plateauNim en créant le plateauNim
toString()
@@ -173,7 +173,7 @@ Method Summary
boolean
-Permet de verifier si une partie est finie, c'est-à-dire si 4 pions sont alignés ou le plateau est plein
+Permet de verifier si une partie est finie, c'est-à-dire si 4 pions sont alignés ou le plateauNim est plein
boolean
@@ -198,10 +198,10 @@ Methods inherited from cl
Field Details
-
-
-plateau
-private byte[][] plateau
-Le tableau représentant le plateau de puissance 4
+
+plateauNim
+private byte[][] plateauNim
+Le tableau représentant le plateauNim de puissance 4
-
@@ -238,15 +238,15 @@
Method Details
reset
public void reset()
-Remplit le plateau en créant le plateau
- Remplace le plateau déjà existant
+Remplit le plateauNim en créant le plateauNim
+ Remplace le plateauNim déjà existant
-
verifierFin
public boolean verifierFin()
-Permet de verifier si une partie est finie, c'est-à-dire si 4 pions sont alignés ou le plateau est plein
+Permet de verifier si une partie est finie, c'est-à-dire si 4 pions sont alignés ou le plateauNim est plein
- Returns:
- true si la partie est fini, sinon false
@@ -268,10 +268,10 @@ verifierVictoire
estPlein
public boolean estPlein()
-Permet de vérifier si le plateau est plein
+Permet de vérifier si le plateauNim est plein
- Returns:
-- true si le plateau est plein, sinon false
+- true si le plateauNim est plein, sinon false
@@ -279,12 +279,12 @@ estPlein
getPlateau
public byte[][] getPlateau()
-Permet de retourner l'état du plateau sous la forme d'un tableau de byte
+Permet de retourner l'état du plateauNim sous la forme d'un tableau de byte
Inutilisé, pourra être supprimé si jamais utilisé
(sera probablement utilisée quand les IA seront implémenté)
- Returns:
-- un tableau représentant le plateau de puissance 4
+- un tableau représentant le plateauNim de puissance 4
diff --git a/Javadoc/modele/p4/TestPlateauP4.html b/Javadoc/modele/p4/TestPlateauP4.html
index 1af5935..c560077 100644
--- a/Javadoc/modele/p4/TestPlateauP4.html
+++ b/Javadoc/modele/p4/TestPlateauP4.html
@@ -239,8 +239,8 @@ testEstPlein
public void testEstPlein()
Test :
- - Le cas où le plateau n'est pas plein
- - Le cas où le plateau est plein
+ - Le cas où le plateauNim n'est pas plein
+ - Le cas où le plateauNim est plein
- See Also:
diff --git a/Javadoc/modele/p4/package-summary.html b/Javadoc/modele/p4/package-summary.html
index 0276e1d..f5da635 100644
--- a/Javadoc/modele/p4/package-summary.html
+++ b/Javadoc/modele/p4/package-summary.html
@@ -99,7 +99,7 @@ Package modele.p4
Description
-Classe représentant un plateau de jeu de puissance 4
+Classe représentant un plateauNim de jeu de puissance 4
Test :
Test :
void
void
void
afficherPlateau(String plateau)
afficherPlateau(String plateauNim)
void
afficherVictoire(String nomJoueur,
@@ -291,11 +291,11 @@ demanderJouerEncore
-
afficherPlateau
-
-Affiche le plateau passé sous la forme d'une String
+
+Affiche le plateauNim passé sous la forme d'une String
- Parameters:
-plateau
- le plateau sous forme de string
+plateauNim
- le plateauNim sous forme de string
diff --git a/Javadoc/vue/TestIhm.html b/Javadoc/vue/TestIhm.html
index 4312a1f..d8d9d81 100644
--- a/Javadoc/vue/TestIhm.html
+++ b/Javadoc/vue/TestIhm.html
@@ -136,7 +136,7 @@ Method Summary
void
-Test le fonctionnement normal d'afficherPlateau avec un plateau du jeu de Nim
+Test le fonctionnement normal d'afficherPlateau avec un plateauNim du jeu de Nim
void
@@ -289,7 +289,7 @@ testDemanderJouerEncore
testAfficherPlateauNim
public void testAfficherPlateauNim()
-Test le fonctionnement normal d'afficherPlateau avec un plateau du jeu de Nim
+Test le fonctionnement normal d'afficherPlateau avec un plateauNim du jeu de Nim
- See Also:
-
diff --git a/Test/test/modele/nim/TestPlateauNim.java b/Test/test/modele/nim/TestPlateauNim.java
index d5f675a..f106eab 100644
--- a/Test/test/modele/nim/TestPlateauNim.java
+++ b/Test/test/modele/nim/TestPlateauNim.java
@@ -2,27 +2,27 @@
import exception.NombreBatonnetsInvalide;
import exception.NumeroTasInvalide;
-import modele.nim.Plateau;
+import modele.PlateauNim;
import org.junit.Test;
import static org.junit.Assert.*;
/**
- * Classe contenant les tests de src/modele/Nim/Plateau.java
- * @see modele.nim.Plateau
+ * Classe contenant les tests de src/modele/Nim/PlateauNim.java
+ * @see PlateauNim
*/
public class TestPlateauNim {
/**
- * Test la Création d'un Plateau et getPlateau()
- * @see Plateau#getPlateau()
+ * Test la Création d'un PlateauNim et getPlateau()
+ * @see PlateauNim#getPlateau()
*/
@Test
public void testGetPlateau(){
int nombreTas = 3;
- Plateau plateau = new Plateau(nombreTas);
- plateau.reset();
+ PlateauNim plateauNim = new PlateauNim(nombreTas);
+ plateauNim.reset();
int[] resutlatAttendu = {1,3,5};
- assertArrayEquals(resutlatAttendu, plateau.getPlateau());
+ assertArrayEquals(resutlatAttendu, plateauNim.getPlateau());
}
/**
@@ -32,34 +32,34 @@ public void testGetPlateau(){
*
- Le cas où le nombre de bâtonnets est insuffisant
* - Le fonctionnement normal
*
- * @see Plateau#retirerBatonnets(int, int)
+ * @see PlateauNim#retirerBatonnets(int, int)
*/
@Test
public void testRetirerBatonnets(){
int nombreTas = 3;
int[] resutlatAttendu = {1,3,2};
- Plateau plateau = new Plateau(nombreTas);
- plateau.reset();
+ PlateauNim plateauNim = new PlateauNim(nombreTas);
+ plateauNim.reset();
//Test le cas où le tas est inexistant
try{
- plateau.retirerBatonnets(4,2);
+ plateauNim.retirerBatonnets(4,2);
fail("Le tas sensé est inexistant");
} catch (NombreBatonnetsInvalide | NumeroTasInvalide ignored) {}
//Test le cas où le nombre de bâtonnets est insuffisant
try{
- plateau.retirerBatonnets(3,6);
+ plateauNim.retirerBatonnets(3,6);
fail("Le nombre de bâtonnets est sensé est insuffisant");
} catch (NombreBatonnetsInvalide | NumeroTasInvalide ignored) {}
//Test le fonctionnement normal
try{
- plateau.retirerBatonnets(3,3);
+ plateauNim.retirerBatonnets(3,3);
} catch (NombreBatonnetsInvalide | NumeroTasInvalide ignored) {
fail("Erreur retirerBâtonnets");
}
- assertArrayEquals(resutlatAttendu, plateau.getPlateau());
+ assertArrayEquals(resutlatAttendu, plateauNim.getPlateau());
}
/**
@@ -68,42 +68,42 @@ public void testRetirerBatonnets(){
* - Le cas où le plateau n'est pas vide
* - Le cas où le plateau est vide
*
- * @see Plateau#verifierFin()
+ * @see PlateauNim#verifierFin()
*/
@Test
public void testVerifierFin(){
int nombreTas = 3;
- Plateau plateau = new Plateau(nombreTas);
- plateau.reset();
+ PlateauNim plateauNim = new PlateauNim(nombreTas);
+ plateauNim.reset();
try{
- plateau.retirerBatonnets(1,1);
- plateau.retirerBatonnets(2,3);
+ plateauNim.retirerBatonnets(1,1);
+ plateauNim.retirerBatonnets(2,3);
} catch (NombreBatonnetsInvalide | NumeroTasInvalide ignored) {
fail("Erreur retirerBâtonnets");
}
- //Test le cas où le plateau n'est pas vide
- assertFalse(plateau.verifierFin());
+ //Test le cas où le plateauNim n'est pas vide
+ assertFalse(plateauNim.verifierFin());
try{
- plateau.retirerBatonnets(3,5);
+ plateauNim.retirerBatonnets(3,5);
} catch (NombreBatonnetsInvalide | NumeroTasInvalide ignored) {
fail("Erreur retirerBâtonnets");
}
- //Test le cas où le plateau est vide
- assertTrue(plateau.verifierFin());
+ //Test le cas où le plateauNim est vide
+ assertTrue(plateauNim.verifierFin());
}
/**
* Test de résultat de toString
- * @see Plateau#toString()
+ * @see PlateauNim#toString()
*/
@Test
public void testToString(){
int nombreTas = 3;
- Plateau plateau = new Plateau(nombreTas);
- plateau.reset();
+ PlateauNim plateauNim = new PlateauNim(nombreTas);
+ plateauNim.reset();
String resultatAttendu = " | \n ||| \n|||||\n";
- assertEquals(resultatAttendu, plateau.toString());
+ assertEquals(resultatAttendu, plateauNim.toString());
}
}
diff --git a/Test/test/modele/nim/TestTas.java b/Test/test/modele/nim/TestTas.java
index ad7ca14..c36ae95 100644
--- a/Test/test/modele/nim/TestTas.java
+++ b/Test/test/modele/nim/TestTas.java
@@ -1,13 +1,13 @@
package test.modele.nim;
import exception.NombreBatonnetsInvalide;
-import modele.nim.Tas;
+import modele.Tas;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Classe contenant les tests de src/modele/Nim/Tas.java
- * @see modele.nim.Tas
+ * @see Tas
*/
public class TestTas {
/**
diff --git a/Test/test/modele/p4/TestPlateauP4.java b/Test/test/modele/p4/TestPlateauP4.java
index a4c7ff8..d625aa6 100644
--- a/Test/test/modele/p4/TestPlateauP4.java
+++ b/Test/test/modele/p4/TestPlateauP4.java
@@ -2,24 +2,24 @@
import exception.ColonnePleine;
import exception.FormatReponseInvalide;
-import modele.p4.Plateau;
+import modele.PlateauP4;
import org.junit.Test;
import static org.junit.Assert.*;
/**
- * Classe contenant les tests de src/modele/p4/Plateau.java
- * @see modele.p4.Plateau
+ * Classe contenant les tests de src/modele/p4/PlateauNim.java
+ * @see PlateauP4
*/
public class TestPlateauP4 {
/**
- * Test la Création d'un Plateau et getPlateau()
- * @see Plateau#getPlateau()
+ * Test la Création d'un PlateauNim et getPlateau()
+ * @see PlateauP4#getPlateau()
*/
@Test
public void testInit(){
- Plateau plateau = new Plateau();
- plateau.reset();
+ PlateauP4 plateauP4 = new PlateauP4();
+ plateauP4.reset();
byte[][] resultatAttendu =
{
{0,0,0,0,0,0,0},
@@ -30,7 +30,7 @@ public void testInit(){
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
};
- assertEquals(resultatAttendu, plateau.getPlateau());
+ assertEquals(resultatAttendu, plateauP4.getPlateau());
}
/**
@@ -39,12 +39,12 @@ public void testInit(){
* - Le fonctionnement normal
* - Le cas où la colonne choisie est pleine
*
- * @see Plateau#placerJeton(byte, byte)
+ * @see PlateauP4#placerJeton(byte, byte)
*/
@Test
public void testPlacerJeton() {
- Plateau plateau = new Plateau();
- plateau.reset();
+ PlateauP4 plateauP4 = new PlateauP4();
+ plateauP4.reset();
//Test le fonctionnement normal
byte[][] resultatAttendu =
{
@@ -57,11 +57,11 @@ public void testPlacerJeton() {
{0,0,0,1,0,0,0},
};
try {
- plateau.placerJeton((byte) 3, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 1);
} catch (ColonnePleine | FormatReponseInvalide e){
fail("Erreur placerJeton");
}
- assertEquals(resultatAttendu,plateau.getPlateau());
+ assertEquals(resultatAttendu, plateauP4.getPlateau());
//Remplissage de la colonne
resultatAttendu =
@@ -76,16 +76,16 @@ public void testPlacerJeton() {
};
try {
for (int i = 0; i < 6; i++) {
- plateau.placerJeton((byte) 3, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 1);
}
} catch (ColonnePleine | FormatReponseInvalide e){
fail("Erreur placerJeton");
}
- assertEquals(resultatAttendu,plateau.getPlateau());
+ assertEquals(resultatAttendu, plateauP4.getPlateau());
//Test le cas où la colonne choisie est pleine
try {
- plateau.placerJeton((byte) 3, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 1);
fail("La colonne est sensé être pleine");
} catch (ColonnePleine | FormatReponseInvalide ignored){}
}
@@ -96,12 +96,12 @@ public void testPlacerJeton() {
* - Le cas où le plateau n'est pas plein
* - Le cas où le plateau est plein
*
- * @see Plateau#estPlein()
+ * @see PlateauP4#estPlein()
*/
@Test
public void testEstPlein(){
- Plateau plateau = new Plateau();
- plateau.reset();
+ PlateauP4 plateauP4 = new PlateauP4();
+ plateauP4.reset();
byte[][] resultatAttendu =
{
{2,0,2,1,0,1,2},
@@ -113,179 +113,179 @@ public void testEstPlein(){
{1,1,2,1,2,1,2},
};
- //Remplissage partiel du plateau
+ //Remplissage partiel du plateauP4
try {
for (int ligne = 0; ligne < resultatAttendu.length; ligne++) {
for (int colonne = 0; colonne < resultatAttendu[0].length; colonne++) {
- plateau.placerJeton((byte) colonne, resultatAttendu[ligne][colonne]);
+ plateauP4.placerJeton((byte) colonne, resultatAttendu[ligne][colonne]);
}
}
}catch (ColonnePleine | FormatReponseInvalide e){
fail("Erreur placerJeton");
}
- //Test le cas où le plateau n'est pas plein
- assertFalse(plateau.estPlein());
+ //Test le cas où le plateauP4 n'est pas plein
+ assertFalse(plateauP4.estPlein());
- //Remplissage total du plateau
+ //Remplissage total du plateauP4
try {
- plateau.placerJeton((byte) 1, (byte) 1);
- plateau.placerJeton((byte) 4, (byte) 2);
+ plateauP4.placerJeton((byte) 1, (byte) 1);
+ plateauP4.placerJeton((byte) 4, (byte) 2);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
- //Test le cas où le plateau est plein
- assertTrue(plateau.estPlein());
+ //Test le cas où le plateauP4 est plein
+ assertTrue(plateauP4.estPlein());
}
/**
* Test verifierVictoire en cas de victoire sur la ligne horizontale (-)
- * @see Plateau#verifierVictoire()
+ * @see PlateauP4#verifierVictoire()
*/
@Test
public void testVerifierVictoireHorizontal(){
- Plateau plateau = new Plateau();
- plateau.reset();
+ PlateauP4 plateauP4 = new PlateauP4();
+ plateauP4.reset();
try {
- plateau.placerJeton((byte) 0, (byte) 1);
- plateau.placerJeton((byte) 1, (byte) 1);
- plateau.placerJeton((byte) 2, (byte) 1);
+ plateauP4.placerJeton((byte) 0, (byte) 1);
+ plateauP4.placerJeton((byte) 1, (byte) 1);
+ plateauP4.placerJeton((byte) 2, (byte) 1);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
//Test la non victoire
- assertFalse(plateau.verifierVictoire());
+ assertFalse(plateauP4.verifierVictoire());
try {
- plateau.placerJeton((byte) 3, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 1);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
//Test la victoire
- assertTrue(plateau.verifierVictoire());
+ assertTrue(plateauP4.verifierVictoire());
}
/**
* Test verifierVictoire en cas de victoire sur la ligne verticale (|)
- * @see Plateau#verifierVictoire()
+ * @see PlateauP4#verifierVictoire()
*/
@Test
public void testVerifierVictoireVertical(){
- Plateau plateau = new Plateau();
- plateau.reset();
+ PlateauP4 plateauP4 = new PlateauP4();
+ plateauP4.reset();
try {
for (int i = 0; i < 3; i++) {
- plateau.placerJeton((byte) 0, (byte) 1);
+ plateauP4.placerJeton((byte) 0, (byte) 1);
}
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
//Test la non victoire
- assertFalse(plateau.verifierVictoire());
+ assertFalse(plateauP4.verifierVictoire());
try {
- plateau.placerJeton((byte) 0, (byte) 1);
+ plateauP4.placerJeton((byte) 0, (byte) 1);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
//Test la victoire
- assertTrue(plateau.verifierVictoire());
+ assertTrue(plateauP4.verifierVictoire());
}
/**
* Test verifierVictoire en cas de victoire sur la ligne diagonale partant de en haut à gauche jusqu'à en bas à droite (\)
- * @see Plateau#verifierVictoire()
+ * @see PlateauP4#verifierVictoire()
*/
@Test
public void testVerifierVictoireDiagonal1(){
- Plateau plateau = new Plateau();
- plateau.reset();
+ PlateauP4 plateauP4 = new PlateauP4();
+ plateauP4.reset();
try {
- plateau.placerJeton((byte) 0, (byte) 1);
- plateau.placerJeton((byte) 1, (byte) 2);
- plateau.placerJeton((byte) 1, (byte) 1);
- plateau.placerJeton((byte) 2, (byte) 2);
- plateau.placerJeton((byte) 2, (byte) 1);
- plateau.placerJeton((byte) 3, (byte) 2);
- plateau.placerJeton((byte) 2, (byte) 1);
- plateau.placerJeton((byte) 3, (byte) 2);
- plateau.placerJeton((byte) 4, (byte) 1);
- plateau.placerJeton((byte) 3, (byte) 2);
+ plateauP4.placerJeton((byte) 0, (byte) 1);
+ plateauP4.placerJeton((byte) 1, (byte) 2);
+ plateauP4.placerJeton((byte) 1, (byte) 1);
+ plateauP4.placerJeton((byte) 2, (byte) 2);
+ plateauP4.placerJeton((byte) 2, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 2);
+ plateauP4.placerJeton((byte) 2, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 2);
+ plateauP4.placerJeton((byte) 4, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 2);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
//Test la non victoire
- assertFalse(plateau.verifierVictoire());
+ assertFalse(plateauP4.verifierVictoire());
try {
- plateau.placerJeton((byte) 3, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 1);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
//Test la victoire
- assertTrue(plateau.verifierVictoire());
+ assertTrue(plateauP4.verifierVictoire());
}
/**
* Test verifierVictoire en cas de victoire sur ligne diagonale partant de en bas à gauche jusqu'à en haut à droite (/)
- * @see Plateau#verifierVictoire()
+ * @see PlateauP4#verifierVictoire()
*/
@Test
public void testVerifierVictoireDiagonal2(){
- Plateau plateau = new Plateau();
- plateau.reset();
+ PlateauP4 plateauP4 = new PlateauP4();
+ plateauP4.reset();
try {
- plateau.placerJeton((byte) 6, (byte) 1);
- plateau.placerJeton((byte) 5, (byte) 2);
- plateau.placerJeton((byte) 5, (byte) 1);
- plateau.placerJeton((byte) 4, (byte) 2);
- plateau.placerJeton((byte) 4, (byte) 1);
- plateau.placerJeton((byte) 3, (byte) 2);
- plateau.placerJeton((byte) 4, (byte) 1);
- plateau.placerJeton((byte) 3, (byte) 2);
- plateau.placerJeton((byte) 2, (byte) 1);
- plateau.placerJeton((byte) 3, (byte) 2);
+ plateauP4.placerJeton((byte) 6, (byte) 1);
+ plateauP4.placerJeton((byte) 5, (byte) 2);
+ plateauP4.placerJeton((byte) 5, (byte) 1);
+ plateauP4.placerJeton((byte) 4, (byte) 2);
+ plateauP4.placerJeton((byte) 4, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 2);
+ plateauP4.placerJeton((byte) 4, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 2);
+ plateauP4.placerJeton((byte) 2, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 2);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
//Test la non victoire
- assertFalse(plateau.verifierVictoire());
+ assertFalse(plateauP4.verifierVictoire());
try {
- plateau.placerJeton((byte) 3, (byte) 1);
+ plateauP4.placerJeton((byte) 3, (byte) 1);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
//Test la victoire
- assertTrue(plateau.verifierVictoire());
+ assertTrue(plateauP4.verifierVictoire());
}
/**
* Test de résultat de toString
- * @see Plateau#toString()
+ * @see PlateauP4#toString()
*/
@Test
public void testToString(){
- Plateau plateau = new Plateau();
- plateau.reset();
+ PlateauP4 plateauP4 = new PlateauP4();
+ plateauP4.reset();
try {
- plateau.placerJeton((byte) 0, (byte) 1);
- plateau.placerJeton((byte) 1, (byte) 2);
+ plateauP4.placerJeton((byte) 0, (byte) 1);
+ plateauP4.placerJeton((byte) 1, (byte) 2);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
@@ -299,6 +299,6 @@ public void testToString(){
"⚫ ⚫ ⚫ ⚫ ⚫ ⚫ ⚫ \n" +
"\uD83D\uDD34 \uD83D\uDFE1 ⚫ ⚫ ⚫ ⚫ ⚫ \n";
- assertEquals(reponseAttendu, plateau.toString());
+ assertEquals(reponseAttendu, plateauP4.toString());
}
}
diff --git a/Test/test/vue/TestIhm.java b/Test/test/vue/TestIhm.java
index e39f574..85c5191 100644
--- a/Test/test/vue/TestIhm.java
+++ b/Test/test/vue/TestIhm.java
@@ -2,7 +2,8 @@
import exception.ColonnePleine;
import exception.FormatReponseInvalide;
-import modele.nim.Plateau;
+import modele.PlateauNim;
+import modele.PlateauP4;
import org.junit.Test;
import exception.NombreTasInvalides;
import vue.Ihm;
@@ -236,11 +237,11 @@ public void testAfficherPlateauNim() {
System.setOut(printStream); //redéfinition de out
String reponseAttendu = " | \n ||| \n|||||\n\r\n";
- Plateau plateau = new Plateau(3);
- plateau.reset();
+ PlateauNim plateauNim = new PlateauNim(3);
+ plateauNim.reset();
Ihm ihm = new Ihm();
//Test le fonctionnement normal
- ihm.afficherPlateau(plateau.toString());
+ ihm.afficherPlateau(plateauNim.toString());
assertEquals(reponseAttendu,out.toString());
//Rétablissement des valeurs par défault
@@ -268,18 +269,18 @@ public void testAfficherPlateauP4() {
"⚫ ⚫ ⚫ ⚫ ⚫ ⚫ ⚫ \n" +
"⚫ ⚫ ⚫ ⚫ ⚫ ⚫ ⚫ \n" +
"\uD83D\uDD34 \uD83D\uDFE1 ⚫ ⚫ ⚫ ⚫ ⚫ \n\r\n";
- modele.p4.Plateau plateau = new modele.p4.Plateau();
- plateau.reset();
+ PlateauP4 plateauP4 = new PlateauP4();
+ plateauP4.reset();
try{
- plateau.placerJeton((byte) 0, (byte) 1);
- plateau.placerJeton((byte) 1, (byte) 2);
+ plateauP4.placerJeton((byte) 0, (byte) 1);
+ plateauP4.placerJeton((byte) 1, (byte) 2);
} catch (ColonnePleine | FormatReponseInvalide e) {
fail("Erreur placerJeton");
}
Ihm ihm = new Ihm();
//Test le fonctionnement normal
- ihm.afficherPlateau(plateau.toString());
+ ihm.afficherPlateau(plateauP4.toString());
assertEquals(reponseAttendu,out.toString());
//Rétablissement des valeurs par défault
diff --git a/src/controleur/Controleur.java b/src/controleur/Controleur.java
new file mode 100644
index 0000000..72ad33f
--- /dev/null
+++ b/src/controleur/Controleur.java
@@ -0,0 +1,109 @@
+package controleur;
+
+import exception.ColonnePleine;
+import exception.FormatReponseInvalide;
+import exception.NombreBatonnetsInvalide;
+import exception.NumeroTasInvalide;
+import modele.Joueur;
+import modele.Plateau;
+import vue.Ihm;
+
+public abstract class Controleur {
+ protected int numeroJoueurCourant;
+ protected int nombrePartie = 0;
+ protected Joueur[] lesJoueurs;
+ protected Plateau plateau;
+ protected Ihm ihm;
+
+ protected void initJoueur() {
+ int nbJoueur = 2;
+ lesJoueurs = new Joueur[2];
+ for (int i = 0; i < nbJoueur; i++) {
+ lesJoueurs[i] = new Joueur(ihm.demanderNomJoueur(i+1));
+ }
+ }
+
+ protected void toursDeJeu() {
+ nombrePartie+=1;
+ numeroJoueurCourant=1;
+ plateau.reset();
+ //plateau.steOption();
+ while (!plateau.verifierFin()){
+ tourSuivant();
+ boolean estCoupCorrect = false;
+ while (!estCoupCorrect){
+ try{
+ estCoupCorrect = true;
+ ihm.afficherPlateau(plateau.toString());
+ getCoup();
+ } catch (NombreBatonnetsInvalide | NumeroTasInvalide | ColonnePleine | FormatReponseInvalide exception){
+ estCoupCorrect = false;
+ ihm.afficherErreur(exception.getMessage());
+ }
+ }
+ }
+
+ victoire();
+
+ if(ihm.demanderJouerEncore()){
+ toursDeJeu();
+ } else {
+ finPartie();
+ }
+ }
+
+ /**
+ * Passe au joueur suivant dans l'ordre des joueurs.
+ * Actualise le numéro du joueur courant en faisant une rotation circulaire entre les joueurs.
+ */
+ protected void tourSuivant() {
+ this.numeroJoueurCourant = (numeroJoueurCourant + 1) % 2;
+ }
+
+ /**
+ * Permet de verifier a la fin de la partie quel joueur a gagné la partie et le fait afficher par l'IHM.
+ */
+ protected void finPartie() {
+ int comparaison = lesJoueurs[0].compareTo(lesJoueurs[1]);
+ if (comparaison == 0) {
+ ihm.afficherVictoire("ex Aequo", lesJoueurs[0].getNbVictoires(), nombrePartie, true);
+ } else if (comparaison > 0) {
+ ihm.afficherVictoire(lesJoueurs[0].getNom(), lesJoueurs[0].getNbVictoires(), nombrePartie, false);
+ } else {
+ ihm.afficherVictoire(lesJoueurs[1].getNom(), lesJoueurs[1].getNbVictoires(), nombrePartie, false);
+ }
+ }
+
+ /**
+ * Renvoie le numéro du joueur actuellement en cours.
+ * Pas utilisée pour l'instant, pourra être retirée si besoin
+ *
+ * @return Le numéro du joueur courant.
+ */
+ protected int getNumeroJoueurCourant() {
+ return numeroJoueurCourant;
+ }
+
+ /**
+ * Renvoie l'objet Joueur correspondant au joueur actuellement en cours.
+ *
+ * @return Le joueur courant.
+ */
+ protected Joueur getJoueurCourant() {
+ return lesJoueurs[numeroJoueurCourant];
+ }
+
+ /**
+ * Renvoie le nom du joueur actuellement en cours.
+ *
+ * @return Le nom du joueur courant.
+ */
+ protected String getNomJoueurCourant() {
+ return lesJoueurs[numeroJoueurCourant].getNom();
+ }
+
+ //Déclaration des méthodes abstraite
+ protected abstract void getCoup() throws FormatReponseInvalide, NombreBatonnetsInvalide, NumeroTasInvalide, ColonnePleine;
+ protected abstract void victoire();
+ public abstract void jouer();
+}
diff --git a/src/controleur/ControleurJeuNim.java b/src/controleur/ControleurJeuNim.java
index 285750a..487ee03 100644
--- a/src/controleur/ControleurJeuNim.java
+++ b/src/controleur/ControleurJeuNim.java
@@ -5,29 +5,13 @@
import exception.NombreTasInvalides;
import exception.NumeroTasInvalide;
import modele.Joueur;
-import modele.nim.Plateau;
+import modele.PlateauNim;
import vue.Ihm;
/**
* Classe du contrôleur du jeu de Nim
*/
-public class ControleurJeuNim {
- /** Numéro du joueur courant, x ∈ [0 ; 1]**/
- private int numeroJoueurCourant;
-
- /** Nombre de parties jouées, incrémentée dans commencerPartie()*/
- private int nbParties = 0;
-
- /** Array contenant les objets Joueur représentant les joueurs*/
- private Joueur[] lesJoueurs;
-
- /** Objet Plateau représentant une collection de tas*/
- private Plateau plateau;
-
- /**
- * Objet Interface Humain Machine chargé de récupérer les commandes du joueur et d'afficher l'état de la partie
- */
- private final Ihm ihm;
+public class ControleurJeuNim extends Controleur{
/**
* Initialise un nouveau contrôleur de jeu Nim avec une interface utilisateur spécifiée.
@@ -41,7 +25,7 @@ public ControleurJeuNim (Ihm ihm) {
/**
* Initialise une nouvelle partie en demandant le nombre de tas.
- * Les noms des joueurs, et en créant le plateau de jeu.
+ * Les noms des joueurs, et en créant le plateauNim de jeu.
*/
public void jouer() {
boolean isNbTasValide = false;
@@ -60,126 +44,20 @@ public void jouer() {
}
}
- this.plateau = new Plateau(nombreTas);
-
- for (int i = 0; i < 2; i++) {
- String nomJoueur = "";
+ this.plateau = new PlateauNim(nombreTas);
- // Permet de s'assurer que l'on ne rentre pas un nom vide.
- boolean nomValide = false;
- while (!nomValide) {
- nomJoueur = ihm.demanderNomJoueur(i+1);
- if (nomJoueur.isBlank()) {
- ihm.afficherErreur("Veuillez choisir un nom qui ne soit pas composé exclusivement de caractères invisibles (Espaces, Tabulations ...).");
- } else {
- nomValide = true;
- }
- }
- this.lesJoueurs[i] = new Joueur(nomJoueur);
- }
-
-
- commencerPartie();
- }
-
- /**
- * Incrémente le nombre de parties, reset / crée les tas.
- * Puis lance la séquence de tours de jeu.
- */
- private void commencerPartie() {
- numeroJoueurCourant = 1;
-
- // Incrémentation du nombre de parties jouées
- this.nbParties ++;
-
- // Crée / reset le plateau
- plateau.reset();
-
- // Lance la partie
+ initJoueur();
toursDeJeu();
}
- /**
- * Facilite le déroulement complet d'une série de tours de jeu jusqu'à la fin.
- * À chaque tour, demande le coup au joueur courant, met à jour le plateau, et gère les erreurs.
- * Après la fin du jeu, incrémente les victoires du joueur courant, affiche le résultat,
- * puis demande si les joueurs veulent jouer encore.
- * En cas de réponse affirmative, démarre une nouvelle partie ; sinon, termine le programme.
- */
- private void toursDeJeu() {
- while (!plateau.verifierFin()) {
- tourSuivant();
- boolean estCoupCorrect = false;
- while (!estCoupCorrect) {
- try {
- estCoupCorrect = true;
- ihm.afficherPlateau(plateau.toString());
- int[] candidate = ihm.demanderCoupNim(getNomJoueurCourant());
- plateau.retirerBatonnets(candidate[0], candidate[1]);
- } catch (NombreBatonnetsInvalide | NumeroTasInvalide | FormatReponseInvalide exception) {
- estCoupCorrect = false;
- ihm.afficherErreur(exception.getMessage());
- }
- }
- }
- getJoueurCourant().incrementVictoires();
- ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nbParties, false);
-
- if (ihm.demanderJouerEncore()) {
- commencerPartie();
- } else {
- finPartie();
- }
- }
-
- /**
- * Passe au joueur suivant dans l'ordre des joueurs.
- * Actualise le numéro du joueur courant en faisant une rotation circulaire entre les joueurs.
- */
- private void tourSuivant() {
- this.numeroJoueurCourant = (numeroJoueurCourant + 1) % 2;
+ protected void getCoup() throws FormatReponseInvalide, NombreBatonnetsInvalide, NumeroTasInvalide {
+ int[] candidate = ihm.demanderCoupNim(getNomJoueurCourant());
+ plateau.retirerBatonnets(candidate[0], candidate[1]);
}
- /**
- * Permet de verifier a la fin de la partie quel joueur a gagné la partie et le fait afficher par l'IHM.
- */
- private void finPartie() {
- int comparaison = lesJoueurs[0].compareTo(lesJoueurs[1]);
- if (comparaison == 0) {
- ihm.afficherVictoire("ex Aequo", lesJoueurs[0].getNbVictoires(), nbParties, true);
- } else if (comparaison > 0) {
- ihm.afficherVictoire(lesJoueurs[0].getNom(), lesJoueurs[0].getNbVictoires(), nbParties, false);
- } else {
- ihm.afficherVictoire(lesJoueurs[1].getNom(), lesJoueurs[1].getNbVictoires(), nbParties, false);
- }
- }
-
-
- /**
- * Renvoie le numéro du joueur actuellement en cours.
- * Pas utilisée pour l'instant, pourra être retirée si besoin
- *
- * @return Le numéro du joueur courant.
- */
- public int getNumeroJoueurCourant() {
- return numeroJoueurCourant;
- }
-
- /**
- * Renvoie l'objet Joueur correspondant au joueur actuellement en cours.
- *
- * @return Le joueur courant.
- */
- public Joueur getJoueurCourant() {
- return lesJoueurs[numeroJoueurCourant];
+ protected void victoire(){
+ getJoueurCourant().incrementVictoires();
+ ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nombrePartie, false);
}
- /**
- * Renvoie le nom du joueur actuellement en cours.
- *
- * @return Le nom du joueur courant.
- */
- public String getNomJoueurCourant() {
- return lesJoueurs[numeroJoueurCourant].getNom();
- }
}
diff --git a/src/controleur/ControleurP4.java b/src/controleur/ControleurP4.java
index fd96a44..9dd31bf 100644
--- a/src/controleur/ControleurP4.java
+++ b/src/controleur/ControleurP4.java
@@ -3,29 +3,13 @@
import exception.ColonnePleine;
import exception.FormatReponseInvalide;
import modele.Joueur;
-import modele.p4.Plateau;
+import modele.PlateauP4;
import vue.Ihm;
/**
* Classe du contrôleur du jeu de puissance 4
*/
-public class ControleurP4 {
- /** Numéro du joueur courant, x ∈ [0 ; 1]**/
- private int numeroJoueurCourant;
-
- /** Nombre de parties jouées, incrémentée dans commencerPartie()*/
- private int nbParties = 0;
-
- /** Array contenant les objets Joueur représentant les joueurs*/
- private Joueur[] lesJoueurs;
-
- /** Objet Plateau représentant la grille de puissance 4*/
- private Plateau plateau;
-
- /**
- * Objet Interface Humain Machine chargé de récupérer les commandes du joueur et d'afficher l'état de la partie
- */
- private final Ihm ihm;
+public class ControleurP4 extends Controleur{
/**
* Initialise un nouveau contrôleur de jeu de puissance 4 avec une interface utilisateur spécifiée.
@@ -35,138 +19,31 @@ public class ControleurP4 {
public ControleurP4(Ihm ihm) {
this.ihm = ihm;
this.lesJoueurs = new Joueur[2];
- this.plateau = new Plateau();
+ this.plateau = new PlateauP4();
}
/**
* Initialise une nouvelle partie en demandant les noms des joueurs,
- * et en créant le plateau de jeu.
+ * et en créant le plateauP4 de jeu.
*/
public void jouer() {
- for (int i = 0; i < 2; i++) {
- String nomJoueur = "";
-
- // Permet de s'assurer que l'on ne rentre pas un nom vide.
- boolean nomValide = false;
- while (!nomValide) {
- nomJoueur = ihm.demanderNomJoueur(i+1);
- if (nomJoueur.isBlank()) {
- ihm.afficherErreur("Veuillez choisir un nom qui ne soit pas composé exclusivement de caractères invisibles (Espaces, Tabulations ...).");
- } else {
- nomValide = true;
- }
- }
- this.lesJoueurs[i] = new Joueur(nomJoueur);
- }
- commencerPartie();
- }
-
- /**
- * Incrémente le nombre de parties, reset / crée le plateau.
- * Puis lance la séquence de tours de jeu.
- */
- private void commencerPartie() {
- numeroJoueurCourant = 1;
-
- // Incrémentation du nombre de parties jouées
- this.nbParties ++;
-
- // Crée / reset le plateau
- plateau.reset();
-
- // Lance la partie
+ initJoueur();
+ plateau = new PlateauP4();
toursDeJeu();
}
+ protected void getCoup() throws FormatReponseInvalide, ColonnePleine {
+ byte candidate = ihm.demanderCoupP4(getNomJoueurCourant());
+ plateau.placerJeton((byte) (candidate-1), (byte) (numeroJoueurCourant+1));
+ }
- /**
- * Facilite le déroulement complet d'une série de tours de jeu jusqu'à la fin.
- * À chaque tour, demande le coup au joueur courant, met à jour le plateau, et gère les erreurs.
- * Après la fin du jeu, incrémente les victoires du joueur courant, affiche le résultat,
- * puis demande si les joueurs veulent jouer encore.
- * En cas de réponse affirmative, démarre une nouvelle partie ; sinon, termine le programme.
- */
- private void toursDeJeu() {
- while (!plateau.verifierFin()) {
- tourSuivant();
- boolean estCoupCorrect = false;
- while (!estCoupCorrect) {
- try {
- estCoupCorrect = true;
- ihm.afficherPlateau(plateau.toString());
- byte candidate = ihm.demanderCoupP4(getNomJoueurCourant());
- plateau.placerJeton((byte) (candidate-1), (byte) (numeroJoueurCourant+1));
- } catch (ColonnePleine | FormatReponseInvalide exception) {
- estCoupCorrect = false;
- ihm.afficherErreur(exception.getMessage());
- }
- }
- }
-
+ protected void victoire(){
if (!plateau.verifierVictoire()){
- ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nbParties, true);
- }else {
+ ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nombrePartie, true);
+ } else {
getJoueurCourant().incrementVictoires();
- ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nbParties, false);
+ ihm.afficherVictoire(getNomJoueurCourant(), getJoueurCourant().getNbVictoires(), nombrePartie, false);
}
ihm.afficherPlateau(plateau.toString());
-
-
- if (ihm.demanderJouerEncore()) {
- commencerPartie();
- } else {
- finPartie();
- }
- }
-
- /**
- * Passe au joueur suivant dans l'ordre des joueurs.
- * Actualise le numéro du joueur courant en faisant une rotation circulaire entre les joueurs.
- */
- private void tourSuivant() {
- this.numeroJoueurCourant = (numeroJoueurCourant + 1) % 2;
- }
-
-
- /**
- * Permet de verifier a la fin de la partie quel joueur a gagné la partie et le fait afficher par l'IHM.
- */
- private void finPartie() {
- int comparaison = lesJoueurs[0].compareTo(lesJoueurs[1]);
- if (comparaison == 0) {
- ihm.afficherVictoire("ex Aequo", lesJoueurs[0].getNbVictoires(), nbParties, true);
- } else if (comparaison > 0) {
- ihm.afficherVictoire(lesJoueurs[0].getNom(), lesJoueurs[0].getNbVictoires(), nbParties, false);
- } else {
- ihm.afficherVictoire(lesJoueurs[1].getNom(), lesJoueurs[1].getNbVictoires(), nbParties, false);
- }
- }
-
- /**
- * Renvoie le numéro du joueur actuellement en cours.
- * Pas utilisée pour l'instant, pourra être retirée si besoin
- *
- * @return Le numéro du joueur courant.
- */
- public int getNumeroJoueurCourant() {
- return numeroJoueurCourant;
- }
-
- /**
- * Renvoie l'objet Joueur correspondant au joueur actuellement en cours.
- *
- * @return Le joueur courant.
- */
- public Joueur getJoueurCourant() {
- return lesJoueurs[numeroJoueurCourant];
- }
-
- /**
- * Renvoie le nom du joueur actuellement en cours.
- *
- * @return Le nom du joueur courant.
- */
- public String getNomJoueurCourant() {
- return lesJoueurs[numeroJoueurCourant].getNom();
}
}
diff --git a/src/exception/JeuInvalideException.java b/src/exception/JeuInvalideException.java
new file mode 100644
index 0000000..834204a
--- /dev/null
+++ b/src/exception/JeuInvalideException.java
@@ -0,0 +1,13 @@
+package exception;
+/**
+ * Exception levée lorsqu'un joueur souhaite jouer à un jeu inexistant
+ */
+public class JeuInvalideException extends Exception{
+ /**
+ * Constructeur de l'exception JeuInvalideException
+ * @param message message de l'exception
+ */
+ public JeuInvalideException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/main.java b/src/main/main.java
new file mode 100644
index 0000000..6daef9b
--- /dev/null
+++ b/src/main/main.java
@@ -0,0 +1,20 @@
+package main;
+
+import controleur.Controleur;
+import controleur.ControleurJeuNim;
+import controleur.ControleurP4;
+import vue.Ihm;
+
+
+public class main {
+ public static void main(String[] args) {
+ Ihm ihm = new Ihm();
+ Controleur controleur;
+ if (ihm.demanderJeu()){
+ controleur = new ControleurJeuNim(ihm);
+ } else {
+ controleur = new ControleurP4(ihm);
+ }
+ controleur.jouer();
+ }
+}
diff --git a/src/modele/Plateau.java b/src/modele/Plateau.java
new file mode 100644
index 0000000..9efc5b8
--- /dev/null
+++ b/src/modele/Plateau.java
@@ -0,0 +1,14 @@
+package modele;
+
+import exception.ColonnePleine;
+import exception.FormatReponseInvalide;
+import exception.NombreBatonnetsInvalide;
+import exception.NumeroTasInvalide;
+
+public abstract class Plateau {
+ public abstract void reset();
+ public abstract boolean verifierFin();
+ public abstract void placerJeton(byte colonne, byte joueur) throws ColonnePleine, FormatReponseInvalide;
+ public abstract boolean verifierVictoire();
+ public abstract void retirerBatonnets(int m, int n) throws NombreBatonnetsInvalide, NumeroTasInvalide;
+}
diff --git a/src/modele/nim/Plateau.java b/src/modele/PlateauNim.java
similarity index 85%
rename from src/modele/nim/Plateau.java
rename to src/modele/PlateauNim.java
index 21d1d5f..8afb83f 100644
--- a/src/modele/nim/Plateau.java
+++ b/src/modele/PlateauNim.java
@@ -1,12 +1,14 @@
-package modele.nim;
+package modele;
+import exception.ColonnePleine;
+import exception.FormatReponseInvalide;
import exception.NombreBatonnetsInvalide;
import exception.NumeroTasInvalide;
/**
* Classe représentant un plateau de jeu de Nim
*/
-public class Plateau {
+public class PlateauNim extends Plateau {
/**
* Le tableau contenant les tas
*/
@@ -17,11 +19,11 @@ public class Plateau {
private int nombreTas;
/**
- * Permet de construire un nouveau Plateau, en fonction d'un nombre de tas.
+ * Permet de construire un nouveau PlateauNim, en fonction d'un nombre de tas.
*
* @param nombreTas : nombre de tas à créer dans le plateau
*/
- public Plateau(int nombreTas) {
+ public PlateauNim(int nombreTas) {
this.lesTas = new Tas[nombreTas];
this.nombreTas = nombreTas;
}
@@ -101,4 +103,12 @@ public String toString() {
}
return s;
}
+
+ public void placerJeton(byte colonne, byte joueur) throws ColonnePleine, FormatReponseInvalide{
+ throw new UnsupportedOperationException("Méthode non implémentée");
+ }
+
+ public boolean verifierVictoire(){
+ throw new UnsupportedOperationException("Méthode non implémentée");
+ }
}
\ No newline at end of file
diff --git a/src/modele/p4/Plateau.java b/src/modele/PlateauP4.java
similarity index 92%
rename from src/modele/p4/Plateau.java
rename to src/modele/PlateauP4.java
index 1731814..08451a1 100644
--- a/src/modele/p4/Plateau.java
+++ b/src/modele/PlateauP4.java
@@ -1,12 +1,14 @@
-package modele.p4;
+package modele;
import exception.ColonnePleine;
import exception.FormatReponseInvalide;
+import exception.NombreBatonnetsInvalide;
+import exception.NumeroTasInvalide;
/**
* Classe représentant un plateau de jeu de puissance 4
*/
-public class Plateau {
+public class PlateauP4 extends Plateau {
/**
* Le tableau représentant le plateau de puissance 4
*/
@@ -16,9 +18,9 @@ public class Plateau {
*/
private byte[] dernierCoup = new byte[2];
/**
- * Permet de construire un nouveau Plateau.
+ * Permet de construire un nouveau PlateauNim.
*/
- public Plateau() {}
+ public PlateauP4() {}
/**
* Remplit le plateau en créant le plateau
@@ -108,7 +110,6 @@ public boolean verifierVictoire() {
return false;
}
-
/**
* Permet de vérifier si le plateau est plein
* @return true si le plateau est plein, sinon false
@@ -140,10 +141,9 @@ public byte[][] getPlateau(){
* Parcours la colonne à partir du bas et place le jeton dès qu'une case est vide (0)
* @param colonne L’indice de la colonne où le jeton doit être placé [0,...,6]
* @param joueur Le numéro du joueur [1,2]
- * @throws ColonnePleine Si la colonne dans laquelle le joueur veut placer le jeton est pleine
* @throws FormatReponseInvalide Si le numéro de colonne demandé est inexistant
*/
- public void placerJeton(byte colonne, byte joueur) throws ColonnePleine, FormatReponseInvalide {
+ public void placerJeton(byte colonne, byte joueur) throws FormatReponseInvalide, ColonnePleine {
if (colonne<0 || colonne>6){
throw new FormatReponseInvalide("Veuillez entrer un entier compris entre 1 et 7");
}
@@ -186,4 +186,8 @@ public String toString() {
}
return string;
}
+
+ public void retirerBatonnets(int m, int n) throws NombreBatonnetsInvalide, NumeroTasInvalide {
+ throw new UnsupportedOperationException("Méthode non implémentée");
+ }
}
\ No newline at end of file
diff --git a/src/modele/nim/Tas.java b/src/modele/Tas.java
similarity index 98%
rename from src/modele/nim/Tas.java
rename to src/modele/Tas.java
index 78e8a2c..b84add5 100644
--- a/src/modele/nim/Tas.java
+++ b/src/modele/Tas.java
@@ -1,4 +1,4 @@
-package modele.nim;
+package modele;
import exception.NombreBatonnetsInvalide;
diff --git a/src/modele/nim/package-info.java b/src/modele/nim/package-info.java
deleted file mode 100644
index 754c3d6..0000000
--- a/src/modele/nim/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Package contenant les Classe du modèle du jeu de Nim
- */
-package modele.nim;
\ No newline at end of file
diff --git a/src/modele/p4/package-info.java b/src/modele/p4/package-info.java
deleted file mode 100644
index c95bd2c..0000000
--- a/src/modele/p4/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Package contenant les Classe du modèle du jeu de puissance 4
- */
-package modele.p4;
\ No newline at end of file
diff --git a/src/vue/Ihm.java b/src/vue/Ihm.java
index 3f5344a..66b3bfc 100644
--- a/src/vue/Ihm.java
+++ b/src/vue/Ihm.java
@@ -11,7 +11,9 @@
* La classe Ihm (Interface Humain Machine) représente l'interface utilisateur du jeu.
*/
public class Ihm {
- /** Le scanner qui permet de récupérer les inputs de l'utilisateur*/
+ /**
+ * Le scanner qui permet de récupérer les inputs de l'utilisateur
+ */
private Scanner scanner;
/**
@@ -97,7 +99,7 @@ public int[] demanderCoupNim(String nomJoueur) throws FormatReponseInvalide {
public boolean demanderJouerEncore() {
// Le pattern s'assure que la ligne contient uniquement "y" ou "n".
Pattern pattern = Pattern.compile("^[y|n]$"); //Permet de créer le regex.
- while (true){
+ while (true) {
System.out.println("Voulez-vous rejouer une partie ? (y/n)");
if (scanner.hasNextLine()) {
String line = scanner.nextLine();
@@ -159,9 +161,9 @@ public void afficherErreur(String message) {
*/
public byte demanderCoupP4(String nomJoueur) throws FormatReponseInvalide {
System.out.println("Dans quelle colonne voulez-vous jouer " + nomJoueur + " ?");
- if (scanner.hasNextByte()){
+ if (scanner.hasNextByte()) {
byte candidate = scanner.nextByte();
- if (scanner.hasNextLine()){
+ if (scanner.hasNextLine()) {
scanner.nextLine();
}
return candidate;
@@ -170,4 +172,20 @@ public byte demanderCoupP4(String nomJoueur) throws FormatReponseInvalide {
throw new FormatReponseInvalide("Veuillez entrer un entier compris entre 1 et 7");
}
+ public boolean demanderJeu() {
+ // Le pattern s'assure que la ligne contient uniquement "y" ou "n".
+ Pattern pattern = Pattern.compile("^(p4|nim)$"); //Permet de créer le regex.
+ while (true) {
+ System.out.println("Quel jeu voulez vous jouer ? Puissance 4 (p4) ou Nim (nim)");
+ if (scanner.hasNextLine()) {
+ String line = scanner.nextLine();
+ Matcher matcher = pattern.matcher(line); // Permet de créer un objet auquel on demande si la String correspond au regex.
+ // On vérifie la réponse et retourne true si c'est "y" et false si c'est "n".
+ if (matcher.find()) {
+ return line.equals("nim");
+ }
+ }
+ System.out.println("\n\n⚠ Vous avez répondu avec autre chose que `y` ou `n`.");
+ }
+ }
}