¿Hay una manera de acelerar un método "detectar verificación" en el ajedrez?

Samuel Khzym :

Estoy desarrollando una aplicación JavaFX ajedrez y yo estoy tratando de poner en práctica un método que detecta si los reyes en blanco y negro están en cheque o no. Funciona, pero incluso cuando sólo lo llamo cada vez que el usuario mueve una pieza, que aún se encuentra la aplicación inmensamente. Funciona mediante la detección de todos los movimientos posibles del color opuesto, entonces comprueba si cualquiera de esos movimientos están en la posición del rey. ¿Hay alguna manera de hacer que un método más eficiente?

private boolean getCheck(String colour) {
    ArrayList<int[]> totalMoves = new ArrayList<int[]>();
    ArrayList<int[]> pieceMoves = new ArrayList<int[]>();

    int kingRow = 0;
    int kingColumn = 0;

    if (colour.equals("BLACK")) {
        for (int i = 0; i < chessPieces.size(); i++) {
            if (chessPieces.get(i).getPiece().equals("BLACKKING")) {
                kingRow = chessPieces.get(i).getRow();
                kingColumn = chessPieces.get(i).getColumn();
            }
        }

        for (int i = 0; i < chessPieces.size(); i++) {
            if (chessPieces.get(i).getPiece().contains("WHITE")) {
                pieceMoves = showPossibleMoves(new int[]{
                        chessPieces.get(i).getColumn(),
                        chessPieces.get(i).getRow()
                    }, chessPieces);

                for (int j = 0; j < pieceMoves.size(); j++) {
                    if (pieceMoves.get(j)[1] == kingRow && pieceMoves.get(j)[0] == kingColumn) {
                        return true;
                    }
                }
            }
        }
    } else if (colour.equals("WHITE")) {
        for (int i = 0; i < chessPieces.size(); i++) {
            if (chessPieces.get(i).getPiece().equals("WHITEKING")) {
                kingRow = chessPieces.get(i).getRow();
                kingColumn = chessPieces.get(i).getColumn();
            }
        }

        for (int i = 0; i < chessPieces.size(); i++) {
            if (chessPieces.get(i).getPiece().contains("BLACK")) {
                pieceMoves = showPossibleMoves(new int[]{
                        chessPieces.get(i).getColumn(),
                        chessPieces.get(i).getRow()
                    }, chessPieces);

                for (int j = 0; j < pieceMoves.size(); j++) {
                    if (pieceMoves.get(j)[1] == kingRow && pieceMoves.get(j)[0] == kingColumn) {
                        return true;
                    }
                }
            }
        }
    }

    return false;
}
rcgldr:

Se podría empezar con la posición de cada rey, exploración de caballo se mueve, vertical, horizontal y diagonalmente para las piezas adecuadas oponente que están poniendo al rey en check.This deberían dar lugar a una exploración más pequeño que todos los movimientos posibles.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=185282&siteId=1
Recomendado
Clasificación