/// <summary> /// Esdeveniment per acutalitzar les posicions /// </summary> /// <param name="anterior"></param> /// <param name="actual"></param> void escenari_Moguda(Posicio anterior, Posicio actual) { //this.Dispatcher.Invoke(DispatcherPriority.Normal, // new Action(() => CanviarPosicions(anterior, actual))); CanviarPosicions(anterior, actual); }
private void CanviarPosicions(Posicio anterior, Posicio actual) { StackPanel sp = diccionariStacks[anterior.Fila.ToString() + "," + anterior.Columna.ToString()]; StackPanel sp2 = diccionariStacks[actual.Fila.ToString() + "," + actual.Columna.ToString()]; Direccio dir; if (!anterior.Buida) { dir = ((Persona)anterior).DireccioActual; Transicio(sp, dir); } else { dir = ((Persona)actual).DireccioActual; Transicio(sp2, dir); } ugPista.Children.Remove(sp); ugPista.Children.Remove(sp2); ugPista.Children.Add(sp); sp.SetValue(Grid.RowProperty, actual.Fila); sp.SetValue(Grid.ColumnProperty, actual.Columna); ugPista.Children.Add(sp2); sp2.SetValue(Grid.RowProperty, anterior.Fila); sp2.SetValue(Grid.ColumnProperty, anterior.Columna); //Modifica el diccionari perque apunti al stackpanel correcte diccionariStacks[anterior.Fila.ToString() + "," + anterior.Columna.ToString()] = sp2; diccionariStacks[actual.Fila.ToString() + "," + actual.Columna.ToString()] = sp; }
private int numero; //<Número de la casella. public Casella(Posicio posicio, Element element, Casella parella, int numero) { this.posicio = posicio; this.element = element; this.parella = parella; this.numero = numero; }
/// <summary> /// Genera totes les dones. /// </summary> /// <param name="nDones"></param> private void GeneraDones(int nDones) { for (int i = 0; i < nDones; i++) { Posicio p = GeneraPosicioBuida(r); p = new Dona(dones[r.Next(0, dones.Count)], GeneraSexe(r), p.Fila, p.Columna); escenari.Posar((Persona)p); } }
/// <summary> /// GeneraCambrers /// </summary> /// <param name="nCambrers"></param> private void GeneraCambrers(int nCambrers) { for (int i = 0; i < nCambrers; i++) { Posicio p = GeneraPosicioBuida(r); p = new Cambrer(p.Fila, p.Columna); escenari.Posar((Persona)p); } }
/// <summary> /// Genera una posició buida per ser assignada. /// </summary> /// <param name="r"></param> /// <returns></returns> private Posicio GeneraPosicioBuida(Random r) { Posicio p = escenari[r.Next(0, escenari.Files), r.Next(0, escenari.Columnes)]; while (!escenari[p.Fila, p.Columna].Buida) { p = escenari[r.Next(0, escenari.Files), r.Next(0, escenari.Columnes)]; } return(p); }
public int generaNoCapt(Posicio posTreball) { int origen, desti; int i; int compta; int numJugades = 0; for (i = 0; i < 16; i++) { origen = posTreball.getPecesNegres(i); switch (i) { case 0: /* REI */ for (int j = 0; j < 8; j++) { desti = origen + MOVS_REI[j]; if (desti < 26 || desti > 117 || posTreball.getCassella(desti) == 99 || posTreball.getCassella(desti) != 0) { } else { // anota jugada numJugades++; printf("%3d-%3d\n", origen, desti); } } break; case 1: /* DAMA */ for (int j = 0; j < MOVS_DAMA.length; j++) { compta = 1; do { desti = origen + compta * MOVS_DAMA[j]; if (desti < 26 || desti > 117 || posTreball.getCassella(desti) == 99 || posTreball.getCassella(desti) != 0) { compta = 100; } else { // anota jugada numJugades++; printf("%3d-%3d\n", origen, desti); } compta++; } while (compta <= MAX_DESPL); } break; case 2: /* TORRE */ case 3: for (int j = 0; j < MOVS_TORRE.length; j++) { compta = 1; do { desti = origen + compta * MOVS_TORRE[j]; if (desti < 26 || desti > 117 || posTreball.getCassella(desti) == 99 || posTreball.getCassella(desti) != 0) { compta = 100; } else { // anota jugada numJugades++; printf("%3d-%3d\n", origen, desti); } compta++; } while (compta <= MAX_DESPL); } break; case 4: case 5: for (int j = 0; j < MOVS_ALFIL.length; j++) { compta = 1; do { desti = origen + compta * MOVS_ALFIL[j]; if (desti < 26 || desti > 117 || posTreball.getCassella(desti) == 99 || posTreball.getCassella(desti) != 0) { compta = 100; } else { // anota jugada numJugades++; printf("%3d-%3d\n", origen, desti); } compta++; } while (compta <= MAX_DESPL); } break; case 6: /* CAVALL */ case 7: for (int j = 0; j < MOVS_CAVALL.length; j++) { desti = origen + MOVS_CAVALL[j]; if (desti < 26 || desti > 117 || posTreball.getCassella(desti) == 99 || posTreball.getCassella(desti) != 0) { } else { // anota jugada numJugades++; printf("%3d-%3d\n", origen, desti); } } break; default: /* PEO */ for (int j = 0; j < MOVS_PEON.length; j++) { desti = origen + MOVS_PEON[j]; if (desti < 26 || desti > 117 || posTreball.getCassella(desti) == 99 || posTreball.getCassella(desti) != 0) { } else { // anota jugada numJugades++; printf("%3d-%3d\n", origen, desti); } } break; } // switch } // for return(numJugades); }
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()); }
private void setup(Taulell taulell) { int iRecurs = taulell.nivell % 4; GameObject t = new GameObject("taulell"); t.transform.SetParent(boardHolder); int nMonedes = 0; foreach (Casella casella in taulell) { Posicio pos = casella.getPosicio(); GameObject objecte = null; //<Objecte a instanciar: moneda, pared, sortida... GameObject numero = null; //<Numero de la casella. GameObject terra = Random.Range(0, 3) < 2 ? this.goTerra : this.goTerres[iRecurs]; switch (casella.getElement()) { case Element.MONEDA: objecte = this.goMoneda; numero = this.goNumero; //objecte.transform.SetParent(monedes.transform); nMonedes++; break; case Element.PARED_IN_V: case Element.PARED_IN_H: objecte = this.goParetIn; //Per qualsevol tipus de pared, posem terra normal. terra = this.goTerra; break; case Element.BUIT: numero = this.goNumero; break; } GameObject instanciaTerra = Instantiate(terra, new Vector3(pos.x * 1.28f, pos.y * 1.28f, 0F), Quaternion.identity) as GameObject; instanciaTerra.transform.SetParent(t.transform); if (objecte != null) { //Hi ha objecte en la casella. GameObject instanciaObjecte = Instantiate(objecte, new Vector3(pos.x * 1.28f, pos.y * 1.28f, 0F), Quaternion.identity) as GameObject; instanciaObjecte.transform.SetParent(instanciaTerra.transform); } if (numero != null) { //Hi ha número en la casella. GameObject instanciaNumero = Instantiate(numero, new Vector3(pos.x * 1.28f, pos.y * 1.28f, 0F), Quaternion.identity) as GameObject; instanciaNumero.GetComponent <UnityEngine.UI.Text>().text = "" + casella.getNumero(); //El número també és fill del terra. instanciaNumero.transform.SetParent(instanciaTerra.transform); } } //Instanciar el jugador. GameObject instanciaJugador = Instantiate(this.goJugador, new Vector3(taulell.jugador.posicio.x, taulell.jugador.posicio.y * 0.84f, 0F), Quaternion.identity) as GameObject; instanciaJugador.transform.SetParent(boardHolder); //Instanciar la sortida. GameObject instanciaSortida = Instantiate(this.goSortides[iRecurs], new Vector3(taulell.sortida.posicio.x * 1.28f, taulell.sortida.posicio.y * 1.28f, 0F), Quaternion.identity) as GameObject; instanciaSortida.transform.SetParent(boardHolder); GameManager.instancia.setTotalMonedes(nMonedes); GameManager.instancia.setSortida(instanciaSortida); //Fer les parets exteriors per evitar que el jugador surti de la pantalla. ferVoltant(taulell).transform.SetParent(boardHolder); }
public readonly Posicio posicio; //<Posició de la sortida. public Sortida(Posicio posicio) { this.posicio = posicio; }
public readonly Posicio posicio; //<Posició del jugador. public Jugador(Posicio posicio) { this.posicio = posicio; }