package donneesPrincipales; import java.util.Observable; import joueurs.Utilisateur; import exceptions.dejaCliquer; public class DonneesMorpion extends Observable { // les donnees private ChoixPossibles[][] morpion; private Utilisateur joueur1; private Utilisateur joueur2; public DonneesMorpion(Utilisateur u1, Utilisateur u2) { this.joueur1 = u1; this.joueur2 = u2; // on initialise la grille et on met tout a Rien this.morpion = new ChoixPossibles[3][3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) this.morpion[i][j] = ChoixPossibles.Rien; } } public void play(ChoixPossibles coupPossible, int i, int j) throws dejaCliquer, IllegalArgumentException { // si il y a une erreur dans les arguments if (i < 0 || i > 3 || j < 0 || j > 3) { throw new IllegalArgumentException(); } // on reprend le choix de a la case i,j ChoixPossibles choix = this.morpion[i][j]; // si au la case i,j on a pas Rien sa veut // dire que la case a deja ete jouee if (choix != ChoixPossibles.Rien) { throw new dejaCliquer(); } else { this.morpion[i][j] = coupPossible; this.setChanged(); this.notifyObservers(); } } public Utilisateur Gagnant() { // on regarde par ligne for (int i=0; i < 3; i++) { ChoixPossibles coupPossible = this.morpion[i][0]; { // tous les choix sont sur une meme ligne if (coupPossible == this.morpion[i][1] && coupPossible == this.morpion[i][2]) { if (coupPossible == this.joueur1.getChoix()) { return this.joueur1; } else { return this.joueur2; } } // sinon on test la prochaine ligne } } // on regarde les colonnes for (int j=0; j < 3; j++) { ChoixPossibles coupPossible = this.morpion[0][j]; if (coupPossible != ChoixPossibles.Rien) { // tous les choix sont sur une meme colonne if (coupPossible == this.morpion[1][j] && coupPossible == this.morpion[2][j]) { if (coupPossible == this.joueur1.getChoix()) { return this.joueur1; } else { return this.joueur2; } } // sinon on test la prochaine colonne } } // on regarde les diagonales ChoixPossibles coupPossible = this.morpion[0][0]; if (coupPossible != ChoixPossibles.Rien) { if (coupPossible == this.morpion[1][1] && coupPossible == this.morpion[2][2]) { if (coupPossible == this.joueur1.getChoix()) { return this.joueur1; } else { return this.joueur2; } } } coupPossible = this.morpion[0][2]; if (coupPossible != ChoixPossibles.Rien) { if (coupPossible == this.morpion[1][1] && coupPossible == this.morpion[2][2]) { if (coupPossible == this.joueur1.getChoix()) { return this.joueur1; } else { return this.joueur2; } } } return null; } public Utilisateur getUtilisateur1() { return joueur1; } public Utilisateur getUtilisateur2() { return joueur2; } public ChoixPossibles[][] getdonneesMorpion() { return this.morpion; } }