Funcionar melhor em que sentido?
você pode colocar as partes do código que se repetem em uma chamada de função:
#include <stdio.h>
int verificar_vitoria(char Matriz[3][3], char O)
{
if ((Matriz[0][0]==O && Matriz[0][1]==O && Matriz[0][2]==O) ||
(Matriz[1][0]==O && Matriz[1][1]==O && Matriz[1][2]==O) ||
(Matriz[2][0]==O && Matriz[2][1]==O && Matriz[2][2]==O) ||
(Matriz[0][0]==O && Matriz[1][0]==O && Matriz[2][0]==O) ||
(Matriz[0][1]==O && Matriz[1][1]==O && Matriz[2][1]==O) ||
(Matriz[0][2]==O && Matriz[1][2]==O && Matriz[2][2]==O) ||
(Matriz[0][0]==O && Matriz[1][1]==O && Matriz[2][2]==O) ||
(Matriz[0][2]==O && Matriz[1][1]==O && Matriz[2][0]==O))
{
return 1;
}
return 0;
}
int main (void) {
char Matriz[3][3]; //Declaração da matriz para o jogo
char O = 'O', X = 'X';
int jogadas = 0, j, i;
for (i = 0; i < 3; i++) //Inicialização da matriz do jogo
for (j = 0; j < 3; j++)
Matriz[i][ j] = ' ' ;
while (jogadas <= 9)
{
printf (" JOGO DA VELHA \n");
for (i = 0; i < 3; i++)
{
printf ("\t\t %c | %c | %c\n",Matriz [i] [0], Matriz [i] [1], Matriz
[i] [2]);
if (i < 3-1) {
printf ("\t\t ---+---+--- \n");
}
}
printf ("\nINSIRA AS COORDENADAS, ");
if (jogadas % 2)
printf ("JOGADOR 2\n");
else
printf ("JOGADOR 1\n");
printf ("LINHA :");
scanf ("%d",&i);
printf ("COLUNA: ");
scanf ("%d",&j); //Parâmetros para entrada de dados da coluna
if (Matriz [i-1] [j-1] == ' ')
{
if (jogadas%2)
Matriz [i-1] [j-1] = X;
else
Matriz [i-1] [j-1] = O;
jogadas++;
}
if (verificar_vitoria(Matriz, O))
{
printf("\n\a\t\tJogador 1, VOCÊ VENCEU!!!\n");
break;
}
if (verificar_vitoria(Matriz, X))
{
printf ("\n\n\n\n\a\t\tJogador 2, VOCÊ VENCEU!!!\n");
break;
}
if (jogadas==9)
{
// Condição para que a partida termine empatada
printf ("PARTIDA EMPATADA");
break;
}
}
return (0);
}
Não irá alterar a forma de funcionamento, mas deixa o código mais iteligível.