protected void MueveNiños() { List <Tuple <int, int> > posnew = new List <Tuple <int, int> >(); Tuple <int, int> dir; foreach (var niño in PosNiños) { dir = new Tuple <int, int>(Random.Next(-1, 2), Random.Next(-1, 2)); int x = niño.Item1 + dir.Item1; int y = niño.Item2 + dir.Item2; if (Se_Mueve(niño, dir) && (dir.Item1 != 0 || dir.Item2 != 0)) { if (Casillas[x, y] == Elemento.Obstaculo) { int a = x; int b = y; do { a += dir.Item1; b += dir.Item2; } while (Ocupadas[a, b]); Casillas[a, b] = Elemento.Obstaculo; PosObstaculo.Add(new Tuple <int, int>(a, b)); PosObstaculo.Remove(new Tuple <int, int>(x, y)); Ocupadas[a, b] = true; } int X = niño.Item1; int Y = niño.Item2; Casillas[x, y] = Elemento.Niño; Ocupadas[x, y] = true; //Puede que en el turno anterior el robot lo halla dejado //y por tanto estan juntos if (Casillas[X, Y] != Elemento.NiñoYRobot) { Casillas[X, Y] = Elemento.Vacia; Ocupadas[X, Y] = false; } else { Casillas[X, Y] = Elemento.Robot; } Acciones.Enqueue("Se mueve niño de la posicion (" + niño.Item1 + "," + niño.Item2 + ") a la posicion (" + x + "," + y + ")"); posnew.Add(new Tuple <int, int>(x, y)); } else { Acciones.Enqueue("El niño de la posicion (" + niño.Item1 + "," + niño.Item2 + ") no se mueve"); posnew.Add(niño); } } PosNiños = posnew; }
public void CambioAleatorio() { Acciones.Enqueue("Ocurre un Cambio Aleatorio De Ambiente"); Ocupadas = new bool[N, M]; Casillas = new Elemento[N, M]; int corral = PosCorral.Count; int sucio = PosSuciedad.Count; int cantN = PosNiños.Count; PosCorral.Clear(); PosNiños.Clear(); PosObstaculo.Clear(); PosSuciedad.Clear(); foreach (var item in Robots) { Ocupadas[item.X, item.Y] = true; Casillas[item.X, item.Y] = Elemento.Robot; } Acciones.Enqueue("Reubicando elementos"); PonerCorral(corral, totalNiños - corral); PonerElemento(obstaculos, Elemento.Obstaculo); PonerElemento(sucio, Elemento.Suciedad); PonerElemento(cantN, Elemento.Niño); }
protected void PonerElemento(int cant, Elemento element) { int x; int y; do { x = Random.Next(0, N); y = Random.Next(0, M); if (!Ocupadas[x, y]) { Ocupadas[x, y] = true; Casillas[x, y] = element; switch (element) { case Elemento.Niño: { PosNiños.Add(new Tuple <int, int>(x, y)); Acciones.Enqueue("Se ubica niño en la posicion (" + x + "," + y + ")"); } break; case Elemento.Suciedad: { PosSuciedad.Add(new Tuple <int, int>(x, y)); Acciones.Enqueue("Se crea suciedad en la posicion (" + x + "," + y + ")"); } break; case Elemento.Obstaculo: { PosObstaculo.Add(new Tuple <int, int>(x, y)); Acciones.Enqueue("Se ubica obstaculo en la posicion (" + x + "," + y + ")"); } break; default: break; } cant--; } } while (cant > 0 && HayEspacio()); }