예제 #1
0
        public void eliminaMuroFant()
        {
            int x, y;

            MurosFant.iniciaRecorrido();
            while (MurosFant.dame_actual_y_avanza(out x, out y))
            {
                cas[x, y] = Casilla.Blanco;
                Console.SetCursorPosition(0, 0);
                Dibuja();
            }
        }
예제 #2
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--;
            }
        }