コード例 #1
0
        /* *******************************************************
        * 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.
                        }
                    }
                }
            }
        }
コード例 #2
0
        /* *******************************************************
        * 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.
                    }
                }
            }
        }
コード例 #3
0
 /* Obtenga la ficha en su posición 0. */
 public Blanco getFicha()
 {
     if (this.listaBuscados.Count > 0)
     {
         Blanco ficha = this.listaBuscados[0];
         this.listaBuscados.Remove(ficha);
         return(ficha);
     }
     return(null);
 }
コード例 #4
0
 /* Se crea el tablero. */
 public void crearTablero()
 {
     for (int i = 0; i < this.filas; i++)
     {
         for (int j = 0; j < this.columnas; j++)
         {
             tablero[i, j] = new Blanco(i, j);
         }
     }
 }
コード例 #5
0
 /* Mueve la ficha dependiendo de las posiciones X y Y. */
 public void moverFicha(int posX, int posY, Ficha posActual, Blanco nuevaFicha)
 {
     // Si es diagonal me muevo en diagonal. En caso contrario me muevo en línea Recta.
     if (posX == posActual.getX() || posY == posActual.getY())
     {
         nuevaFicha.advanceNormal(campoJuego.getCostoLateral());
     }
     else
     {
         nuevaFicha.advanceDiagonal(campoJuego.getCostoDiagonal());
     }
 }
コード例 #6
0
        /* Inserta una ficha dependiendo de su costo (menores primero). */
        private void insertElement(Blanco ficha)
        {
            for (int i = 0; i < this.listaBuscados.Count; i++)
            {
                Blanco fichaActual = this.listaBuscados[i];
                // Si la nueva ficha tiene un costo menor.
                if (fichaActual.getCostoCompleto() >= ficha.getCostoCompleto())
                {
                    this.listaBuscados.Insert(i, ficha);
                    return;
                }
            }

            this.listaBuscados.Add(ficha); // Agreguela al final.
        }
コード例 #7
0
 /* Inseta un elemento, primero revise si ya se insertó en la lista de búsqueda previamente. */
 public void insert(Blanco ficha)
 {
     for (int i = 0; i < this.listaBuscados.Count; i++)
     {
         Blanco fichaTemp = listaBuscados[i];
         // Si las dos fichas tienen la misma posición.
         if (ficha.compararFicha(fichaTemp))
         {
             // Si su costo es menor a la previa.
             if (ficha.getCostoCompleto() < fichaTemp.getCostoCompleto())
             {
                 cambiosRealizados++;
                 listaBuscados.Remove(fichaTemp);
                 this.insertElement(ficha); // Inserte si su costo es menor.
             }
             return;
         }
     }
     this.insertElement(ficha); // Inserte si no tiene coincidencias.
 }