将1添加到数组下标的位置

时间:2015-01-13 15:59:06

标签: c++ arrays add maze subscript

你好堆栈溢出的人,所以我有一个问题。我正在用C ++编写一个Maze Traversal用于学校项目,而且我遇到了障碍。我有一个算法来检查我可以在迷宫中移动的不同位置。我的问题是,即使(我做了调试)有效的移动返回true,迷宫实际上也不会改变位置。为什么不? (对不起,如果这是一个非常愚蠢的问题,但我会感激任何帮助!)谢谢!!!

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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];