2014-02-23 66 views
0

我正在构建Connect 4游戏,我想知道是否可以将int数组构建到方法中。我只是显示代码会更容易,所以我已经展示了下面的方法(和依赖关系)。出带有注释的位是如何工作的时刻在方法中传递int数组作为参数[Java]

//Defend 4 horizontal to the right (xxx-) 
    for(int y=0;y<board.get_ysize();y++){ 
     boolean breakfor=false; 
     for(int x=0;x<(board.get_xsize()-3);x++){ 
      if(board.get_state(x,y)==1 
        && board.areSame(board, {(x+1),y}, {x,y}) 
        && board.areSame(board, {(x+2),y}, {x,y}) 
        && board.areSame(board, {(x+3),y}, {0}) 

// How the code works at the moment:       
//      board.get_state((x+1),y)==board.get_state(x,y) 
//      && board.get_state((x+2),y)==board.get_state(x,y) 
//      && board.get_state((x+3),y)==0) 
        { 
       if(y==0){ 
        return (x+3); 
       } 
       else if((y-1)==0){ 
        return (x+3); 
       } 
       else{ 
        breakfor=true; 
        break; 
       }  
      } 
     } 
     if(breakfor){ 
      break; 
     } 
    } 

get_state():

public int get_state(int x, int y) { 
     return layout[x][y]; 
    } 

(布局[X] [Y]返回0,1或2所述的位置0是空,1和2是球员柜)

areSame():

public boolean areSame(GameBoard board, int[] initialspace, int[] comparespace){ 
    if(board.get_state(initialspace[0],initialspace[1])==board.get_state(comparespace[0], comparespace[1])){ 
     return true; 
    } 
    return false; 
} 

的代码工作的老路上这是没有必要的,但我是只是想知道是否有办法让这个数组方法有效?

感谢

+0

你在寻找模式来传入一个方法来检查? – ErstwhileIII

+0

我想比较空间和相邻空间中的计数器类型(或缺少计数器),以通过放置第四个计数器来检查玩家是否要赢。这是针对游戏AI的,因此它总是会检查布局阵列位置是否有1,因为1表示玩家计数器。 我希望这是有道理的? – admrply

回答

1

您可能希望通过使用像检查(如下图所示水平,使垂直威胁模拟)

boolean threat; 
int playX = -1; 
int playY; 

for (int y=0; y < board.get_ysize; y++) { 
    for (int x=0, x < board.get_xsize; x++) { 
     int count1; 
     int count2; 
     for (int i=0; i < 4; i++) { 
      switch (board.get_state(x+i, y)) { 
      case 0: 
       if (playX == -1) {playX = x+i; playY = y;} 
       break; 
      case 1: 
       count1++; 
       break; 
      case 2: 
       count2++; 
       break; 
      default: 
       // handle error 
       break; 
      } 
     } 
     if (count1 == 3 && count2 == 0) { 
      // should be able to defend 
      // play player 2 at playX, playY 
     break; // could go on to see if imminent loss anyway 
    } 
} 
检查对垂直和水平的威胁防御,以赢得下一步棋
+0

这实际上是一种非常干净的赢球检查方式!非常感谢! :) – admrply