2014-03-25 48 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] ='。'在导航功能开始时,标记您当前的位置。当你回溯时,你没有标记你在哪里,你只是继续去那个位置