我最近开始为一个大学项目开发一个用 C++ 编写的国际象棋引擎,但我的棋子移动功能遇到了问题。我知道棋子应该向前移动一格或沿对角线攻击一格。好吧,我的功能允许棋子攻击空白区域,我不知道为什么。我的棋盘分为两部分:一 block 记住棋子属于哪个玩家,另一 block 具有棋子的名称(如 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
位置的检查!
关于c++ - 棋子移动错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35180300/