2015-01-13 54 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;