поиск пути, если расстояние больше 2 - PullRequest
1 голос
/ 27 ноября 2011

Задача - создать игру реверси.У меня это работает, за исключением ходов, которые предполагают замену более чем одного чипа

       x o
       o o
     o o o
       @        <-- the @ is x's move that crashes the game.

, и в этом случае программа вылетает.Авария происходит где-то в isPlayable().

Где я иду не так?

//there are 7 more such methods for different directions 
// (down, left, right, diagonals).       
public void searchN(int x, int y, int increment){
 if(x-increment>=0){
  if(this.isPlayed(x-increment,y)){                         
    if(increment>1 && chips[x-increment][y]==turnColor){
          //turnColor is an int value 1 or 2 
          // (0 represents unplayed space in chips[][]) 
          // 1 corresponding to white, 2 corresponding to black.
      playable[0] = true;
      leads[0] = false;
    } else {
      if(chips[x-increment][y]!=turnColor){
        leads[0]=true;
      }
    }
  }else
    leads[0]=false;

}else
  leads[0]=false;
}

public boolean isPlayable(int x, int y){
  this.searchN(x,y,1);  //7 other directions are searched

  while(leads[0]||leads[1]||leads[2]||leads[3]||leads[4]
                ||leads[5]||leads[6]||leads[7]){
    int i = 2;
    if(leads[0])  // 7 other directions are searched given that their marker is true.
      this.searchN(x,y,i);      
  }
  if(playable[0]||playable[1]||playable[2]||playable[3]||playable[4]
                ||playable[5]||playable[6]||playable[7])
    return true;
  else
    return false;
}

1 Ответ

3 голосов
/ 27 ноября 2011

На ваш комментарий звучит так, будто вы испытываете зависание, а не сбой.Когда программа зависает, вы должны искать места, где она может бесконечно "застрять".Главный подозреваемый в isPlayable - ваш while цикл.Пока любое из восьми логических значений истинно, оно никогда не завершится.

Я бы добавил запись в журнал, чтобы вы могли видеть, что происходит:

while(leads[0]||leads[1]||leads[2]||leads[3]||leads[4]
            ||leads[5]||leads[6]||leads[7]){
    System.out.println("leads[0]: " + leads[0]);
    System.out.println("leads[1]: " + leads[1]);
    // etc.

    int i = 2;
    if(leads[0])  // 7 other directions are searched given that their marker is true.
        this.searchN(x,y,i);    
}

Как только вы убедились, что этопроблема, начните искать методы поиска, чтобы выяснить, почему это происходит.

...