我最近开始为大学项目使用C++开发国际象棋引擎,但我的典当运动功能出现问题。我知道棋子应该向前移动一个方块或对角线攻击一个方块。好吧,我的功能允许pawn攻击空白,我不知道为什么。我的棋盘分为2个部分:一个记住一个棋子属于哪个玩家,另一个记住那个棋子的名称(例如q,Q,p,P ...和空白)。提示将是不受欢迎的。 (对不起,我英语水平很差)

代码如下:

bool move_P(int move_start_i, int move_start_j, int move_finish_i, int move_finish_j, char table[][9])
{
    switch (table[move_finish_i][move_finish_j])
    {
        case ' ':
        {
            if (move_start_i - 1 == move_finish_i) // move pawn
            {
                return true;
            }
        }
        default:
        {
            if (move_finish_i == move_start_i - 1 && move_finish_j == move_start_j - 1) // atack pawn ^<-
            {
                if (player[move_finish_i][move_finish_j] == player[move_start_i - 1][move_start_j - 1])
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            else if (move_finish_i == move_start_i - 1 && move_finish_j == move_start_j + 1) // atack pawn ->^
            {
                if (player[move_finish_i][move_finish_j] == player[move_start_i - 1][move_start_j + 1])
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
        }
    }
    return false;
}

最佳答案

您的播放器检查错误,

player[move_finish_i][move_finish_j] == player[move_start_i - 1][move_start_j - 1]

必须
player[move_finish_i][move_finish_j] == player[move_start_i][move_start_j]

你也应该用
return player[move_finish_i][move_finish_j] != player[move_start_i][move_start_j];

主要问题是检查
move_start_i - 1 == move_finish_i

您必须添加对j位置的检查!

10-08 08:19