예제 #1
0
        public void posiblesDirs(int fant, out ListaPares l, out int cont)
        {
            //Inicializamos las direcciones
            l = new ListaPares();
            l.insertaFin(1, 0);
            l.insertaFin(0, 1);
            l.insertaFin(-1, 0);
            l.insertaFin(0, -1);
            //Inicializamos la lista de direcciones
            cont = 4;
            int dx, dy;
            int nx, ny;

            //Ahora hacemos un recorrido en esa lista
            l.iniciaRecorrido();
            while (l.dame_actual_y_avanza(out dx, out dy))
            {
                //Donde comprobamos para cada direccion de el fantasma dado si se puede mover
                if (!(siguiente(pers[fant].posX, pers[fant].posY, dx, dy, out nx, out ny) && !hayFantasma(nx, ny)))
                {
                    //En cuyo caso añadimos la direccion a la lista de posibles direcciones y aumentamos cont
                    l.eliminaElto(dx, dy);
                    cont--;
                }
                else if (!(siguiente(pers[fant].posX, pers[fant].posY, dx, dy, out nx, out ny)))
                {
                    l.eliminaElto(-pers[fant].dirX, -pers[fant].dirY);
                    cont--;
                }
            }
            if (cont > 1)
            {
                l.eliminaElto(-pers[fant].dirX, -pers[fant].dirY);
                // (0,1) --> (-0,-1) = (0,-1) , Que es la dir contraria
                cont--;
            }
        }
예제 #2
0
        public Tablero(string file)
        {
            //Vamos a inicializar el random (En debug tendra una seed)
            if (Debug)
            {
                rnd = new Random(100);
            }
            else
            {
                rnd = new Random();
            }

            StreamReader level = new StreamReader(file);

            getDims(file); //Esto pone FILS y COLS bien
            cas  = new Casilla[FILS, COLS];
            pers = new Personaje[5];
            string line;

            for (int i = 0; i < FILS; i++)
            {
                line = level.ReadLine();
                for (int j = 0; j < COLS; j++)
                {
                    switch (line[j * 2])
                    {
                    case '0':
                        cas[i, j] = Casilla.Blanco;
                        break;

                    case '1':
                        cas[i, j] = Casilla.Muro;
                        break;

                    case '2':
                        cas[i, j] = Casilla.Comida;
                        numComida++;
                        break;

                    case '3':
                        cas[i, j] = Casilla.Vitamina;
                        numComida++;
                        break;

                    case '4':
                        cas[i, j] = Casilla.MuroCelda;
                        MurosFant.insertaFin(i, j);     //Tambien guardamos la pos de los muros
                        break;

                    case '5':
                    case '6':
                    case '7':
                    case '8':
                        cas[i, j] = Casilla.Blanco;
                        int n = int.Parse(line[j * 2].ToString()) - 4;
                        pers[n].posX = pers[n].defX = i;
                        pers[n].posY = pers[n].defY = j;
                        pers[n].dirX = pers[n].dirY = 0;     //Por defecto la direccion sera 0,0 , no válida, pero en el siguiente update se corrige
                        break;

                    case '9':
                        cas[i, j]    = Casilla.Blanco;
                        pers[0].posX = pers[0].defX = i;
                        pers[0].posY = pers[0].defY = j;
                        pers[0].dirX = pers[0].dirY = 0;     //Por defecto la direccion sera 0,0 , no válida, pero en el siguiente update se corrige
                        break;
                    }
                }
            }
            level.Close();
        } //Constructora a partir de un archivo