【发布时间】:2016-02-03 14:54:03
【问题描述】:
我最近开始为一个大学项目使用 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;
}
【问题讨论】:
-
move_start_i - 1 == move_finish_i-1或+1不取决于颜色吗? -
哦忘了说我有一个功能可以反转(倒置)桌子,所以动作总是向上
-
你也可以考虑添加
en passant Capture,如果他在他的起始行列,可以移动两个方格。 -
感谢@AntiHeadshot,但目前我正在努力使其简单且有效。将来我会考虑添加更复杂的规则,也许还有一个界面。
标签: c++