/// <summary> /// Fa que totes les persones facin un moviment /// </summary> public void Cicle() { foreach (Persona p in tp) { Direccio d = p.OnVaig(this); if (d == Direccio.Amunt) { this.Moure(p.Fila, p.Columna, p.Fila - 1, p.Columna); } else if (d == Direccio.Avall) { this.Moure(p.Fila, p.Columna, p.Fila + 1, p.Columna); } else if (d == Direccio.Dreta) { this.Moure(p.Fila, p.Columna, p.Fila, p.Columna + 1); } else if (d == Direccio.Esquerra) { this.Moure(p.Fila, p.Columna, p.Fila, p.Columna - 1); } else if (d == Direccio.Quiet) { this.Moure(p.Fila, p.Columna, p.Fila, p.Columna); } } }
/// <summary> /// Se li passa un string i retorna l'enumeració. /// </summary> /// <param name="dir"></param> /// <returns></returns> private Direccio getDireccioEnum(string dir) { Direccio res = Direccio.Amunt; switch (dir) { case "Amunt": res = Direccio.Amunt; break; case "Avall": res = Direccio.Avall; break; case "Esquerre": res = Direccio.Esquerra; break; case "Dreta": res = Direccio.Dreta; break; case "Quiet": res = Direccio.Quiet; break; } return(res); }
private void Transicio(StackPanel sp, Direccio dir) { Storyboard story = new Storyboard(); ThicknessAnimation animacioStack1 = new ThicknessAnimation(); Thickness marginOri = sp.Margin; Thickness margin = RetornaDireccioMargin(dir); story.Children.Add(animacioStack1); //sp.SetValue(Grid.ZIndexProperty, 10); animacioStack1.From = marginOri; animacioStack1.To = margin; animacioStack1.Duration = TimeSpan.FromSeconds(SEGONSPAUSA / 2); animacioStack1.FillBehavior = FillBehavior.HoldEnd; Storyboard.SetTarget(animacioStack1, sp); Storyboard.SetTargetProperty(animacioStack1, new PropertyPath(Grid.MarginProperty)); story.Begin(); Pausa(SEGONSPAUSA); // Thread.Sleep(TimeSpan.FromSeconds(SEGONSPAUSA)); sp.BeginAnimation(Grid.MarginProperty, null); }
private Posicio CalculaPosicioNova(int fil, int col, Direccio direccio) { Posicio pos = new Posicio(); switch (direccio) { case Direccio.Amunt: pos.Fila = fil - 1; pos.Columna = col; break; case Direccio.Avall: pos.Fila = fil + 1; pos.Columna = col; break; case Direccio.Dreta: pos.Fila = fil; pos.Columna = col + 1; break; case Direccio.Esquerra: pos.Fila = fil; pos.Columna = col - 1; break; default: pos.Fila = fil; pos.Columna = col; break; } return(pos); }
/// <summary> /// Retorna el valor de la clau del diccionari referent a la direcció que reb. /// </summary> /// <param name="d"></param> /// <returns></returns> private string getDireccio(Direccio d) { string s = ""; switch (d) { case Direccio.Amunt: s = "Amunt"; break; case Direccio.Avall: s = "Avall"; break; case Direccio.Dreta: s = "Dreta"; break; case Direccio.Esquerra: s = "Esquerre"; break; case Direccio.Quiet: s = "Quiet"; break; } return(s); }
/// <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); }
public MainWindow() { InitializeComponent(); timer = new DispatcherTimer(); capRobot = new List <Robot>(); tresor = new List <Tresor>(); capRobot.Add(new Robot(width, height)); tresor.Add(new Tresor(random.Next(0, 37) * 10, random.Next(0, 35) * 10)); timer.Interval = new TimeSpan(0, 0, 0, 0, 100); direccio = Direccio.Down; timer.Tick += Timer_Tick; }
private Thickness RetornaDireccioMargin(Direccio dir) { Thickness th = new Thickness(); switch (dir) { case Direccio.Amunt: th.Top = -ALTSTACK * 2; break; case Direccio.Avall: th.Bottom = -ALTSTACK * 2; break; case Direccio.Dreta: th.Right = -AMPLESTACK * 2; break; case Direccio.Esquerra: th.Left = -AMPLESTACK * 2; break; } return(th); }
/// <summary> /// Retorna un nombre referent a la càrrega de la direcció. /// </summary> /// <param name="d"></param> /// <returns></returns> public double Extreu(Direccio d) { string dir = getDireccio(d); return(Graus[dir]); }
/// <summary> /// Switch que ens permet definir la direcció. /// </summary> /// <param name="d"></param> /// <param name="grau"></param> public void Assigna(Direccio d, double grau) { string dir = getDireccio(d); Graus[dir] = grau; }