/**
 * Kartenfeld für magische Informatik
 * zur Behandlung aller Routinen für die Arbeit mit (Teil-)Kartensets
 * Implementierung als zwei-dimensionales Array
 * 
 * @author (Ulrich Kiesmüller) 
 * @version (1.6)
 */
 
public class Kartenfeld
{
    // Variablen
    private Karte[][] feld = new Karte [3][7];

    /**
     * Konstruktor
     */
    public Kartenfeld()
    {
        // Initialisierung
        for (int i = 0; i < 3; i++)
        { 
            for (int j = 0; j < 7; j++)
            {
                feld[i][j] = new Karte("","");
            }
        }
    }

    /**
     * Methoden zur Kartenfeldbehandlung
     * erst allgemeine, dann trickspezifische
     */
    public void fuellenPos(Karte k, int xpos, int ypos)
    {
        feld[xpos][ypos] = k;
    }
    
    public Karte gibPos(int xpos, int ypos)
    {
        return feld[xpos][ypos];
    }
    
    public Kartenstapel nimmSpalte(int x)
    {
        Kartenstapel temp = new Kartenstapel(7);
        for (int i = 0; i < 7 ; i++)
        {
            temp.setzeKarte(feld [x][i], i);
        }
        return temp;
    }
    
    public Kartenfeld fuellen(Kartenstapel st)
    {
        Kartenfeld temp = new Kartenfeld();
        for (int j = 0 ; j < 7 ; j++)
        {
            for (int i = 0 ; i < 3 ; i++)
            {
                temp.fuellenPos(st.gibKarte(i+j*3), i, j);
            }
        }
        return temp;
    }
    
    public Kartenstapel feld2stapel(int gewaehlteSpalte)
    {
        Kartenstapel teilstapel1 = new Kartenstapel(7);
        teilstapel1 = nimmSpalte(mymod3(gewaehlteSpalte - 1) - 1);
        Kartenstapel teilstapel2 = new Kartenstapel(7);
        teilstapel2 = nimmSpalte(gewaehlteSpalte - 1);
        Kartenstapel teilstapel3 = new Kartenstapel(7);
        teilstapel3 = nimmSpalte(mymod3(gewaehlteSpalte + 1) - 1);
        Kartenstapel hilfe = new Kartenstapel(21);
        hilfe.anhaengenAn(teilstapel1,0);
        hilfe.anhaengenAn(teilstapel2,7);
        hilfe.anhaengenAn(teilstapel3,14);
        return hilfe;
    }
    
    public int mymod3(int z)
    {
        if (z%3 == 0) return 3;
        else return z%3;
    }

    public void ausgeben()
    {
        for (int j = 0; j < 7 ; j++)
        {
            for (int i = 0; i < 3 ; i++)
            {
                feld[i][j].zeigen();
                System.out.print("\t  ");
            }
            System.out.println();
        }
    }
}
