2014-12-24 2 views
-1

다차원 배열을 더 잘 이해하기 위해 모든 요소에 대해 -1로 초기화되는 3x3 배열을 의미하는 tic-tac-toe 프로그램을 작성합니다.C : 매트릭스 요소에 대한 부울 테스트

행/열/대각선의 모든 요소가 같고 (비어 있지 않으므로 -1과 다른 경우) "win"조건이 true가되도록하려고합니다.

하지만 저는 계속해서 승리해야합니다 ...하지 말아야 할 때, 게임은 끝나야 할 때까지 계속됩니다. 어떻게 해결할 수 있습니까? 운영자가 C로는 이행하지 않는

#define GRID_SIZE 3 
#define EMPTY -1 
#define PLAYER0 0 
#define PLAYER1 1 

printf("Player %d turn: Insert the tile coordinates\n", player); 
scanf("%d %d", &x, &y); 

/* Update tile */ 

if (player == PLAYER0) 
    grid[x][y] = PLAYER0; 
else 
    grid[x][y] = PLAYER1; 

/* Winning diagonals? */ 

i = 0; 
d1 = ((grid[i][i] == grid[i+1][i+1] == grid[i+2][i+2]) && (grid[i][i] != EMPTY)); 
d2 = ((grid[i][GRID_SIZE-i-1] == grid[i+1][GRID_SIZE-i] == grid[i+2][GRID_SIZE-i+1])  && (grid[i][GRID_SIZE-i-1] != EMPTY)); 

if ((d1) || (d2)) { 
     printf("Player %d wins!\n", player); 
     victory_or_draw = 1; 
} 

/* Winning rows or column? */ 

for (j = 0; j < GRID_SIZE; ++j) { 
    row = ((grid[i][j] == grid[i+1][j] == grid[i+2][j]) && (grid[i][j] != EMPTY)); 
    column = ((grid[j][i] == grid[j][i+1] == grid[j][i+2]) && (grid[j][i] != EMPTY)); 
    if ((row) || (column)) { 
     printf("Player %d wins!\n", player); 
     victory_or_draw = 1; 
    } 
} 

답변

1

비교, 당신은 부울을 사용해야합니다 "및"연산자 && 다른 테스트를 결합 :

이것은 (의 일부) 내 코드입니다.

또한 여기에 코드를 게시 할 때 최소한의 예제로 작성하십시오. 문제는 행렬의 요소에 대해 수행된다는 사실과 아무런 관련이 없습니다.

+0

감사합니다. 처음에는 의심의 여지가 있었지만 항의하지 않는 컴파일러에 속았습니다 ... 어쨌든 체크 했어야했습니다. – Marzian

1

당신이

(grid[i][i] == grid[i+1][i+1] && grid[i][i] == grid[i+2][i+2]) 
등이

(grid[i][i] == grid[i+1][i+1] == grid[i+2][i+2]) 

사용처럼 비교할 수 없습니다 또한 for 루프

d1 = ((grid[i][i] == grid[i+1][i+1] && grid[i][i] == grid[i+2][i+2]) && (grid[i][i] != EMPTY)); 
d2 = ((grid[i][GRID_SIZE-i-1] == grid[i+1][GRID_SIZE-i] && grid[i][GRID_SIZE-i-1] == grid[i+2][GRID_SIZE-i+1]) && (grid[i][GRID_SIZE-i-1] != EMPTY)); 

변경 같은 일에 D1과 D2를 변경

.