prontos ... se tens esses requisitos todos:
int checkHorizontal(char * m) {
// para todas as linhas
for (int line = 1; line < 3; ++line) {
// verificar linha "line"
if ( pTabuleiro[line * 11 + UM] == pTabuleiro[line * 11 + DOIS]
&& pTabuleiro[line * 11 + UM] == pTabuleiro[line * 11 + TRES]
&& pTabuleiro[line * 11 + UM] != '_')
// retornar o valor associado ao vencedor
return pTabuleiro[line * 11 + UM] == 'O' : -1 : 1;
}
return 0;
}
int checkVertical(char * m) {
// para todas as colunas
for (int column = UM; column <= TRES; ) {
// verificar coluna "column"
if ( pTabuleiro[0 * 11 + column] == pTabuleiro[1 * 11 + column]
&& pTabuleiro[0 * 11 + column] == pTabuleiro[2 * 11 + column]
&& pTabuleiro[0 * 11 + column] != '_')
// retornar o valor associado ao vencedor
return pTabuleiro[0 * 11 + column] == 'O' : -1 : 1;
// incremneto do ciclo de coluna
column = column == UM
? DOIS
: (column == DOIS
? TRES
: TRES + 1);
}
return 0;
}
int checkDiagonals(char * m) {
// verificar diagonal principal
if ( pTabuleiro[0 * 11 + UM] == pTabuleiro[1 * 11 + DOIS]
&& pTabuleiro[0 * 11 + UM] == pTabuleiro[2 * 11 + TRES]
&& pTabuleiro[0 * 11 + UM] != '_')
// retornar o valor associado ao vencedor
return pTabuleiro[0 * 11 + column] == 'O' : -1 : 1;
// verificar diagonal secundaria
if ( pTabuleiro[2 * 11 + UM] == pTabuleiro[1 * 11 + DOIS]
&& pTabuleiro[2 * 11 + UM] == pTabuleiro[0 * 11 + TRES]
&& pTabuleiro[2 * 11 + UM] != '_')
// retornar o valor associado ao vencedor
return pTabuleiro[0 * 11 + column] == 'O' : -1 : 1;
return 0;
}
int checkWin(char * m) {
// verificar vencedor
int check = checkHorizontal(m)
|| checkVertical(m)
|| checkDiagonals(m);
if (check)
return check;
// verificar se existem espaços vazios
for (int line; line < 3; ++line) {
for (int column; column <= TRES; ) {
// verificar se a célula iterada se encontra vazia
if (pTabuleiro[line * 11 + column] == '_')
return -2;
// incremneto do ciclo de coluna
column = column == UM
? DOIS
: (column == DOIS
? TRES
: TRES + 1);
}
}
// empate ...
return 0;
}
↧