vituxo155
(usa Nenhuma)
Enviado em 20/06/2009 - 00:20h
cara esse seu código esta um pouco embolado vou dar um olhadinha nele..
mais como eu já havia feito um parecido (utilizando matriz) vou deixar aqui para vc dar uma olhada, de repente te da uma luz....
p.s: tem só um erro ao preencher a coluna da esquerda XD.. mais o resto aparente está funcionando certinho....
#include<stdio.h>
/* NAO ESTAVA FUNCIONANDO QUANDO SE PREENCHIA A COLUNA DA ESQUERDA NA VERTICAL */
char matriz[5][5];/* COMO NAO ESTAVA FUNCIONANDO EU COLOQUEI A MATRIZ COMO GLOBAL */
void limpar() /* FORMATA A MATRIZ COM OS CARACTERES | E _ */
{
int l,c,a;
l = 0;
c = 0;
a = 0;
printf("\n\n");
while ( l < 5 )
{
while ( c < 5 )
{
if (( c == 1 ) || ( c == 3 ))
{
if ( l == 0 )
{
matriz[l][c] = '|';
a++;
}
}
if (( c == 1 ) || ( c == 3 ))
{
if ( l == 2 )
{
matriz[l][c] = '|';
a++;
}
}
if (( c == 1 ) || ( c == 3 ))
{
if ( l == 4 )
{
matriz[l][c] = '|';
a++;
}
}
if ( l == 1 )
{
if (( c == 0 ) || ( c == 2 ) || ( c == 4 ))
{
matriz[l][c] = '_';
a++;
}
}
if ( l == 3 )
{
if (( c == 0 ) || ( c == 2 ) || ( c == 4 ))
{
matriz[l][c] = '_';
a++;
}
}
if ( a == 0 )
{
matriz[l][c] = ' ';
}
c++;
a = 0;
}
c = 0;
l++;
printf("\n");
}
}
void imprimir() /* IMPRIME A MATRIZ */
{
int l,c;
l = 0;
c = 0;
printf("\n\n");
while ( l < 5 )
{
while ( c < 5 )
{
printf("%c ",matriz[l][c]);
c++;
}
c = 0;
l++;
printf("\n");
}
}
void preencher( int a, int i, int x )
{
int l,c;
l = (i - 1) * 2; /* CORRIGI A POSICAO */
c = (x - 1) * 2;
if ( a == 2 ) /* INSERE X NA POSICAO QUE O PL1 INFORMAR */
{
matriz[l][c] = 'X';
}
if ( a == 3 ) /* INSERE 0 NA POSICAO QUE O PL1 INFORMAR */
{
matriz[l][c] = '0';
}
}
int win( char pl ) /* SE HOUVER PLAYER VENCEDOR RETORNA, SENAO CONTINUA O JOGO */
{
int i,x,v,a;
i = 0;
x = 0;
v = 0;
a = 0;
while ( i < 5 )
{
while ( x < 5 )
{
if ( a == 0 ) /* CONSULTA NA HORIZONTAL */
{
if ( matriz[i][x] == pl )
{
v++;
}
}
if ( a == 1 ) /* CONSULTA NA VERTICAL */
{
if ( matriz[x][i] == pl )
{
v++;
}
}
if ( a == 2 ) /* CONSULTA NA DIAGONAL PRINCIPAL */
{
if ( matriz[x][x] == pl )
{
v++;
}
}
if ( a == 3 ) /* CONSULTA NA DIAGONAL SECUNDARIA */
{
if ( matriz[i][x] == pl )
{
v++;
}
}
if ( a < 3 )
{
x = x + 2;
}else /* PARA VERIFICAR A DIAGONAL SECUNDARIA */
{
x = x + 2;
i = i - 2;
}
}
if ( v == 3 ) /* CASO HAJA VENCEDOR */
{
return 1;
}
if (( i == 4 ) || ( i == -2 ))
{
i = 0;
a++; /* INCREMENTA A PROXIMA CONSULTA */
if ( a > 3 ) /* PARA NA ULTIMA CONSULTA*/
{
return 0;
}
}
v = 0;
x = 0;
i = i + 2;
if ( a == 3 ) /* PARA DECRECER A DIAGONAL SECUNDARIA */
{
x = 0;
i = 4;
}
}
}
int main()
{
int a, i , x,fim,velha;
fim = 0;
velha = 0;
limpar(); /* DEFINE A ESTRUTURA DA MATRIZ */
system("reset"); /* APAGA TELA, NO WINDOWS USE cls */
imprimir(); /* IMPRIME A MATRIZ */
while (( fim < 9 ) && ( velha == 0 ))
{
__fpurge(stdin);/* PARA WINDOWS MUDE PARA fflush */
if (( fim % 2 ) == 0 )/* SEPARA ENTRE O PL1 E PL2 */
{
printf("\nPlayer 1 = "); /* CONFIGURACOES PARA PL1 */
scanf("%d %d",&i,&x);
if ((( i <= 3 ) && (i >= 1)) && (( x <= 3 ) && (x >= 1))) /* VALIDA A ENTRADA ENTRE 1, 2 E 3 */
{
if (matriz[(i-1)*2][(x-1)*2] == ' ')/* CERTIFICA QUE A POSICAO NA MATRIZ ESTA LIVRE */
{
preencher(2,i,x); /* SETA NA MATRIZ AS COORDENADAS INFORMADAS */
system("reset");
imprimir();/* IMPRIME A MATRIZ NOVAMENTE*/
}else
{
printf("\nCasa utilizada\n");/* SENDO AS COORDENADAS JA UTILIZADAS RETORNA ERRO */
fim--;
}
}else
{
printf("\nIntervalo de 1 a 3\n"); /* ERRO PARA VALORES DIFERENTES DE 1, 2 E 3 */
fim--;
}
if ( fim >= 4 ) /* CONSULTA SE HOUVE VENCEDOR */
{
if ( win('X') == 1 )
{
velha = 1; /* SE HOUVE VENCEDOR, SAI DO LOOP */
}
}
}else
{
printf("\nPlayer 2 = ");
scanf("%d %d",&i,&x);
if ((( i <= 3 ) && (i >= 1)) && (( x <= 3 ) && (x >= 1)))
{
if (matriz[(i-1)*2][(x-1)*2] == ' ')
{
preencher(3,i,x);
system("reset");
imprimir();
}else
{
printf("\nCasa utilizada\n");
fim--;
}
}else
{
printf("\nIntervalo de 1 a 3\n");
fim--;
}
if ( fim >= 4 )
{
if ( win('0') == 1 )
{
velha = 2;
}
}
}
fim++;
}
if ( velha == 1 ) /* HOUVE VENCEDOR */
{
printf("\nPlayer 1 Venceu\n");
}
if ( velha == 2 )
{
printf("\nPlayer 2 Venceu\n");
}
if ( velha == 0 )
{
printf("\nEmpate\n");
}
return 0;
}