/**
 * Vorführung des Tricks "Übersinnliche Kräfte"
 * 
 * @author (Ulrich Kiesmüller) 
 * @version (1.3)
 */

import java.io.*;

public class Testklasse
{
    public Testklasse()
    {
    }

    /**
     * Mainmethode 
     */
    public void main()
    {
        // Bilden eines Fächers aus den notwendigen Karten
        Karte karte1 = new Karte("Herz", "As");
        Karte karte2 = new Karte("Herz", "Zwei");
        Karte karte3 = new Karte("Herz", "Drei");
        Karte karte4 = new Karte("Herz", "Vier");
        Karte karte5 = new Karte("Herz", "Fünf");
        Karte karte6 = new Karte("Pik", "As");
        Karte karte7 = new Karte("Pik", "Zwei");
        Karte karte8 = new Karte("Pik", "Drei");
        Karte karte9 = new Karte("Pik", "Vier");
        Karte karte10 = new Karte("Pik", "Fünf");
        Kartenfaecher faecherGesamt = new Kartenfaecher();
        faecherGesamt.auflegen(karte1);
        faecherGesamt.auflegen(karte2);
        faecherGesamt.auflegen(karte3);
        faecherGesamt.auflegen(karte4);
        faecherGesamt.auflegen(karte5);
        faecherGesamt.auflegen(karte6);
        faecherGesamt.auflegen(karte7);
        faecherGesamt.auflegen(karte8);
        faecherGesamt.auflegen(karte9);
        faecherGesamt.auflegen(karte10);      
        faecherGesamt.ausgeben();
        System.out.println();
        System.out.println("Mischen durch mehrfaches Abheben");
        int pos = 1;
        while (pos != 0)
        {
            System.out.print("An welcher Stelle wollen Sie den Kartenstapel abheben (0 für Ende)? ");
            pos = eingabe();
            if (pos > 0 && pos <= 10) faecherGesamt.abhebenAn(pos);
        }
        System.out.println();
        System.out.println("Aufteilen in zwei Teilstapel");
        Kartenfaecher faecherTeil1 = new Kartenfaecher();
        faecherTeil1 = faecherGesamt.umdrehen().teilenOben();
        Kartenfaecher faecherTeil2 = new Kartenfaecher();
        faecherTeil2 = faecherGesamt.duplizieren().teilenOben();
        System.out.println();
        System.out.println("Vier MOVES in den Stapeln - beliebig verteilt");
        int schrittLinks = -1;
        while (schrittLinks < 0)
        {
            System.out.print("Wie viele der MOVES wollen Sie links durchführen? ");
            schrittLinks = eingabe();
            if (schrittLinks > 4) schrittLinks = -1;
        }
        faecherTeil1.move(schrittLinks);
        faecherTeil2.move(faecherTeil1.gibLaenge() - schrittLinks - 1);
        System.out.println();
        System.out.println("Entfernung der jeweils obersten Karte der beiden Teilstapel");
        System.out.print("1. Pärchen: ");
        faecherTeil1.gibStart().zeigen();
        System.out.print(" und ");
        faecherTeil2.gibStart().zeigen();
        System.out.println();
        faecherTeil1.entfernen(faecherTeil1.gibStart());
        faecherTeil2.entfernen(faecherTeil2.gibStart());
        System.out.println();
        schrittLinks = -1;
        System.out.println("Drei MOVES in den Stapeln - beliebig verteilt");
        while (schrittLinks < 0)
        {
            System.out.print("Wie viele der MOVES wollen Sie links durchführen? ");
            schrittLinks = eingabe();
            if (schrittLinks > 3) schrittLinks = -1;
        }
        faecherTeil1.move(schrittLinks);
        faecherTeil2.move(faecherTeil1.gibLaenge() - schrittLinks - 1);
        System.out.println();
        System.out.println("Entfernung der jeweils obersten Karte der beiden Teilstapel");
        System.out.print("2. Pärchen: ");
        faecherTeil1.gibStart().zeigen();
        System.out.print(" und ");
        faecherTeil2.gibStart().zeigen();
        System.out.println();
        faecherTeil1.entfernen(faecherTeil1.gibStart());
        faecherTeil2.entfernen(faecherTeil2.gibStart());
        System.out.println();
        schrittLinks = -1;
        System.out.println("Zwei MOVES in den Stapeln - beliebig verteilt");
        while (schrittLinks < 0)
         {
            System.out.print("Wie viele der MOVES wollen Sie links durchführen? ");
            schrittLinks = eingabe();
            if (schrittLinks > 2) schrittLinks = -1;
        }
        faecherTeil1.move(schrittLinks);
        faecherTeil2.move(faecherTeil1.gibLaenge() - schrittLinks - 1);
        System.out.println();
        System.out.println("Entfernung der jeweils obersten Karte der beiden Teilstapel");
        System.out.print("3. Pärchen: ");
        faecherTeil1.gibStart().zeigen();
        System.out.print(" und ");
        faecherTeil2.gibStart().zeigen();
        System.out.println();
        faecherTeil1.entfernen(faecherTeil1.gibStart());
        faecherTeil2.entfernen(faecherTeil2.gibStart());
        System.out.println();
        schrittLinks = -1;
        System.out.println("Ein MOVE in den Stapeln - beliebig verteilt - :-)");
        while (schrittLinks < 0)
         {
            System.out.print("Wo wollen Sie den MOVE durchführen (1=links, 0=rechts)? ");
            schrittLinks = eingabe();
            if (schrittLinks > 1) schrittLinks = -1;
        }
        faecherTeil1.move(schrittLinks);
        faecherTeil2.move(faecherTeil1.gibLaenge() - schrittLinks - 1);
        System.out.println();
        System.out.println("Entfernung der jeweils obersten Karte der beiden Teilstapel");
        System.out.print("4. Pärchen: ");
        faecherTeil1.gibStart().zeigen();
        System.out.print(" und ");
        faecherTeil2.gibStart().zeigen();
        System.out.println();
        faecherTeil1.entfernen(faecherTeil1.gibStart());
        faecherTeil2.entfernen(faecherTeil2.gibStart());
        System.out.println();
        System.out.println("jeweils verbleibende Karte der beiden Teilstapel");
        System.out.print("5. Pärchen: ");
        faecherTeil1.gibStart().zeigen();
        System.out.print(" und ");
        faecherTeil2.gibStart().zeigen();
        System.out.println();
    }
    
    static int eingabe () 
    {        
        String zeile= "";
        int wert;   
        BufferedReader in= new BufferedReader(new InputStreamReader(System.in) );
        try {
            zeile= in.readLine();
            } catch (IOException ioe) {}
      wert= Integer.parseInt(zeile);
      return wert;
    }

}

