Ir ao conteúdo
  • Cadastre-se

Leandro Arnold

Membro Júnior
  • Posts

    15
  • Cadastrado em

  • Última visita

Reputação

6
  1. Entendi seu raciocínio @giu_d mas não consegui implementar no código. ""Feito isso, para a 1ª pergunta você passa o valor q está no índice 0 do vetor, para a 2ª pergunta você passa o valor que está no índice 1 do vetor, e assim por diante" Como eu poderia implementar isso nele? Seria com ordenação de vetores?
  2. Tentei seguir esse método amigo, mas não consegui embaralhar as perguntas. O número de perguntas é o usuário que define. Tentei assim: # define pergunta 10 void concatenapergunta(){ int i, j, ne, temp; int vet[pergunta]; char arquivo[]="pergunta"; char n[2]; char extans[]=".qiz"; srand(time(NULL)); for (i = 0; i < pergunta; i++){ vet[i] = i + 1; } for (i = 0; i < pergunta; i++) { } for (i = 10; i >= 1; i--){ ne = rand() % (i + 1); temp = vet[i]; vet[i] = vet[ne]; vet[ne] = temp; } sprintf(n,"%d",pergunta); strcat(arquivo,n); strcat(arquivo,extans); strcpy(arquivopergunta,arquivo); } Não deu certo, agora só aparece a mesma pergunta.
  3. Olá companheiros de fórum Estou com o seguinte problema em meu programa. Eu construiu um jogo de perguntas e respostas, um quis, utilizando arquivos e funções. Entretanto, o computador sorteia a mesma pergunta mais de uma vez. Como eu poderia resolver isso? Desde já agradeço pela ajuda. Um cordial abraço! #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> int pergunta; char resposta; char arquivopergunta[20]; char arquivoresposta[10]; void concatenapergunta(){ char arquivo[]="pergunta"; char n[2]; char extans[]=".qiz"; srand(time(NULL)); pergunta=1+(rand()%10); sprintf(n,"%d",pergunta); strcat(arquivo,n); strcat(arquivo,extans); strcpy(arquivopergunta,arquivo); } void concatenaresposta(){ char arquivo[]="resposta"; char n[2]; char extans[]=".qiz"; sprintf(n,"%d",pergunta); strcat(arquivo,n); strcat(arquivo,extans); strcpy(arquivoresposta,arquivo); } void lepergunta(){//arquivo para a pergunta concatenapergunta(); concatenaresposta(); FILE *f;//ponteiro f=fopen (arquivopergunta,"r");//função para abrir o arquivo, tipo do arquivo e visibilidade char c; //printf("entrou, %s", arquivopergunta); while(1){ c=fgetc(f);//armazenar cada caractere que tiver no arquivo if(c==EOF){//final do arquivo break; } printf("%c",c); } printf("\n"); fclose(f); } void responde(){//função para responder FILE *F; char c; printf("\nInforme sua resposta: "); scanf("%c",&resposta); fflush(stdin); } void checar(){//função para checar se a resposta está correta e contem o arquvio da redposta FILE *f; char c;f=fopen(arquivoresposta,"r"); c=fgetc(f); if(c==resposta){ printf("\n\nParabens voce acertou!"); } else{ printf("\n\nVoce errou"); } printf("\n\n"); } int main(){ int i, nperguntas; printf("\nInforme quantas perguntas voce quer responder?"); scanf("%d",&nperguntas); fflush(stdin); for(i=0;i<nperguntas;i++){ lepergunta();//arquivo da pergunta responde(); checar();//aarquivo da resposta } return 0; }
  4. Muito obrigado pela ajuda. Agora o programa não trava mais amigo. Me desculpe pelo monte de perguntas que te enviei. Abração!
  5. Então o código ficaria assim amigo? void computadorjoga(){//função para criar as jogadas randomicas do pc int count=0, n; srand(time(NULL)); linha= rand()%3; coluna= rand()%3; for(linha=0;linha<=3;linha++){ for(coluna=0;coluna<=3;coluna++){ if(jogodaveia[linha][coluna]=='0'){//se o espaço do tabuleiro estiver em branco, o computador marca count++; } if(count==n){ jogodaveia[linha][coluna]=='O'; } } } }
  6. Então eu devo criar uma outra matriz para armazenar as posições vazias e marcar o aleatório em cima delas?
  7. Então eu devo retirar a recursividade para o problema parar e fazer outra função para o computador não marcar em uma posição que já está marcada?
  8. Entendi seu código, obrigado por compartilhar. O que não consigo resolver no meu, é o erro que aparece quando executo o programa para jogar contra o computador. Às vezes trava, às vezes funciona. Não sei o que está acontecendo.
  9. Muito obrigado pela observação Giu, não tinha me dado por conta disso, e o contador segue incrementando as jogadas inválidas, como eu posso arrumar isso no código? Outro problema que enfrento agora é com relação ao modo jogador x computador. O computador marca o tabuleiro de forma randômica, mas do nada o programa dá erro e trava. Não sei o que está acontecendo. Agradeço desde já pela atenção amigos. Abraço! #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> void jogadap1(); void jogadap2(); void checajogada1(); void checajogada2(); void cvitoriap1(); void cvitoriap2(); void cempate(); void exibitab(); void computadorjoga(); void menu(); int linha, coluna, jogadas, nivel, vencedor=0; char jogodaveia[3][3]; void computadorjoga(){//função para criar as jogadas randomicas do pc srand(time(NULL)); linha= rand()%3; coluna= rand()%3; if(jogodaveia[linha][coluna]=='0'){//se o espaço do tabuleiro estiver em branco, o computador marca jogodaveia[linha][coluna]='O'; jogadas++; } else{ computadorjoga(); } } void criartab(){//função para criar o tabuleiro for(linha=0;linha<=3;linha++){ for(coluna=0;coluna<=3;coluna++){ jogodaveia[linha][coluna]='0'; } } } void exibitab(){//função para exibir o tabuleiro printf("\n\n"); printf(" %c | %c | %c\n",jogodaveia[0][0],jogodaveia[0][1],jogodaveia[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c\n",jogodaveia[1][0],jogodaveia[1][1],jogodaveia[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c\n",jogodaveia[2][0],jogodaveia[2][1],jogodaveia[2][2]); } void jogadap1(){//jogador 1 faz a jogada printf("\nO jogador 1 faz a jogada"); printf("\nInforme a linha que voce quer marcar: "); scanf("%d",&linha); printf("Informe a coluna que voce quer marcar: "); scanf("%d",&coluna); checajogada1(); jogodaveia[linha][coluna]='X'; cvitoriap1(); jogadas++; cempate(); } void jogadap2(){//jogador 2 faz a jogada printf("\nO jogador 2 faz a jogada"); printf("\nInforme a linha que voce quer marcar: "); scanf("%d",&linha); printf("Informe a coluna que voce quer marcar: "); scanf("%d",&coluna); checajogada2(); jogodaveia[linha][coluna]='O'; cvitoriap2(); jogadas++; cempate(); } void checajogada1(){//checar o tabuleiro para não marcar em uma posição que já foi marcada if (jogodaveia[linha][coluna]!='0'){ printf("\nJogada invalida"); jogadap1(); } } void checajogada2(){ if (jogodaveia[linha][coluna]!='0'){ printf("\nJogada invalida"); jogadap2(); } } void cvitoriap1(){//Condições de vitória do jogador 1 if(jogodaveia[0][0]==jogodaveia[0][1]&&jogodaveia[0][1]==jogodaveia[0][2]&&jogodaveia[0][0]=='X'){ vencedor=1; } else if(jogodaveia[1][0]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[1][2]&&jogodaveia[1][0]=='X'){ vencedor=1; } else if(jogodaveia[2][0]==jogodaveia[2][1]&&jogodaveia[2][1]==jogodaveia[2][2]&&jogodaveia[2][0]=='X'){ vencedor=1; } else if(jogodaveia[0][0]==jogodaveia[1][0]&&jogodaveia[1][0]==jogodaveia[2][0]&&jogodaveia[0][0]=='X'){ vencedor=1; } else if(jogodaveia[0][1]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][1]&&jogodaveia[0][1]=='X'){ vencedor=1; } else if (jogodaveia[0][2]==jogodaveia[1][2]&&jogodaveia[1][2]==jogodaveia[2][2]&&jogodaveia[0][2]=='X'){ vencedor=1; } else if(jogodaveia[0][0]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][2]&&jogodaveia[0][0]=='X'){ vencedor=1; } else if(jogodaveia[0][2]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][0]&&jogodaveia[0][2]=='X'){ vencedor=1; } if(vencedor!=0){ printf("\n\n---------------O vencedor foi o jogador %d !!!---------------\n\n",vencedor); printf("\n\n----------------------Parabens!---------------\n\n"); exit(0); } } void cvitoriap2(){//condições de vitória do jogador 2 if(jogodaveia[0][0]==jogodaveia[0][1]&&jogodaveia[0][1]==jogodaveia[0][2]&&jogodaveia[0][0]=='O'){ vencedor=2; } else if(jogodaveia[1][0]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[1][2]&&jogodaveia[1][0]=='O'){ vencedor=2; } else if(jogodaveia[2][0]==jogodaveia[2][1]&&jogodaveia[2][1]==jogodaveia[2][2]&&jogodaveia[2][0]=='O'){ vencedor=2; } else if(jogodaveia[0][0]==jogodaveia[1][0]&&jogodaveia[1][0]==jogodaveia[2][0]&&jogodaveia[0][0]=='O'){ vencedor=2; } else if(jogodaveia[0][1]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][1]&&jogodaveia[0][1]=='O'){ vencedor=2; } else if (jogodaveia[0][2]==jogodaveia[1][2]&&jogodaveia[1][2]==jogodaveia[2][2]&&jogodaveia[0][2]=='O'){ vencedor=2; } else if(jogodaveia[0][0]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][2]&&jogodaveia[0][0]=='O'){ vencedor=2; } else if(jogodaveia[0][2]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][0]&&jogodaveia[0][2]=='O'){ vencedor=2; } if(vencedor!=0){ printf("\n\n---------------O vencedor foi o jogador %d !!!---------------\n\n",vencedor); printf("\n\n----------------------Parabens!---------------\n\n"); exit(0); } } void cempate(){ if((jogadas==9)&&(vencedor==0)){ printf("\n\n--------------DEU VEIA!---------------\n\n"); exit(0); } } void menu(){ printf("\n\n---------------------BEM VINDO AO JOGO DA VEIA 2.0---------------------"); printf("\n\nEscolha um nivel de dificuldade:\n\n(1) - Jogador vs Jogador \n(2) - Jogador vs PC \n(3) - Jogador vs PC Imbativel: \n\n "); scanf("%d",&nivel); } int main(){ menu(); if (nivel == 1) { criartab(); do{ exibitab(); jogadap1(); exibitab(); jogadap2(); }while(jogadas<=9); } if (nivel==2){ criartab(); do{ exibitab();jogadap1(); exibitab(); computadorjoga(); }while(jogadas<=9); } return 0; }
  10. Muito obrigado amigo, nem tinha me dado por conta. Agora funciona certinho, e vou fazer as condições para o pc jogar. Abração amigo!
  11. Olá amigos do fórum Estou desenvolvendo um jogo da velha em c, e o único problema que tenho é que a condição que criei para verificar se determinada posição do tabuleiro já foi marcada não funciona. Por exemplo se eu marquei a posição 1,1 com o X e se o outro jogador marcar ela, o programa substitui o X pelo O. Como eu poderia resolver isso? Já tentei colocar a função na int main, mas não funcionou. Ficarei grato se puderem me dar uma luz. #include<stdio.h> #include<stdlib.h> #include<string.h> void jogadap1(); void jogadap2(); void checajogada1(); void checajogada2(); void cvitoriap1(); void cvitoriap2(); void exibitab(); void menu(); int linha, coluna, jogadas, nivel, vencedor=0; char jogodaveia[3][3]; void criartab(){//função para criar o tabuleiro for(linha=0;linha<=3;linha++){ for(coluna=0;coluna<=3;coluna++){ jogodaveia[linha][coluna]='0'; } } } void exibitab(){//função para exibir o tabuleiro printf("\n\n"); printf(" %c | %c | %c\n",jogodaveia[0][0],jogodaveia[0][1],jogodaveia[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c\n",jogodaveia[1][0],jogodaveia[1][1],jogodaveia[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c\n",jogodaveia[2][0],jogodaveia[2][1],jogodaveia[2][2]); } void jogadap1(){//jogador 1 faz a jogada printf("\nO jogador 1 faz a jogada"); printf("\nInforme a linha que voce quer marcar: "); scanf("%d",&linha); printf("Informe a coluna que voce quer marcar: "); scanf("%d",&coluna); checajogada1(); jogodaveia[linha-1][coluna-1]='X'; cvitoriap1(); jogadas++; } void jogadap2(){//jogador 2 faz a jogada printf("\nO jogador 2 faz a jogada"); printf("\nInforme a linha que voce quer marcar: "); scanf("%d",&linha); printf("Informe a coluna que voce quer marcar: "); scanf("%d",&coluna); checajogada2(); jogodaveia[linha-1][coluna-1]='O'; cvitoriap2(); jogadas++; } void checajogada1(){//checar o tabuleiro para não marcar em uma posição que já foi marcada if (jogodaveia[linha][coluna]!='0'){ printf("\nJogada invalida"); jogadap1(); } } void checajogada2(){ if (jogodaveia[linha][coluna]!='0'){ printf("\nJogada invalida"); jogadap2(); } } void cvitoriap1(){//Condições de vitória do jogador 1 if(jogodaveia[0][0]==jogodaveia[0][1]&&jogodaveia[0][1]==jogodaveia[0][2]&&jogodaveia[0][0]=='X'){ vencedor=1; } else if(jogodaveia[1][0]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[1][2]&&jogodaveia[1][0]=='X'){ vencedor=1; } else if(jogodaveia[2][0]==jogodaveia[2][1]&&jogodaveia[2][1]==jogodaveia[2][2]&&jogodaveia[2][0]=='X'){ vencedor=1; } else if(jogodaveia[0][0]==jogodaveia[1][0]&&jogodaveia[1][0]==jogodaveia[2][0]&&jogodaveia[0][0]=='X'){ vencedor=1; } else if(jogodaveia[0][1]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][1]&&jogodaveia[0][1]=='X'){ vencedor=1; } else if (jogodaveia[0][2]==jogodaveia[1][2]&&jogodaveia[1][2]==jogodaveia[2][2]&&jogodaveia[0][2]=='X'){ vencedor=1; } else if(jogodaveia[0][0]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][2]&&jogodaveia[0][0]=='X'){ vencedor=1; } else if(jogodaveia[0][2]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][0]&&jogodaveia[0][2]=='X'){ vencedor=1; } if(vencedor!=0){ printf("\n\n---------------O vencedor foi o jogador %d !!!---------------\n\n",vencedor); printf("\n\n----------------------Parabens!---------------\n\n"); exit(0); } } void cvitoriap2(){//condições de vitória do jogador 2 if(jogodaveia[0][0]==jogodaveia[0][1]&&jogodaveia[0][1]==jogodaveia[0][2]&&jogodaveia[0][0]=='O'){ vencedor=2; } else if(jogodaveia[1][0]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[1][2]&&jogodaveia[1][0]=='O'){ vencedor=2; } else if(jogodaveia[2][0]==jogodaveia[2][1]&&jogodaveia[2][1]==jogodaveia[2][2]&&jogodaveia[2][0]=='O'){ vencedor=2; } else if(jogodaveia[0][0]==jogodaveia[1][0]&&jogodaveia[1][0]==jogodaveia[2][0]&&jogodaveia[0][0]=='O'){ vencedor=2; } else if(jogodaveia[0][1]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][1]&&jogodaveia[0][1]=='O'){ vencedor=2; } else if (jogodaveia[0][2]==jogodaveia[1][2]&&jogodaveia[1][2]==jogodaveia[2][2]&&jogodaveia[0][2]=='O'){ vencedor=2; } else if(jogodaveia[0][0]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][2]&&jogodaveia[0][0]=='O'){ vencedor=2; } else if(jogodaveia[0][2]==jogodaveia[1][1]&&jogodaveia[1][1]==jogodaveia[2][0]&&jogodaveia[0][2]=='O'){ vencedor=2; } if(vencedor!=0){ printf("\n\n---------------O vencedor foi o jogador %d !!!---------------\n\n",vencedor); printf("\n\n----------------------Parabens!---------------\n\n"); exit(0); } } void menu(){ printf("\n\n---------------------BEM VINDO AO JOGO DA VEIA 2.0---------------------"); printf("\n\nEscolha um nivel de dificuldade:\n\n(1) - Jogador vs Jogador \n(2) - Jogador vs PC \n(3) - Jogador vs IPC: \n\n "); scanf("%d",&nivel); } int main(){ menu(); if (nivel == 1) { criartab(); for(jogadas=1; jogadas<=9; jogadas++){ exibitab(); jogadap1(); exibitab(); jogadap2(); } } return 0; }
  12. Você poderia por gentileza explicar melhor como eu poderia implementar essa função amigo? Pois não entendi direito o que você escreveu.
  13. Seria a string char arquivopergunta
  14. Dentro do for Leornado adicionado 0 minutos depois Dentro do for Leonardo
  15. Olá companheiros de fórum, tudo bom? Tenho que programar um quis utilizando arquivos. Eu criei um arquivo com a pergunta e outra com a resposta. O programa faz a leitura correta dos dois, mas o problema que enfrento é que o quis tem que ter 10 perguntas, ou seja, vou ter que criar 20 arquivos, 10 com as perguntas e outros 10 com as respostas. Uma das exigências da atividade é concatenar as strings usando a função strcat(), para não precisar criar uma condição para cada pergunta dentro do código. Como eu poderia resolver essa questão? Ficarei muito grato amigos se você puderem por gentileza sanar minha dúvida. Um cordial abraço! #include<stdio.h> #include<stdlib.h> #include<string.h> int pergunta; char r; void lepergunta(char arquivopergunta[20]){//arquivo para a pergunta FILE *f;//ponteiro f=fopen (arquivopergunta,"r");//função para abrir o arquivo, tipo do arquivo e visibilidade char c; while(1){ c=fgetc(f);//armazenar cada caractere que tiver no arquivo if(c==EOF){//final do arquivo break; } printf("%c",c); } printf("\n"); fclose(f); } void responde(){//função para responder FILE *F; char c; printf("\nInforme sua resposta: "); scanf("%c",&r); } void checar(char arquivoresposta[10]){//função para checar se a resposta está correta e contem o arquvio da redposta FILE *f; char c; f=fopen(arquivoresposta,"r"); c=fgetc(f); if(c==r){ printf("\nParabens voce acertou"); } else{ printf("\nVoce errou"); } } int main(){ int npergunta, i; printf("\nInforme quantas perguntas voce deseja responder: "); scanf("%d",&npergunta); for(i=0;i<npergunta;i++){//laço para controlar quantas perguntas o participante quer responder lepergunta("P1.qiz");//arquivo da pergunta responde(); checar("resposta1.qiz");//aarquivo da resposta } return 0; }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...