Auxilio pra finalizar exercício

1. Auxilio pra finalizar exercício

Jeferson Neves da Silva
jefers0n

(usa Suse)

Enviado em 27/05/2009 - 19:19h

Pessoal, é o seguinte, estou aprendendo C e a professora iniciou em aula um jogo da velha conosco(sei que ficaria melhor com matrizes, mas ainda não foi dado este conteúdo fizemos com vetor mesmo...). É para ser finalizado em casa, falta pouco, mas to com dificuldades, o programa é para uma pessoa jogar com o computador, o computador sorteia aleatóriamente as posições, facil de jogar, pois a máquina não vai "pensar", mas é apenas didático ainda... vou postar o código para verem:

// JOGO DA VELHA - em linguagem C (for Linux)

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void inicializa(char tab[9]);
void escreve(char tab[9]);
void jogadaUsuario(char tab[9]);
void jogadaComputador(char tab[9]);
int verificaJogo(char tab[9]);
int verificaLinha(char tab[9], char elem);
int resultado (char tab[9]); //ver se ta correto

main(){
char tabuleiro[9];
int cont=1;

srand(time(NULL));
inicializa(tabuleiro);
printf("\n\t||||| Usuário joga com 'X' e o computador joga com 'O' |||||\n\n");
escreve(tabuleiro);

while(cont <=3){ // este cont era pra um teste da profª..
jogadaUsuario(tabuleiro);
escreve(tabuleiro);
jogadaComputador(tabuleiro);
escreve(tabuleiro);
cont++;
}

}

void inicializa(char tab[9]){
int i;
for(i=0; i<9; i++){
tab[i] = '-';
}
}

void escreve(char tab[9]){
printf("\t\t\nJogo da Velha\n\n");
printf("0 | 1 | 2\n");
printf("%c | %c | %c\n",tab[0],tab[1],tab[2]);
printf ("_____________");
printf("3 | 4 | 5\n");
printf("%c | %c | %c\n",tab[3],tab[4],tab[5]);
printf ("_____________");
printf("6 | 7 | 8\n");
printf("%c | %c | %c\n",tab[6],tab[7],tab[8]);
}

void jogadaUsuario(char tab[9]){
int pos;

while(1){
printf("Digite uma posição válida (0-8):");
scanf("%i",&pos);
while(pos<0 || pos>8){
printf("Posição inválida. A posição deve estar no intervalo [0;8].\n");
printf("Digite novamente a posição:");
scanf("%i",&pos);
}
if(tab[pos]== '-'){
tab[pos] = 'X';
break;
}
}
}

void jogadaComputador(char tab[9]){
int pos;

while(1){
pos = rand()%9;
if(tab[pos]== '-'){
tab[pos]='O';
break;
}
}
}

int verificaJogo(char tab[9]){
if(verificaLinha(tab,'X')==1) return 1;
if(verificaLinha(tab,'O')==1) return 0;
//return 2; empate
return 3; //continua o jogo

}

int verificaLinha(char tab[9], char elem){
int i, cont,x;

for(x=0; x<8; x=x+3){
cont = 0;
for(i=x; i<x+3; i++){
if(tab[i]== elem) cont++;
}
if(cont==3) return 1;
}
return 0;
}

int resultado (char tab[9]) {
if (verificaJogo(tab) == 1)
printf("\n\tO usuário venceu!!! Parabéns!!!!!!!\n");
else if (verificaJogo(tab) == 0)
printf("\n\tO computador venceu!!! Tu é ruim hein usuário!\n");
else if (verificaJogo(tab) == 2)
printf("\n\tEmpate!!!\n");
// else printf(); //tem que continuar o jogo...
}

Preciso finalizar as ultimas funções, a verifica jogo, que deve verificar se alguem ganhou(retorna 1 se o usuário ganhou, 0 se o pc ganhou, 2 se empate e 3 para continuar jogando) me perdi em como fazer para após verificar e se ninguém ganhou e ainda der pra jogar como continuar jogando(como fazer na função resultado...) tem como ou não me expressei bem?

Se puderem ajudar agradeço...


  


2. Re: Auxilio pra finalizar exercício

Victor Amorim dos Santos
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;
}






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts