2014-03-25 77 views
0

我試圖通過使用右手規則來解決迷宮,但我的回溯工作不正常。不知何故,邏輯錯誤,如果yPost增加,它不遵循右手規則。有人會告訴我我的功能有什麼問題嗎?謝謝。這是我的迷宮:使用右手規則解決迷宮

public char[,] navigateMouse() 
{ 
    // check south 
    if (mouseMaze[yPos + 1, xPos] == ' ') 
    { 
      // keep track of the trail 
      // by marking it with '.' 
      mouseMaze[yPos, xPos] = '.'; 
      mouseMaze[yPos + 1, xPos] = 'M'; 
      yPos++; 
    } 
    // check east 
    else if (mouseMaze[yPos, xPos + 1] == ' ') 
    { 
      mouseMaze[yPos, xPos] = '.'; 
      mouseMaze[yPos, xPos + 1] = 'M'; 
      xPos++; 
    } 
    else if (mouseMaze[yPos - 1, xPos] == ' ') 
    { 
      mouseMaze[yPos, xPos] = '.'; 
      mouseMaze[yPos - 1, xPos] = 'M'; 
      yPos--; 
    } 
    else if (mouseMaze[yPos, xPos - 1] == ' ') 
    { 
      mouseMaze[yPos, xPos] = '.'; 
      mouseMaze[yPos, xPos - 1] = 'M'; 
      xPos--; 
    } 
    // backtrack 
    else 
    { 
      if (mouseMaze[yPos + 1, xPos] == '.') 
      { 
       mouseMaze[yPos + 1, xPos] = 'M'; 
       yPos++; 
      } 
      else if (mouseMaze[yPos, xPos + 1] == '.') 
      { 
       mouseMaze[yPos, xPos + 1] = 'M'; 
       xPos++; 
      } 
      else if (mouseMaze[yPos - 1, xPos] == '.') 
      { 
       mouseMaze[yPos - 1, xPos] = 'M'; 
       yPos--; 
      } 
      else if (mouseMaze[yPos, xPos - 1] == '.') 
      { 
       mouseMaze[yPos, xPos - 1] = 'M'; 
       xPos--; 
      } 
    } 

    if (mouseMaze[mazeHeight/2, mazeWidth - 1] == 'M') 
      gameWon = true; 

    return mouseMaze; 
} 
+0

你可以,僅供參考,發佈樣本迷宮內容? ''。'是爲了小路,爲空區域提供空間。那裏還有什麼? – Shaamaan

+0

@Shaamaan:迷宮裏充滿了字符'X'和空白,其中'X'表示牆/障礙物,而空白字符意味着你可以自由穿越。 '。'用於跟蹤我已經走過的路徑。例如,從A移動到B,我將用'。'標記A。 B現在將被標記爲'M'。 –

+0

我認爲你需要用''標出你所在的位置。在你回溯之前,所以你不會陷入循環 –

回答

0

你應該把鼠標放在線上[ypos,xpos] ='。'在導航功能開始時,標記您當前的位置。當你回溯時,你沒有標記你在哪裏,你只是繼續去那個位置