【发布时间】:2018-12-25 18:33:29
【问题描述】:
我正在开发一个 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;
}
【问题讨论】:
-
如果需要更多信息,请告诉我,例如 showPossibleMoves() 方法。