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