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