我目前使用Eclipse IDE在Java中开发国际象棋游戏,
除了Pawn之外,我的所有棋子都向下移动,这是最难的,因为Pawn必须能够做出不同的移动
Pawn应该能够在开始时移动两次,然后只能移动一次
目前,我已将pawn设置为只能移动两次,但是我坚持让其余逻辑起作用
我一直在考虑if / else语句的想法
我可以帮忙编写它
这是到目前为止的Pawn的代码,我已包含注释供您使用
更新到问题,仅当黑色棋子无法正确移动时,我才能够以正确的方式设置白色,但黑色却不能,我不知道为什么它不起作用
//Pawn Movement
private boolean isValidPawnMove(int sourceRow, int sourceColumn, int targetRow, int targetColumn) {
boolean isValid = false;
if( isTargetLocationFree() ){
if( sourceColumn == targetColumn){
if( sourcePiece.getColor() == Piece.COLOR_WHITE ){
// White Pawn
if( sourceRow+1 == targetRow || sourceRow == 1 && targetRow == 3){//Pawns can move to at the start then only 1 after that
isValid = true;
}else{
isValid = false;
}
}
else{
// Black Pawn
if( sourceRow-1 == targetRow || sourceRow == -1 && targetRow == -3){
isValid = true;
}else{
isValid = false;
}
}
}else{
//If you try to move left or right into a different Column
isValid = false;
}
//Take square occupied by an opponent’s piece, which is diagonally in front
}else if( isTargetLocationCaptureable() ){
if( sourceColumn+1 == targetColumn || sourceColumn-1 == targetColumn){
//One column to the right or left
if( sourcePiece.getColor() == Piece.COLOR_WHITE ){
//White Piece
if( sourceRow+1 == targetRow ){
//Move one up
isValid = true;
}else{
//Not moving one up
isValid = false;
}
}else{
//Black Piece
if( sourceRow-1 == targetRow ){
//Move one down
isValid = true;
}else{
//Not moving one down
isValid = false;
}
}
}else{
//Not one column to the left or right
isValid = false;
}
}
return isValid;
}
感谢您的任何帮助,您可以提供
最佳答案
我认为最简单的解决方案是显式检查源行和目标行,因为白色棋子只能从第二行向前移动两个,因此您的逻辑变成(对于白色):
if( sourceRow+1 == targetRow || sourceRow == 2 && targetRow == 4) {
显然,您还需要检查(sourceColumn,3)是否也为空。