/**
 * Das Spielfeld selbst
 * 
 * @author Rainer Helfrich
 * @version Oktober 2020
 */
public class HanoiGame
{
    /**
     * Das Array hat drei Elemente und stellt die drei Scheibenstapel dar.
     */
    private Stack<Scheibe>[] stapel;
    
    /**
     * Verweis auf das Fenster-Objekt.
     */
    HanoiFrame derFrame;

    /**
     * Erzeugt ein neues Spiel mit 7 Scheiben
     */
    public HanoiGame()
    {
        this(7);
    }
    
    /**
     * Erzeugt ein neues Spiel, die Anzahl der Scheiben kann zwischen 1 und 14 liegen.
     * @param groesse Die Höhe des Stapels
     */
    public HanoiGame(int groesse)
    {
        if (groesse > 14)
        {
            groesse = 14;
        }
        if (groesse < 1)
        {
            groesse = 1;
        }
        stapel = new Stack[3];
        //# TODO: Initialisieren Sie die Stacks im Array
        
        //# Ende TODO
        while(stapel[0] != null && groesse > 0)
        {
            stapel[0].push(new Scheibe(groesse));
            groesse--;
        }
        derFrame = new HanoiFrame(this);
    }
    
    /**
     * Gibt die Höhe des Turms zurück
     * @param t Welcher Turm wird abgefragt? 0 = links, 1 = mitte, 2 = rechts
     * @return Höhe des gefragten Turmes
     */
    public int getTurmHoehe(int t)
    {
        //# TODO: Geben Sie die Höhe des Stapels mit der Nummer t zurück

        return 0;
    }
           
    /**
     * Gibt die n-te Scheibe auf Turm t zurück. n wird von oben gezählt, d.h. n = 0 ist die oberste Scheibe.
     * @param t Die Nummer des Turmes (0 = links, 1 = mitte, 2 = rechts)
     * @param n Die Nummer der Scheibe (0 <= n < getTurmHoehe(t))
     * @return Die gewünschte Scheibe
     */
    public Scheibe getNteScheibe(int t, int n)
    {
        //# TODO: Geben Sie die n-te Scheibe vom Turm mit der Nummer t zurück
        //#       n und t sind immer gültige Werte.

        return null;
    }
    
    /**
     * Verschiebt eine Scheibe von einem Turm auf den anderen, falls der Zug erlaubt ist
     * @param von Die Nummer des Turms (0 = links, 1 = mitte, 2 = rechts), von dem weggezogen wird
     * @param nach Die Nummer des Turms (0 = links, 1 = mitte, 2 = rechts), auf den hingezogen wird
     * @return true, wenn der Zug erlaubt war; false sonst
     */
    public boolean bewegeScheibe(int von, int nach)
    {
        //# TODO: Verschieben Sie die oberste Scheibe vom Turm "von" auf den Turm "nach"
        //#       Geben Sie true zurück, wenn die Aktion erlaubt ist
        //#       Wenn sie nicht erlaubt ist, soll false zurückgegeben werden und nichts verändert werden.
        
        return false;
    }
}
