/* ******************************************************* * Obtengo todos los posibles movimientos de una ficha. * Se recibe la ficha a la que desea saber los posibles movimientos. * Se permiten movimientos laterales y diagonales. * Agrega a la lista de buscados. *********************************************************/ public void obtenerAliadosDiagonal(Ficha posActual) { Ficha meta = this.campoJuego.getMeta(); int x = posActual.getX() - 1; int y = posActual.getY() - 1; for (int posX = x; posX < (x + 3); posX++) { for (int posY = y; posY < (y + 3); posY++) { // Si no se sale del tablero y además no se evalua la misma ficha. if ((posX >= 0 && posX < this.rows) && (posY >= 0 && posY < this.cols) && (posActual.getX() != posX || posActual.getY() != posY)) { // Si es un movimiento válido (No es un enemigo y no lo había hecho previamente). if (movimientoValido(posActual, posX, posY)) { Blanco nuevaFicha = new Blanco(posX, posY, posActual); nuevaFicha.setCostoManhattan(meta); // Si es diagonal me muevo en diagonal. En caso contrario me muevo en línea Recta. moverFicha(posX, posY, posActual, nuevaFicha); listaBuscados.insert(nuevaFicha); // Se inserta la nueva ficha. } } } } }
/* ******************************************************* * Obtengo todos los posibles movimientos de una ficha. * Se recibe la ficha a la que desea saber los posibles movimientos. * Solo se permiten movimientos laterales (arriba, abajo, derecha e izquierda). * Agrega a la lista de buscados. *********************************************************/ public void obtenerAliadosLaterales(Ficha posActual) { Ficha meta = this.campoJuego.getMeta(); int x = posActual.getX(); int y = posActual.getY(); int[,] positions = new int[4, 2] { { x - 1, y }, { x + 1, y }, { x, y - 1 }, { x, y + 1 } }; // Realice cuatro veces por las diagonales de las fichas. for (int pos = 0; pos < 4; pos++) { int posX = positions[pos, 0]; int posY = positions[pos, 1]; // Si no se sale del tablero y además no se evalua la misma ficha. if ((posX >= 0 && posX < this.rows) && (posY >= 0 && posY < this.cols) && (posActual.getX() != posX || posActual.getY() != posY)) { // Compare tablero[i, j]; if (movimientoValido(posActual, posX, posY)) { Blanco nuevaFicha = new Blanco(posX, posY, posActual); nuevaFicha.setCostoManhattan(meta); // Si es diagonal me muevo en diagonal. En caso contrario me muevo en línea Recta. moverFicha(posX, posY, posActual, nuevaFicha); listaBuscados.insert(nuevaFicha); // Se inserta la nueva ficha. } } } }