我目前使用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)是否也为空。

07-26 02:23