国际象棋验证移动输入想要
Chess Validation Move input wanted
所以,我在完成C 的国际象棋游戏的任务中已经走了很远。但是,我想在一个小问题上遇到了一些小问题,我想获得一些输入。
情况:
我的棋子,国王,骑士举动验证效果非常完美。但;当移动一块(例如白色的菜单)时,它会遵循大多数规则。例如,它只会移动垂直或水平,它不会通过另一件白色,它将不会替换白色碎片,最后它将代替黑色(相反)的碎片。
问题是在将其移动到另一件黑色的一块时,它可以通过以替换过去的一块。因此,可以说,我们在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)
另外,仅使用阵列和ints索引板并不是很好。我本来可以期待高级董事会课程,也许是坐标类,因此您可以轻松迭代并为董事会索引。
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- 将对象移动到std::shared_ptr
- 碱基对映射 - 将 argv[i] 移动到整数或字符作为输入
- Win32 发送输入鼠标移动滞后并冻结
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- C++ 如何处理所有可能的玩家移动输入?
- 如何将用户输入数组值移动到数组末尾并将其设置为 0
- 防止触摸输入移动的鼠标光标在窗口上
- std ::移动返回和输入参考参数
- 国际象棋验证移动输入想要
- 如何根据输入向右或向左移动*?[C++]
- 鼠标输入:MOUSEEVENTF_MOVE移动不根据dx,dy
- 仅移动输入和输出迭代器
- 输入法在webkit中的合成窗口的位置未随输入焦点移动
- C++帮助!Int被卡住,不会根据用户输入向上或向下移动