package jatek;
import szereplo.*;
public class Utveszto {
    
    public static final int FAL=0, KERET=1, FOLYOSO=2, LATOTT=3, START=4, CEL=5;
    public int meret;
    public int[][] terkep=new int[100][100];
    public Szereplo start;
    public Cel cel;
    public SzilardMozgoSzereplo jatekos;

    public Utveszto(int szint) {
        meret=szint*2+3;
        jatekos=new SzilardMozgoSzereplo(szint);

        /* keretezés */
        for(int i=0; i<meret; i++) for(int j=0; j<meret; j++) terkep[i][j]=KERET;
        for(int i=1; i<meret-1; i++) for(int j=1; j<meret-1; j++) terkep[i][j]=FAL;

        /* kiindulás */
        terkep[jatekos.getX()][jatekos.getY()]=START;
        start=new Szereplo(jatekos);
        MozgoSzereplo indito=new MozgoSzereplo(jatekos);
        indito.elore(terkep);
        terkep[indito.getX()][indito.getY()]=FOLYOSO;
        indito.elore(terkep);
        terkep[indito.getX()][indito.getY()]=FOLYOSO;
        jatekos.elore(terkep);

        /* útvesztőépítés */
        Szereplo[] folytathatoFolyosoreszek=new Szereplo[szint*szint];
        folytathatoFolyosoreszek[0]=new Szereplo(indito);
        int folytathatoFolyosoreszekSzama=1;
        while(folytathatoFolyosoreszekSzama>0) {
            int vizsgaltFolyoso=(int)(Math.random()*folytathatoFolyosoreszekSzama);
            boolean folytathato=false;
            int lehetsegesIranyokSzama=0;
            int[] lehetsegesIranyok=new int[4];

            /* lehetséges irányok meghatározása */
            Szereplo vizsgaltFolyosoresz=new Szereplo(folytathatoFolyosoreszek[vizsgaltFolyoso]);
            if(vizsgaltFolyosoresz.balSzomszedFal(terkep)) {
                folytathato=true;
                lehetsegesIranyok[lehetsegesIranyokSzama++]=Main.BALRA;
            }
            if(vizsgaltFolyosoresz.felsoSzomszedFal(terkep)) {
                folytathato=true;
                lehetsegesIranyok[lehetsegesIranyokSzama++]=Main.FELFELE;
            }
            if(vizsgaltFolyosoresz.jobbSzomszedFal(terkep)) {
                folytathato=true;
                lehetsegesIranyok[lehetsegesIranyokSzama++]=Main.JOBBRA;
            }
            if(vizsgaltFolyosoresz.alsoSzomszedFal(terkep)) {
                folytathato=true;
                lehetsegesIranyok[lehetsegesIranyokSzama++]=Main.LEFELE;
            }
            if(folytathato==false) {

                /* a vizsgált folyosó kivonása a folytatható folyosók közül */
                folytathatoFolyosoreszek[vizsgaltFolyoso]=folytathatoFolyosoreszek[folytathatoFolyosoreszekSzama-1];
                folytathatoFolyosoreszekSzama--;
            }
            else {

                /* a vizsgált folyosó folytatása az egyik lehetséges irányba */
                int valasztottIrany=lehetsegesIranyok[(int)(Math.random()*lehetsegesIranyokSzama)];
                MozgoSzereplo folyosoEpito=new MozgoSzereplo(vizsgaltFolyosoresz,valasztottIrany);
                folyosoEpito.elore(terkep);
                terkep[folyosoEpito.getX()][folyosoEpito.getY()]=FOLYOSO;
                folyosoEpito.elore(terkep);
                terkep[folyosoEpito.getX()][folyosoEpito.getY()]=FOLYOSO;
                folytathatoFolyosoreszek[folytathatoFolyosoreszekSzama]=folyosoEpito;
                folytathatoFolyosoreszekSzama++;
            }
        }
        /* cél meghatározása */
        cel=new Cel(jatekos);
        cel.elhelyez(terkep);
        terkep[cel.getX()][cel.getY()]=CEL;
    }
}
