2015-10-22 32 views
0

我开发一个连接4个游戏7x7的领域,水平和竖直裂缝,但我不明白的对角线检查工作对角线赢检查在连接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

'field'的尺寸是多少?因为现在看起来你会立即得到一个'ArrayIndexOutOfBoundsException',因为你将访问'field [row + 1] [column + row - 1]'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

我在'while'的开始处放置了'offset> = 4',现在起作用 – Xilver266