Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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());
        }