2012-04-30 4 views
2

게임이 끝났는 지, 그려지는지, 아니면 계속 재생 가능한지에 대해 알고 싶습니다. 그러나 나는 동적 인 코드로 그것을하고 싶다. 예를 들어tictactoe 게임에서 check_game_state 메소드를 어떻게합니까?

나는 정적 3 * 3를 사용하여 ticTacToe 게임과 같은 위해 무엇을 : 나는 동적으로 4 * 4 * 5 5 이상 보드 그것을 원하는

private static boolean check_game_state(char[] board) 
{ 
    if ( (board[0]==cSymbol && board[1]==cSymbol && board[2]==cSymbol) 
     || (board[3]==cSymbol && board[4]==cSymbol && board[5]==cSymbol) 
     || (board[6]==cSymbol && board[7]==cSymbol && board[8]==cSymbol) 
     || (board[0]==cSymbol && board[3]==cSymbol && board[6]==(cSymbol)) 
     || (board[1]==(cSymbol) && board[4]==(cSymbol) && board[7]==(cSymbol)) 
     || (board[2]==(cSymbol) && board[5]==(cSymbol) && board[8]==(cSymbol)) 
     || (board[0]==(cSymbol) && board[4]==(cSymbol) && board[8]==(cSymbol)) 
     || (board[2]==(cSymbol) && board[4]==(cSymbol) && board[6]==(cSymbol))) 
    { 
     if (cSymbol == 'X') 
     { 
      state = 5; //player 1 win 
     } 
     else if (cSymbol == 'O') 
     { 
      state = 4; player 2 win 
     } 
    } 
} 

. 그러나 나는 그것을 어떻게 할 수 있는가? 가능한가?

+2

이 숙제입니까? – Jivings

+0

안드로이드에서 중간 프로젝트의 작은 조각 :) 나는 minimax alg –

답변

1

인덱스를 하드 코딩하는 대신 루프의 요소에 액세스해야합니다. 예 : 대신

boolean test = (board[0]==cSymbol && board[1]==cSymbol && board[2]==cSymbol); 

의 당신은 length 보드의 크기

boolean test = true; 
for (int i = 0; i < length; ++i) { 
    test = test && board[i] == cSymbol ; 
} 

같은 것을 할 것 (예 : 5, 6)의 제곱근과 동일한 board.length 당신은이를 계산하거나 필요 배열 길이 또는 배열 자체와 함께 함수에 전달

이 경우 cSymbol, false과 같을 경우에만 test을 true로 설정합니다.

업데이트 : 행에 대한 계산을 제공합니다. 당신은 이를 채택해야합니다 (힌트 : 계산 인덱스 i+j*length), 주요 dialonal (지수 : i*length+i)와 하위 대각선 (지수 : i*length+(length-1-i)을). 인덱스 i*length + ji 번째 행, j 번째 열로 변환 :

private static boolean check_game_state(char[] board, int length) 
{ 
    bool row = false; 
    for (int i = 0; i < length; ++i) { 
    bool innerRow = true; 
    for (int j = 0; j < length; ++j) { // calculate the ith row 
     innerRow = innerRow && board[i*length+j] == cSymbol; 
    } 
    row = row || innerRow; 
    } 
    if (row) 
    { 
    // somebody won... 
    } 
} 
+0

와 함께 3 * 3 정적이지만 5 * 5 - 6 * 6 - 7 * 7 ...에 대한 동적입니다. –

+0

업데이트 된 답변보기 – Attila

+0

작품입니다 모든 코드? 나는 내 질문에 똑같은 것을 원한다는 것을 의미하지만 정적으로 쓰고있다. 나는 dnyamic하고 싶다. check_game_state() 메소드를 동적으로 편집하십시오. 답변을 주셔서 감사합니다 –

1

당신이 다음하지 하드 코드 수표 조건을 수 있습니다. 당신은 3 별도의 경우이 있어야합니다 :

  1. 대각선
  2. 를 확인하려면 열
  3. 를 확인하려면 행을 확인하려면를

당신은 실행 모든 경우에 간단한 루프를 사용할 수 있습니다 0에서 N (게임 크기) 나는 현재 채워지고있는 현재 셀의 트랙을 유지한다고 말할 것이다. 그게 x,y이라고 말해봐. 이제이 좌표를 사용하여 특정 rowcolumn을 확인하십시오. 그리고 x == y 그 다음 앞으로 대각선에 있다면 그것을 확인하십시오. 마찬가지로 역 대각선을 확인하십시오.

0

하드 코딩하지 않으려면 승패 위치 검색 알고리즘을 구현해야합니다. 예를 들어 http://www.codeproject.com/Articles/43622/Solve-Tic-Tac-Toe-with-the-MiniMax-algorithm을 살펴보십시오.

+0

{0, 1, 2}, {3,4,5}, {6, 7,8}, {0, 3,6}, {1,4,7} {2, 5, 8}, {0, 4,8}, {2,4,6} 너무 정적입니다 }; –

+1

아래 투표를 이해하지 못합니다. 정적 데이터와 정적 논리에는 차이가 있습니다. 한가지는 정적으로 뭔가 정의하는 것입니다 - 예를 들어 보드. 하지만 다른 것은 IF 문을 하드 코딩한다는 것입니다. 이는 잘못된 코드입니다. 그러나 정적 INITIAL 데이터는 OK입니다. –

관련 문제