有一个带有不同颜色球的9x9单元板(2d阵列)。玩家可以将球从一个小区移动到另一个小区。球可以在当前小区和目标小区之间的小区上以无球的路径移动。
我只想在执行此路径检查时必须使用重复。 但我不知道如何实现这个功能。
我曾试图实现这个功能。但我知道它会导致无限循环。
bool board::moveCheck(int x1, int y1, int x2, int y2)
{
if(x1==x2&&y1==y2)
return true;
else if(y1-1>=0)
board::moveCheck(x1,y1-1,x2,y2);
else if(y1+1<9)
board::moveCheck(x1,y1+1,x2,y2);
else if(x1-1>=0)
board::moveCheck(x1-1,y1+1,x2,y2);
else if(x1+1<9)
board::moveCheck(x1+1,y1+1,x2,y2);
else
return false;
}
答案 0 :(得分:1)
您的代码存在许多问题,很难看到如何在没有完全重写的情况下修复它。以下是一些指示:
递归调用函数时,需要执行某些操作 带有返回值。现在你把它扔掉了。
您的代码有undefined behaviour,因为它并不总是返回值。考虑y1 - 1 >= 0
的情况。你将调用moveCheck()
,抛弃返回值(假设它甚至都返回),然后退出条件块,此时函数结束,而不返回任何内容。
您有一个似乎不检查任何成员变量的成员函数。哪里 你在检查路径上是否有障碍物?
并不完全清楚x1
,y1
,x2
和y2
是什么。要么给他们自己记录姓名,要么提供记录评论。我猜测他们是源和目标坐标,但是不清楚为什么你要将它们相互比较,如果它是在球的存在您感兴趣的路径。