package dominos;
import es.Keyboard;
import java.util.Vector;
public class Jeu {
  private Grille g;
  private Vector lesDominos;
  /** crée une partie pour ce jeu sur la grille 'g' */
  public Jeu(Grille g) {
    this.g=g;
    this.lesDominos = new Vector();
  }

  /** Pose un domino sur la grille de ce jeu si c'est possible, avec un nouveau numéro.
   *   Sinon affiche un message.*/
   public void poser(Domino d){
     if (this.posable(d))
      {this.lesDominos.addElement(d);
       int numero =  this.lesDominos.size();
        for (int i=0;i<2;i++) {
          // if (this.g.contient(d.getCases()[i])) deja teste dans posable
          Case c = d.getCases()[i];
          c.remplir(Integer.toString(numero));
          this.g.poser(c) ;
          }
       }
    else System.out.println("domino non posable");
    }

  /** Teste si on peut poser le domino 'd' sur la grille de ce jeu*/
  public boolean posable(Domino d) {
      boolean res = true;
      for (int i=0;i<2;i++) res = res && this.posable(d.getCases()[i]);
      return res;
      }
  /** Teste si on peut poser la case 'c' sur la grille de ce jeu, c'est-à-dire si
   *  cette case est dans la grille et est vide */
  public boolean posable(Case c) {
    boolean res = false;
    if (this.g.contient(c)) res = this.g.vide(c);
    if (! res) System.out.println("case "+ c.coord()+ " occupée ou en dehors de la grille");
    return res;
    }

   /** Retire le domino de numéro 'n' de ce jeu */
   public void retirer(int n) {
      Domino d = (Domino)this.lesDominos.elementAt(n-1);
      String s = d + " retire";
      this.lesDominos.setElementAt(s,n-1);
      for (int i=0;i<2;i++) this.retirer(d.getCases()[i]);
     }
    /** Vide la case 'c' de la grille de ce jeu */
    public void retirer(Case c) {
      this.g.vider(c);
       }


  /** Interface de jeu */
  public void jouer() {
    System.out.println(
      "Pour poser un domino, taper 'g' suivi des coordonnées de la case gauche "
      + "d'un domino horizontal,\n"
      + " ou 'h' suivi des coordonnées de la case haute d'un domino vertical.\n"
      + "Pour retirer un domino, tapez '-' suivi du numéro du domino à retirer.\n"
      + "Pour arreter, tapez 'a'\n");
    char pos ; // = '1';
    do {pos = Keyboard.readChar("poser ou retirer domino ou arrêter : ");
        if (pos=='g' || pos =='h') {
          int x=Keyboard.readInt();
          int y = Keyboard.readInt();
          Case c1 = new Case(x-1,y-1);
          Domino d = new Domino(c1,pos);
          this.poser(d);
          System.out.println(this);
          }
        else if (pos=='-') {
          int n = Keyboard.readInt();
          this.retirer(n);
          System.out.println(this);
          }
        }
        while (pos != 'a' & ! this.g.pleine());
    if (this.g.pleine()) System.out.println("gagne");
    else System.out.println("abandon");
    }

    /** renvoie une représentation sous forme de chaine de ce jeu */
    public String toString() {
      return "liste des dominos "+this.lesDominos.toString()+this.g;
      }
}

