Olá!
Estava tentando fazer um jogo da velha, mas estou com um problema para determinar o vencedor: o código lê as entradas mas sempre retorna empate. Tentei fazer com base em outro código que vi e não consigo identificar o que fiz de errado. Alguém pode me esclarecer isso? Obrigado!
#include <stdio.h>
#include <stdlib.h>
char mat[3][3];
int fim = 0;
int mov = 0;
char ent;
void inicializa_matriz()
{
int i, j;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
mat[i][j]= ' ';
}
void mostrar_tabuleiro()
{
int i, x;
x = 0;
system("clear");
printf(" 0 1 2 ");
while(x < 3)
{
i = 0;
printf("\n%d", x);
while(i < 3)
{
if(i == 1)
printf("| %c |", mat[x][i]);
else
printf(" %c ", mat[x][i]);
i++;
}
printf("\n");
if(x < 2)
printf(" ____________");
x++;
}
}
void ler_jogada1()
{
int x, y;
printf("Jogador 1 (X) - Insira linha e coluna: ");
scanf("%d %d", &x, &y);
if (mat[x][y] != ' ')
{
printf("\nJogada invalida.\n\n");
ler_jogada1();
}
else
{
mat[x][y] = 'X';
}
}
void ler_jogada2()
{
int x, y;
printf("Jogador 2 (O) - Insira linha e coluna: ");
scanf("%d %d", &x, &y);
if (mat[x][y] != ' ')
{
printf("\nJogada invalida.\n\n");
ler_jogada2();
}
else
{
mat[x][y] = 'O';
}
}
char verifica_vit()
{
int i;
for (i = 0; i < 3; i++)
{
// verifica linhas
if (mat[i][0] == mat[i][1] && mat[i][0] == mat[i][2])
return mat[i][0];
// verifica colunas
if (mat[0][i] == mat[1][i] && mat[0][i] == mat[2][i])
return mat[0][i];
}
// verifica diagonal principal
if (mat[0][0] == mat[1][1] && mat[1][1] == mat[2][2])
return mat[0][0];
// verifica diagonal secundaria
if (mat[0][2] == mat[1][1] && mat[1][1] == mat[2][0])
return mat[0][2];
// retorna ' ' se nenhum dos comandos funcionar
return ' ';
}
int main()
{
int i, j;
char resultado = ' ';
printf("## JOGO DA VELHA ##\n");
printf("Jogador 1 - X\nJogador 2 - O\n");
inicializa_matriz();
mostrar_tabuleiro();
while(fim == 0)
{
mostrar_tabuleiro();
ler_jogada1();
mov++;
if(mov == 9)
break;
resultado = verifica_vit();
if(resultado != ' ')
break;
mostrar_tabuleiro();
ler_jogada2();
mov++;
if(mov == 9)
break;
resultado = verifica_vit();
if(resultado != ' ')
break;
}
char resultado1 = verifica_vit;
mostrar_tabuleiro();
if (resultado1 == 'X')
{
printf("Jogador 1 (X) ganhou!\n\n");
}
else if (resultado1 == 'O')
{
printf("Jogador 2 (O) ganhou!\n\n");
}
else
{
printf("Empate.\n\n");
}
return 0;
}