2015-01-13 22 views
0

您好堆栈溢出的人,所以我有一个问题。我正在为一个学校项目编写一个C++迷宫遍历器,而且我遇到了一堵墙。我有一个算法来检查我可以在迷宫中移动的不同位置。我的问题是即使(我调试过)有效的移动返回true,迷宫实际上并没有改变位置。为什么不? (对不起,如果这是一个非常愚蠢的问题,但我将不胜感激任何帮助!)谢谢!将1添加到数组下标的位置

//Said algorithm 

// 4. cycle through directions to move in until I find a possible move 
    if (validMove(maze, y + 1, x))  // UP 
     maze[y][x] = maze[y + 1][x]; 
    else if (validMove(maze, y, x + 1)) // RIGHT 
     maze[y][x] = maze[y][x + 1]; 
    else if (validMove(maze, y - 1, x)) // DOWN 
     maze[y][x] = maze[y - 1][x]; 
    else if (validMove(maze, y, x - 1)) // LEFT 
     maze[y][x] = maze[y][x - 1]; 

//validMove func 
bool validMove(char maze[MAZE_SIZE][MAZE_SIZE], int y, int x) 
{ 
    if (maze[y][x] == '.') { 
     return true; 
    } 

    return false; 
} 
+1

这个问题需要更多的上下文。显示更多关于'maze'创建和使用的位置,以及您在哪里(以及如何)检查它是否已更改。 – molbdnilo

+2

'迷宫实际上并没有改变位置'澄清你的意思是“改变位置”。我只看到一个任务正在完成。 – PaulMcKenzie

+1

你实际上从来没有改变'x'或'y'的值 - 你正在改变迷宫的内容,这可能不是你想要的。例如,如果“UP”是一个有效的移动,则用迷宫上方的单元格内容替换迷宫中的当前单元格(除了边界条件,希望您在别处检查,否则'x + 1'和其他这样的表达式可能访问你的迷宫之外...... – twalberg

回答

0

所以你可能要保持position变量,std::pair可能的话,这将是在迷宫中的遍历的坐标。

所以我期待你的if语句看起来更像这个:

if (validMove(maze, y + 1, x))  // UP 
    position.first++; 
else if (validMove(maze, y, x + 1)) // RIGHT 
    position.second++; 
else if (validMove(maze, y - 1, x)) // DOWN 
    position.first--; 
else if (validMove(maze, y, x - 1)) // LEFT 
    position.second--; 

你会看到这种影响什么的唯一方法是,如果在您的打印循环所添加的阵列输出:

cout << (y == position.first && x == position.second) ? 'x' : maze[y][x]; 
1

我打算假设'。'在迷宫中表示一个开放空间,任何其他字符表示一堵墙。我还假设x和y表示您当前的位置。

看起来你正在测试是否可以进入某个空间,如果可能的话,你将当前空间中的角色设置为与你想要进入的空间中的角色相等(我不认为你打算这样做)。由于这两个字符可能都是'。',这实际上并没有改变任何东西。

我猜测你实际上想通过改变当前位置的字符为特殊字符(表示你所用的路径),然后将你的x和y改为x和y的新值年。

maze[y][x] = '+'; 
if (validMove(maze, y + 1, x))  // UP 
    y += 1; 
else if (validMove(maze, y, x + 1)) // RIGHT 
    x += 1; 
else if (validMove(maze, y - 1, x)) // DOWN 
    y -= 1; 
else if (validMove(maze, y, x - 1)) // LEFT 
    x -= 1;