-3

有一个带有不同颜色球的 9x9 单元板(二维阵列)。玩家可以将球从一个单元格移动到另一个单元格。球可以在当前单元格和目标单元格之间的单元格上以没有球的路径移动。

我只认为我必须使用重复来实现此路径检查。但我不知道如何实现这个功能。

我曾尝试实现该功能。但我知道它会导致无限循环。

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;
}
4

1 回答 1

1

你的代码有很多问题,很难看到如何在不完全重写的情况下修复它。这里有几个指针:

  1. 当你递归调用函数时,你需要对返回值做一些事情。此刻你正在把它扔掉。

  2. 您的代码具有未定义的行为,因为它并不总是返回值。考虑 的情况y1 - 1 >= 0。您将调用moveCheck(),丢弃返回值(假设它甚至完全返回),然后退出条件块,此时函数结束,不返回任何内容。

  3. 您有一个似乎不检查任何成员变量的成员函数。你在哪里检查路径中是否有障碍物?

  4. 不完全清楚x1, y1,x2y2是什么。要么给他们自我记录的名字,要么提供记录注释。我猜它们是源坐标和目的地坐标,但不清楚你为什么要相互比较它们,如果它是你感兴趣的路径中存在的球。

于 2013-04-20T16:02:20.113 回答