棋子移动错误
Pawn movement error
我最近开始为一个大学项目开发 c++ 国际象棋引擎,但我的棋子移动函数遇到了问题。我知道棋子应该向前移动一个方格或攻击一个对角线的方格。好吧,我的函数允许棋子攻击空格,我不知道为什么。我的棋盘分为两块:一块记住棋子属于哪个玩家,另一块有棋子的名称(如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
位置添加支票!
插入一个
break;
case ' ':
块末尾的语句。否则,如果table[move_finish_i][move_finish_j]==' '
,也会执行默认块,这就解释了为什么棋子可以对角移动到空白方块。
此外,不需要大小写和默认值后面的大括号。将 case 和默认语句视为跳转标签,代码从第一个匹配的大小写开始执行,直到您用 break 语句离开switch() {...}
块(无论进一步的"跳转标签"如何)。
相关文章:
- Windows C++:文件夹移动访问被拒绝错误
- 尝试通过多个函数移动数组,但遇到了我不知道如何修复的错误
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- std::任何只用于移动的模板,其中副本ctor内的static_assert等于编译错误,但为什么
- 编译器错误:只需要复制省略,但似乎需要移动构造函数(通过编译器)
- 为什么将双端移动到向量时出现 C26486 编译器错误?
- 我的移动分配操作程序重载的分段错误
- 错误:移动文件时'QString'为非标量类型"std::__cxx11::字符串"
- 错误:移动承诺时"Attempt to use a deleted function"
- C++所有 AT 命令的短信返回错误 |PC<->通过蓝牙和winsocket的移动连接
- "<某些系统标头>:错误:"<在此处插入函数>"在移动源文件后不是"std"的成员
- 移动和模板构造函数,错误的一个
- 将代码移动到函数中时,DLL "myApp.exe"中找不到序号错误0xC0000138
- 模型对话框移动到主窗口后面的Qt错误
- C++错误:在移动构造函数中使用已删除的函数
- 提升移动编译错误
- GTEST链接错误(从GCC 4.X移动到GCC 7.x)
- 为什么删除移动构造函数会导致编译错误
- 将函数从控制台应用程序移动到共享库项目似乎会带来不相关的编译错误
- 在数组中移动元素 SIGABRT 错误