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; }
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()); }