2014-02-23 67 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