Plateau 2.81 KB
package tictactoecodingame;

import java.util.ArrayList;

/**
 * @author Franck
 *
 * Classe générique pour les jeux de plateau à 2 joueurs ( une grille de puissance 4 , un échiquier , .. )
 */
public abstract class Plateau  {
 
    abstract public void init();			// Initialise le plateau pour le démarrage d'une nouvelle partie.

    abstract public Piece getPiece(Case _case);  	// Retourne la pièce presente sur la case _case

    abstract public void joueCoup(Coup _coup);		// Joue le coup _coup sur le plateau

    abstract public void annuleDernierCoup();		// Annule le dernier coup joué

    abstract public int getNbColonnes();		// Retourne le nombre de colonnes du plateau

    abstract public int getNbLignes();			// Retourne le nombre de lignes du plateau

    abstract public boolean partieTerminee();		// Vrai si la partie est terminee ( soit un gagnant soit un match nulle )

    abstract public boolean partieGagnee();		// Vrai si le dernier joueur  a gagné la partie
    
    abstract public boolean partieNulle();              // Vrai si la partie est nulle
    
    abstract public Joueur vainqueur();                  // Retourne le joueur qui a gagné la partie

    abstract public ArrayList<Coup> getListeCoups(Joueur _joueur); 	// Retourne la liste des coups possibles.

    abstract public boolean isValide(Coup _coup);		// Retourne Vrai si le coup est valide.

    abstract public Coup stringToCoup(String _coup, Joueur _joueur);  // Convertion d'une chaine de caractères en un Coup
    
    abstract public void sauvegardePosition(int _index);              // Sauvegarde la position courante dans l'indice _index
    
    abstract public void restaurePosition(int _index);                 // restaure la  position sauvegarde en indice _index
    
    abstract public Coup getDernierCoup();                  // Retourne le dernierCoup joue
    

    public String toString() {						// Donne une représentation du plateau sous forme d'une chaine de caractères
        Piece piece;
        String chainePlateau = new String();

        for (int ligne = getNbLignes() - 1; ligne >= 0; ligne--) {
            chainePlateau += ligne;
            for (int colonne = 0; colonne < getNbColonnes(); colonne++) {
                piece = getPiece(new Case(colonne, ligne));
                if (piece == null) {
                    chainePlateau += "|   ";
                } else {
                    chainePlateau += "|" + piece + "  ";
                }
            }
            chainePlateau += "|\n  ";
            for (int colonne = 0; colonne < getNbColonnes(); colonne++) {
                chainePlateau += "____";
            }
            chainePlateau += "\n";
        }

        for (int colonne = 0; colonne < getNbColonnes(); colonne++) 
            chainePlateau += "  "+ colonne + " ";
        return chainePlateau;
    }          
}