
/*
 * Giocatore relativo al gioco del "Nim"
 *
 * Tipica sequenza di utilizzo:
 *
 *   P = new NimPlayer(M,S);
 *     ...  ...
 *   P.play();
 *     ...  ...
 *   P.play();
 *
 * dove M e' un modello di tipo Nim,
 * S e' una strategia di tipo NimStrategy.
 */


package nim;


public class NimPlayer {


  private static int index = 0;          // Indici dei giocatori
  
  private final Nim nim;                 // Modello
  private final NimStrategy strategy;    // Strategia di gioco
  
  private final String name;             // Nome del giocatore
  
  
  // Costruttori
  
  public NimPlayer( Nim nim, NimStrategy strategy, String name ) {
  
    this.nim = nim;
    this.strategy = strategy;
    
    index = index + 1;
    this.name = ( name == null ) ? ( "player_" + index ) : name;
  }
  
  public NimPlayer( Nim nim, NimStrategy strategy ) {
  
    this( nim, strategy, null );
  }
  
  
  // Mossa
  
  public void play() {
  
    if ( !nim.over() ) {                 // Al proprio turno
    
      Nim.Move move = strategy.suggest( nim );
        
      nim.remove( move );                // il giocatore effettua la mossa
    }                                    // suggerita dalla strategia
  }
  
  
  // Identificazione
  
  public String toString() {
  
    return name;
  }

}  // class NimPlayer
