2015-10-22 2 views
0

Я разрабатываю 4 игры Connect с 7x7 полеем, горизонтальными и вертикальными проверками, но я не получаем диагональные проверки работыДиагональных проверки выигрыша в Connect 4

я могу выиграть, пока один из маркеров не в последнем колонка.

Это все проверки:

private static int getWinningInDiagonals() { 

    // Top-Left -> Bottom-Right 
    for (int column = 0; column < 7; column++) { 
     int count = 0; 
     for (int row = 0; row < 7; row++) { 
      if (field[row][column] != 0 && field[row+1][column + row - 1] == field[row][column]) 
       count++; 
      else 
       count = 1; 
      if (count >= 4) { 
       return field[row][column]; 
      }     
     } 
    } 
    // Top-Right -> Bottom-Left 
    for (int column = 0; column < 7; column++) { 
     int count = 0; 
     for (int row = 0; row < 7; row++) { 
      if (field[row][column] != 0 && field[row+1][column - row + 1] == field[row][column]) 
       count++; 
      else 
       count = 1; 
      if (count >= 4) { 
       return field[row][column]; 
      } 
     } 
    }   
    return 0; 
} 
+0

Каковы размеры для 'поля'? Потому что теперь похоже, что вы сразу получите 'ArrayIndexOutOfBoundsException', так как вы будете обращаться к' field [row + 1] [column + row - 1] 'for' row = 0; column = 0; '=>' field [1] [- 1] '. – jabbink

+0

7x7 (private static int [] [] field = new int [7] [7];) Я не уверен, как это сделать – Xilver266

ответ

0

Для одного вы хотите, чтобы двигаться вниз и вправо в то же время каждый раз, вы только должны пойти в 3, 3, диагональ не может произойти дальше, чем что без него оставляют границы массива.

Это должно работать в соответствии с вашими правами сверху вниз, если я прав, полагая, что ваш верхний левый - ваш 0,0. Выполнение верхнего правого нижнего левого угла - это вопрос об изменении контуров столбцов и строк и изменении порядка выполнения смещения.

// Top-Left -> Bottom-Right 
for (int column = 0; column < 4; column++) { 
    for (int row = 0; row < 4; row++) { 
     player = 0; 
     if (field[row][column] != 0){ 
      player=field[row][column]; 
      offset = 1; 
     } 
     while (player != 0){ 
      if (field[row + offset][column + offset] == player){ 
       offset += 1; 
      }else{ 
       player = 0; 
      } 
     }     
     if(offset >= 4){ 
      return field[row][column]; 
     } 
    } 
} 
+0

Всегда работайте и не действуйте в поле [6] [x] – Xilver266

+0

Если его нет работающий в поле [6] [x], он не всегда работает. –

+0

Я положил 'offset> = 4' в начале 'while' и теперь работает – Xilver266

Смежные вопросы