package spiel;

import java.util.Vector;
import java.io.Serializable;


/**
 *  Beschreibung eines Zustands einer Spielpartie.
 *
 *  Neu in 1.2: 
 *  <ul><li>implements Serializable</li>
 *  <li>equals-Methode prüft nun nur auf Namensgleichheit</li>
 *  <li>neue Instanzvariable gestartet</li></ul>
 *
 *  Neu in 1.3: hashCode() von Object wird überschrieben
 * 
 *  @version 1.3
 *  @author ProgPrak-Team
 */

public final class Spiel implements Serializable {    

    // für Serialisierung
    private static final long serialVersionUID = 13L;


    private String name;
    private SpielVariante variante;
    private int gesamtTimeout, rundenTimeout, rundenLimit;
    private boolean beobachtbar;
    private boolean gestartet;
    private String[] spielernamen;
	
    public Spiel() {}

    /** Name für die Spielpartie */
    public void setName(String name) { this.name = name;}
    public String getName() { return name;}

    /** die Grundaufstellung */
    public void setVariante(SpielVariante variante) { this.variante = variante;}
    public SpielVariante getVariante() { return variante;}

    /** gesamtes Timeout pro Spieler in Millisekunden */
    public void setGesamtTimeout(int gesamtTimeout) { this.gesamtTimeout = gesamtTimeout;}
    /** typischerweise ist {@code getRundenTimeout() * getRundenLimit()} mindestens
     *	dreimal so groß wie {@code getGesamtTimeout()}
     */
    public int getGesamtTimeout() { return gesamtTimeout;}

    /** Runden-Timeout pro Spieler in Millisekunden */
    public void setRundenTimeout(int rundenTimeout) { this.rundenTimeout = rundenTimeout;}
    public int getRundenTimeout() { return rundenTimeout;}

    /** Limit für die Rundenzahl der Partie */
    public void setRundenLimit(int rundenLimit) { this.rundenLimit = rundenLimit;}
    public int getRundenLimit() { return rundenLimit;}  

    /** ob das Spiel beobachtbar sein soll */
    public void setBeobachtbar(boolean beobachtbar) { this.beobachtbar = beobachtbar;}
    public boolean getBeobachtbar() { return beobachtbar;} 

    /** ob das Spiel schon gestartet wurde */
    public void setGestartet(boolean gestartet) { this.gestartet = gestartet;}
    public boolean getGestartet() { return gestartet;} 

    /** die Namen der regulären Spieler */
    public void setSpielernamen(String[] spielernamen) { this.spielernamen = spielernamen;}
    public String[] getSpielernamen() { return spielernamen;}

    /** Spiele sind gleich, wenn ihre Namen es sind */
    public boolean equals(Object o) {
	Spiel spiel = (Spiel)o;
	return name.equals(spiel.name);
    }

    /** gleiche Spiele erhalten den gleichen Hash-Code, also den des Namens */
    public int hashCode() {
	return name.hashCode();
    }
}
