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--; } }
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