我遇到了麻烦当使用Chesspresso 0.9.2方法时,位置#doMove(短移动),以便添加动作。非法移动似乎被接受以及合法移动,但Game#doMove()方法应该抛出IllegalMoveException
这是我的实验班:
package com.gmail.bernabe.laurent.j2se.chesspresso_test;
import javax.swing.JFrame;
import chesspresso.Chess;
import chesspresso.game.Game;
import chesspresso.game.view.GameBrowser;
import chesspresso.move.IllegalMoveException;
import chesspresso.move.Move;
public class ChessFrame extends JFrame {
public ChessFrame(){
setTitle("Chesspresso gamebrowser test");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(gameBrowser);
pack();
addMove(Chess.E2, Chess.E4, false, "Debut pour une partie ouverte");
addMove(Chess.E7, Chess.E5, false, "Reponse symetrique forte");
addMove(Chess.G1, Chess.F3, false, null);
addMove(Chess.B8, Chess.C6, false, null);
addMove(Chess.F1, Chess.B5, false, null);
}
private void addMove(int fromSquareIndex, int toSquareIndex,
boolean isCapturingMove, String comment){
try {
short move = Move.getRegularMove(fromSquareIndex, toSquareIndex,
isCapturingMove);
if (Move.isValid(move)) {
chessGame.getPosition().doMove(move);
if (comment != null && comment.length() > 0)
chessGame.addComment(comment);
}
} catch (IllegalMoveException e) {
e.printStackTrace();
}
}
private Game chessGame = new Game();
private GameBrowser gameBrowser = new GameBrowser(chessGame);
private static final long serialVersionUID = -6856238414376776882L;
}
这是我的主要课程:
package com.gmail.bernabe.laurent.j2se.chesspresso_test;
public class ChesspressoGraphicalTest {
public static void main(String[] args) {
ChessFrame chessFrame = new ChessFrame();
chessFrame.setVisible(true);
}
}
正如你所看到的,我在JFrame自定义类中继承了ChessPresso GameBrowser类,以便在我编写的国际象棋开头(Ruy Lopez)中导航。 addMove方法包装所有Chesspresso调用,以便在一行中添加移动和注释。
如果您启动ChesspressoGraphicalTest类,您将看到一个Frame,其中显示了用于表示该块的字母(这是默认的Chesspresso GameBrowser实现和行为):您可以阅读移动,转到下一步,返回到旧的举动...感谢板底部的按钮。
那么,问题是什么?这非常简单:非法行动时(
addPawnMove(Chess.E2, Chess.F8, false, "Debut pour une partie ouverte");
例如代替第一步),根本没有检测到这一个。我没有得到任何IllegalMoveException。
此外,如果我删除测试Move.isValid(move)(在addMove()方法中),则不会改变:所有移动的合法状态都是。
是象牙咖啡问题,还是简单的使用它?
任何帮助表示赞赏。感谢。
答案 0 :(得分:2)
Move.isValidMove(move)检查移动本身是否已创建为有效移动或无效移动。在游戏的某个时间内,它不会检查移动本身是否有效。
您需要做的是使用游戏的位置来获取有效移动的列表(不要自己创建移动)。您还可以使用chessGame.getPosition()。getPieceMove(...),它将返回有效或无效的移动。