国际象棋验证希望移动输入

所以,我完成我的使命,用c ++完成一盘棋。 但是,我想请点击一些我想获得一些意见的小问题。

情况:

我的PAWN,KING,KNIGHT移动验证工作完美。 但; 当移动一块(如白色ROOK)时,它遵循大部分规则。 例如,它只能移动垂直或水平,它不会通过另一个白色的部分,它不会取代一个白色的部分,最后它会取代黑色(相反)的部分。

问题在于,当它移过另一个黑色的部分时,它可以通过以取代通过它的部分。 所以可以说我们在x = 2,y = 6处有一块白色的棋子,在x = 2,y = 4处有黑色棋子,而在x = 2,y = 3处有另一个黑色棋子。 白色棋子将被允许移动到x = 2,y = 3,这不应该被允许。 很想得到一些关于如何解决这个问题的建议。 下面的当前代码。

bool Rook:: canMove(int startx, int starty, int endx, int endy)
{
    int i;
    if(board[endx][endy] !=NULL && board[endx][endy]->color==color)
        return false;
    if (startx == ends) //Collision Detection...
    {
        // Horizontal move
        if (starty < endy)
        {
            // Move down
            for (i = starty + 1; i <= endy; ++i)
                if (board[startx][i] != NULL && board[startx][i]->color==color)
                    return false;

        }
        else
        {
            // Move up
            for (i = starty - 1; i >= endy; --i)
                if (board[startx][i] != NULL && board[startx][i]->color==color) //cant allow passing of non color piece
                    return false;
        }
    }
    else if (starty == endy)
    {
        // Vertical move
        if (startx < endx)
        {
            // Move right
            for (i = startx + 1; i <= endx; ++i)
                if (board[i][starty] != NULL && board[i][starty]->color==color)
                    return false;
        }
        else
        {
            // Move left
            for (i = startx - 1; i >= endx; --i)
                if (board[i][starty] != NULL && board[i][starty]->color==color)
                    return false;
        }
    }
    else
    {
        // Not a valid rook move (neither horizontal nor vertical)
        return false;
    }

    return true;
}

你的函数指的是类中的很多成员变量,例如结束语,颜色,棋盘,这些都不好,并且使得该函数很难在单元级别测试,那么你可以单独测试该函数吗? 不,你不能。

但是如果函数允许移动到(2,3)以及(2,4),那么它看起来像你的循环没有中断(当它们发现了一个有效的移动或许?),那么它循环过去(2,4)至(2,3)

另外,仅仅使用一个数组和索引索引板并不是很好。 我会期待一个更高级的板级,也许是一个坐标类,所以你可以轻松地迭代和索引板。

链接地址: http://www.djcxy.com/p/84671.html

上一篇: Chess Validation Move input wanted

下一篇: Chess final: king and rook vs king in python