Beispiel #1
0
        /// <summary>
        /// Decideix quin serà el següent moviment que farà la persona
        /// </summary>
        /// <param name="esc">Escenari on esta situada la persona</param>
        /// <returns>Una de les 5 possibles direccions (Quiet, Amunt, Avall, Dreta, Esquerra</returns>
        public Direccio OnVaig(Escenari esc)
        {
            //Genero un graudirecció nou que m'ajudarà a calcular i a fer el codi del on vaig més senzill
            // Aquesta clase per defecte s'instancia amb els valors a 0.
            GrauDireccio gd = new GrauDireccio(r);

            // Assigno les posicions sempre que siguin assignables.
            gd.Assigna(Direccio.Quiet, Atraccio(fila, columna, esc.TaulaPersones));
            if (esc.DestiValid(fila + 1, columna))
            {
                gd.Assigna(Direccio.Avall, Atraccio(fila + 1, columna, esc.TaulaPersones));
            }
            if (esc.DestiValid(fila - 1, columna))
            {
                gd.Assigna(Direccio.Amunt, Atraccio(fila - 1, columna, esc.TaulaPersones));
            }
            if (esc.DestiValid(fila, columna - 1))
            {
                gd.Assigna(Direccio.Esquerra, Atraccio(fila, columna - 1, esc.TaulaPersones));
            }
            if (esc.DestiValid(fila, columna + 1))
            {
                gd.Assigna(Direccio.Dreta, Atraccio(fila, columna + 1, esc.TaulaPersones));
            }
            // Retorno la que té preferència. En cas d'empat ja sap calcular-se el random ella sola gràcies a que li he passat anteriorment.
            actual = gd.DireccióResultat();
            return(actual);
        }
        private void CrearPersones()
        {
            Random r = new Random();
            int    sexe, fila, columna;
            string nomImatge;

            // Generem les dones
            for (int dona = 0; dona < num_dones; dona++)
            {
                // generem valors aleatòris
                fila    = r.Next(0, num_files);
                columna = r.Next(0, num_columnes);

                while (!esc.DestiValid(fila, columna))
                {
                    fila    = r.Next(0, num_files);
                    columna = r.Next(0, num_columnes);
                }

                sexe = r.Next(0, 4);

                // Assignem el nom de la imatge
                nomImatge = "/Fotos/Dones/" + imgDones[r.Next(0, imgDones.Length)];

                // Creem una nova dona i la col·loquem a l'escenari
                Dona d = new Dona(nomsDones[dona], sexe, nomImatge);
                d.Columna = columna;
                d.Fila    = fila;
                esc.posar(d);

                creaQuadre(nomImatge, d.Nom, d.Fila, d.Columna, 14);
            }

            // Generem els homes
            for (int home = 0; home < num_homes; home++)
            {
                // generem valors aleatòris
                fila    = r.Next(0, num_files);
                columna = r.Next(0, num_columnes);
                while (!esc.DestiValid(fila, columna))
                {
                    fila    = r.Next(0, num_files);
                    columna = r.Next(0, num_columnes);
                }
                sexe = r.Next(0, 4);

                // Assignem el nom de la imatge
                nomImatge = "/Fotos/Homes/" + imgHomes[r.Next(0, imgHomes.Length)];


                // Creem un nou home i la col·loquem a l'escenari
                Home h = new Home(nomsHomes[home], sexe, nomImatge);
                h.Columna = columna;
                h.Fila    = fila;
                esc.posar(h);

                creaQuadre(nomImatge, h.Nom, h.Fila, h.Columna, 14);
            }

            // Generem els cambrers
            for (int cambrer = 0; cambrer < num_cambrers; cambrer++)
            {
                // generem valors aleatòris
                fila    = r.Next(0, num_files);
                columna = r.Next(0, num_columnes);
                while (!esc.DestiValid(fila, columna))
                {
                    fila    = r.Next(0, num_files);
                    columna = r.Next(0, num_columnes);
                }

                nomImatge = "/Fotos/Cambrer/Camarero.png";

                // Creem un nou home i la col·loquem a l'escenari
                Cambrer c = new Cambrer(nomImatge);
                c.Columna = columna;
                c.Fila    = fila;
                esc.posar(c);

                creaQuadre(nomImatge, "*", c.Fila, c.Columna, 14);
            }

            // Acabem d'omplir les caselles amb stackpanel per permetre el drag&drop
            StackPanel sp;

            for (fila = 0; fila < num_files; fila++)
            {
                for (columna = 0; columna < num_columnes; columna++)
                {
                    if (esc[fila, columna].Buida)
                    {
                        sp            = new StackPanel();
                        sp.AllowDrop  = true;
                        sp.MouseDown += persona_MouseDown;
                        sp.DragEnter += persona_DragEnter;
                        sp.Drop      += persona_Drop;
                        sp.Background = new SolidColorBrush(Colors.Red);
                        sp.Opacity    = 0;
                        Grid.SetColumn(sp, columna);
                        Grid.SetRow(sp, fila);
                        grdEscenari.Children.Add(sp);
                    }
                }
            }
        }