Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
 /// <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);
     }
 }
Exemplo n.º 5
0
 /// <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);
     }
 }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
    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);
    }
Exemplo n.º 8
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());
    }
Exemplo n.º 9
0
    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);
    }
Exemplo n.º 10
0
        public readonly Posicio posicio;         //<Posició de la sortida.

        public Sortida(Posicio posicio)
        {
            this.posicio = posicio;
        }
Exemplo n.º 11
0
        public readonly Posicio posicio;         //<Posició del jugador.

        public Jugador(Posicio posicio)
        {
            this.posicio = posicio;
        }