/**
 * Vorführung des Tricks "21 Karten"
 * 
 * @author (Ulrich Kiesmüller) 
 * @version (1.4)
 */

import java.io.*;

public class Testklasse
{
    private Kartenstapel stapel;
    private Kartenstapel teilstapel1;
    private Kartenstapel teilstapel2;
    private Kartenstapel teilstapel3;
    private Kartenfeld feldGesamt;

    public Testklasse()
    {
        stapel = new Kartenstapel(21);
        teilstapel1 = new Kartenstapel(7);
        teilstapel2 = new Kartenstapel(7);
        teilstapel3 = new Kartenstapel(7);
        feldGesamt = new Kartenfeld();
    }

    /**
     * Mainmethode 
     */
    public void main()
    {
        // Bilden eines Feldes aus den notwendigen 21 Karten
        stapel.setzeKarte(new Karte("Herz", "Bube"), 0);
        stapel.setzeKarte(new Karte("Pik", "As  "), 1);
        stapel.setzeKarte(new Karte("Kreuz", "Sieben"), 2);
        stapel.setzeKarte(new Karte("Pik", "Sechs"), 3);
        stapel.setzeKarte(new Karte("Karo", "As  "), 4);
        stapel.setzeKarte(new Karte("Kreuz", "Sechs"), 5);
        stapel.setzeKarte(new Karte("Karo", "Zwei"), 6);
        stapel.setzeKarte(new Karte("Herz", "Koenig"), 7);
        stapel.setzeKarte(new Karte("Karo", "Sechs"), 8);
        stapel.setzeKarte(new Karte("Herz", "Sechs"), 9);
        stapel.setzeKarte(new Karte("Pik", "Koenig"), 10);
        stapel.setzeKarte(new Karte("Kreuz", "Vier"), 11);
        stapel.setzeKarte(new Karte("Pik", "Sieben"), 12);
        stapel.setzeKarte(new Karte("Pik", "Sechs"), 13);
        stapel.setzeKarte(new Karte("Herz", "Fuenf"), 14);
        stapel.setzeKarte(new Karte("Kreuz", "Zwei"), 15);
        stapel.setzeKarte(new Karte("Karo", "Vier"), 16);
        stapel.setzeKarte(new Karte("Herz", "Drei"), 17);
        stapel.setzeKarte(new Karte("Karo", "Bube"), 18);
        stapel.setzeKarte(new Karte("Kreuz", "Drei"), 19);
        stapel.setzeKarte(new Karte("Pik", "Dame"), 20);
        feldGesamt = feldGesamt.fuellen(stapel);
        //Ausgeben des gefüllten Feldes
        feldGesamt.ausgeben();
        System.out.println();
        //Auswählen der Spalte mit der gemerkten Karte
        int spos;
        for (int k = 1; k <= 3; k++)
        {
            spos = 0;
            while (spos == 0)
            {
                System.out.print("In welcher Spalte - 1 bis 3 - befindet sich die von Ihnen gemerkte Karte? ");
                spos = eingabe();
                if (spos < 1 || spos > 3) spos = 0;
            }
            System.out.println();
            //Aufnehmen der Karten - gewählter Stapel in der Mitte
            teilstapel1 = feldGesamt.nimmSpalte(mymod3(spos - 1)-1);
            teilstapel2 = feldGesamt.nimmSpalte(spos - 1);
            teilstapel3 = feldGesamt.nimmSpalte(mymod3(spos + 1)-1);
            stapel.anhaengenAn(teilstapel1, 0);
            stapel.anhaengenAn(teilstapel2, 7);
            stapel.anhaengenAn(teilstapel3, 14);
            feldGesamt = feldGesamt.fuellen(stapel);
            feldGesamt.ausgeben();
            System.out.println();
        }
        System.out.print("Sie hatten sich die Karte '");
        feldGesamt.gibPos(1,3).zeigen(); 
        System.out.println("' gemerkt, die genau in der Mitte des Kartenfeldes liegt.");
    }
    
    public int mymod3(int z)
    {
        if (z%3 == 0) return 3;
        else return z%3;
    }
    
    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;
    }
}

