Beispiel #1
0
 public Taulell(int nivell, int nFiles, int nColumnes, List <List <Casella> > taulell, Jugador jugador, Sortida sortida)
 {
     this.nivell    = nivell;
     this.taulell   = taulell;
     this.nFiles    = nFiles;
     this.nColumnes = nColumnes;
     this.jugador   = jugador;
     this.sortida   = sortida;
 }
Beispiel #2
0
    public void carregar(int nivell, string[] linies)
    {
        int indexLinia = 0;

        //Primera línia: mida del costat del tauler.
        int nFiles    = System.Int32.Parse(linies[indexLinia].Split(';')[0]);
        int nColumnes = System.Int32.Parse(linies[indexLinia].Split(';')[1]);

        //Debug.Log("Files: " + nFiles + ", columnes: " + nColumnes);
        indexLinia++;

        //Línia en blanc.
        indexLinia++;

        //Debug.Log("Començem a llegir el taulell en la linia " + indexLinia);

        Dictionary <int, Posicio> vinculador = new Dictionary <int, Posicio>();
        List <List <Casella> >    t          = new List <List <Casella> >();
        Jugador jugador = null;
        Sortida sortida = null;

        //Aplicar la capa d'estructura
        {
            for (int i = 0; i < nFiles; i++)
            {
                string[] sFila = linies[indexLinia++].Split(';');
                if (sFila.Length != nColumnes)
                {
                    throw new FitxerFormatException("La fila " + i + " de l'estructura del taulell no és valida, hauria de tenir: " + nColumnes + " columnes i en té: " + sFila.Length);
                }
                List <Casella> f = new List <Casella>(nColumnes);
                t.Add(f);
                for (int j = 0; j < nColumnes; j++)
                {
                    Element element = Element.BUIT;
                    Casella parella = null;
                    int     valor   = System.Int32.Parse(sFila[j]);
                    Posicio pos     = new Posicio(i, j);
                    if (valor > 0)
                    {
                        //Fem el doble enllaç de la posició.
                        if (!vinculador.ContainsKey(valor))
                        {
                            //Debug.Log("Afegim " + pos + " per vincular amb etiqueta "+valor);
                            vinculador.Add(valor, pos);
                        }
                        else
                        {
                            Posicio pParella = vinculador[valor];
                            //Debug.Log("Anem a vincular la etiqueta " + valor + ", trobat: " + pParella);
                            parella = t[pParella.y][pParella.x];
                            vinculador.Remove(valor);
                        }
                    }
                    else
                    {
                        element = valor == PARED_IN_H ? Element.PARED_IN_H: Element.PARED_IN_V;
                    }
                    f.Add(new Casella(pos, element, parella, valor));
                }
            }
        }

        Debug.Log("Fase 1 acabada, estructura del taulell");

        //Línia en blanc.
        indexLinia++;

        //Aplicar la capa d'objectes.
        {
            for (int i = 0; i < nFiles; i++)
            {
                string[] sFila = linies[indexLinia++].Split(';');
                if (sFila.Length != nColumnes)
                {
                    throw new FitxerFormatException("La fila " + i + " de l'estructura dels objectes del taulell no és valida, hauria de tenir: " + nColumnes + " columnes i en té: " + sFila.Length);
                }
                for (int j = 0; j < nColumnes; j++)
                {
                    //Debug.Log("Trobat: " + sFila[j]);
                    switch (sFila[j])
                    {
                    case "C":
                        //Coin -> Moneda
                        t[i][j].setElement(Element.MONEDA);
                        break;

                    case "E":
                        //Exit -> Sortida
                        sortida = new Sortida(new Posicio(i, j));
                        break;

                    case "P":
                        //Player -> Jugador
                        jugador = new Jugador(new Posicio(i, j));
                        break;
                    }
                }
            }
        }

        Debug.Log("Fase 2 acabada, objectes del taulell");

        if (vinculador.Keys.Count > 0)
        {
            //El taulell està mal format, cal llençar excepció.
        }

        this.setup(new Taulell(nivell, nFiles, nColumnes, t, jugador, sortida).validar());
    }