チェスで「チェックを検出する」方法をスピードアップする方法はありますか?

サミュエルKhzym:

私はJavaFXのチェスアプリケーションを開発していると私は黒と白の王は、チェックしてかそうでないかどうかを検出する方法を実装しようとしています。それは動作しますが、私は、ユーザーが作品を動かすたびに、それを呼び出す場合でも、それはまだ非常にアプリケーションを遅れ。これらの動きのいずれかが王の位置にある場合には、対向する色、そしてチェックのすべての可能な動きを検出することによって動作します。より効率的な方法を作成する方法はありますか?

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:

あなたは、水平方向、垂直方向に、騎士の移動のためのスキャンの各王の位置で始まり、そして斜めcheck.Thisで王を入れている適切な対戦相手の駒がすべての可能な動きよりも小さいスキャンを生じるはずであるため可能性があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=185279&siteId=1