Java 需要帮助防止棋子在第一次移动后移动两个方块吗

Java 需要帮助防止棋子在第一次移动后移动两个方块吗,java,chess,Java,Chess,我正在开发一款棋类游戏,能够让我的棋子向前移动一个和两个方块,但我很难阻止它在第一次移动后向前移动两个方块。如果有人能帮我提供一个逻辑或如何实现它的想法,我将不胜感激 这是我的密码: private boolean isValidPawnMove(int sourceRow, int sourceColumn, int targetRow, int targetColumn) { boolean isValid = false; if(isTargetLo

我正在开发一款棋类游戏,能够让我的棋子向前移动一个和两个方块,但我很难阻止它在第一次移动后向前移动两个方块。如果有人能帮我提供一个逻辑或如何实现它的想法,我将不胜感激

这是我的密码:

 private boolean isValidPawnMove(int sourceRow, int sourceColumn, int targetRow, int        
 targetColumn) {

    boolean isValid = false;

    if(isTargetLocationFree()){ 
        if(sourceColumn == targetColumn){
            //same column
            if(sourcePiece.getColor() == Piece.YELLOW_COLOR){
                //yellow
                if(sourceRow + 1 == targetRow ){
                    //move one up
                    isValid = true;

                }else if(sourceRow + 2 == targetRow ){
                    isValid = true;
                }else{
                    //not moving one up
                    isValid = false;
                }                               
            }else{
                //brown
                if(sourceRow - 1 == targetRow){
                    //move one down
                    isValid = true;
                }else if(sourceRow - 2 == targetRow){
                    isValid = true;

                }else{
                    //not moving one down
                    isValid = false;
                }                   
            }
        }else{
            //not the same column
            isValid = false;
        }
    }else if(isTargetLocationCaptureable()){
        if(sourceColumn + 1 == targetColumn || sourceColumn - 1 == targetColumn ){
            //one column to the right or left
            if(sourcePiece.getColor() == Piece.YELLOW_COLOR){
                //yellow
                if(sourceRow + 1 == targetRow){
                    //move one up
                    isValid = true;
                }else{
                    //not moving one up
                    isValid = false;
                }
            }else{
                //brown
                if(sourceRow - 1 == targetRow ){
                    //move one down
                    isValid = true;
                }else{
                    //not moving one down                       
                    isValid = false;
                }
            }
        }else{
            //One column to the left or right
            isValid = false;
        }   
    }       
    return isValid;
}

private boolean isTargetLocationCaptureable(){
    if(targetPiece == null){
        return false;
    }else if( targetPiece.getColor() != sourcePiece.getColor()){
        return true;
    }else{
        return false;
    }
}

private boolean isTargetLocationFree(){
    return targetPiece == null;
}

我不会为您编写代码,但您的条件应基于sourceRow。
如果您的源行是典当在第二行或第七行开始的原始行,则典当只能移动两行,具体取决于哪个玩家。

假设您的典当有一个类,那么您应该在类中创建一个名为firstmove或numMoves的字段。这将分别设置为true或0,在第一次移动后设置为false或numMoves++。然后,在您的有效性检查器中,您可以说

if p.firstMove
    //accept 1 or 2
else
    //accept only 1

我会用两种方法中的一种:

检查典当是否在它开始的那一行。如果是,允许两个空间移动,否则不允许。 给每个棋子一个布尔值,如果没有移动,则为false;如果移动,则为true,然后检查该值。我不建议这样做,因为看起来你们并没有把典当变成一个对象,所以很难实现
对于黄色部分,只需检查sourceRow是否为1或2,具体取决于您对行的编号方式:

    ...
}else if(sourceRow == 1 && targetRow == 3){
    // double-row first move
    isValid = true;
}else{
    ...

对棕色部分也做类似的处理。

谢谢您的回复。它对黄色部分有效,但它使棕色部分在第一个动作中只移动一个正方形对不起,如果我用问题轰炸你。如果一个棋子将两个方块移动到对手棋子所在的同一行,我希望实现顺势捕获located@user3816650那是另一个问题。你应该问一个新问题,描述你尝试过什么,你的确切问题是什么。