Jump to content

Recommended Posts

Bom dia!

 

Estou desenvolvendo meu primeiro jogo da velha, e estou encontrando um problema quando aperto a tecla ENTER. O que acontece é que quando aperto ENTER, o programa o reconhece como um comando de caracter e retorna um valor para quando digitam um caracter diferente de X e O. Abaixo fotos:

Antes de apertar o ENTER:

image.png.16ff771699b249059c32a3d4c4041155.png

Após apertar o ENTER

image.png.bc5593fa801f5cea2950c7200289d027.png

 

CÓDIGO:

Citar

#include<stdio.h>
#include<string.h>


int main(){

    char matriz[3][3];
    int j,i;
    char modojogo[1];
    char j1[1],j2[1];
    int inicio=1;

        j1[0]='X';
        j2[0]='O';

            for(i=0;i<3;i++){
                    for(j=0;j<3;j++){
                    matriz[j]='_';
                    }
    }


    do{
            printf("\t\t\t\t JOGO DA VELHA\n");
            for(i=0;i<3;i++){
            for(j=0;j<3;j++){
                printf("\t\t%c\t",matriz[j]);
            }
                printf("\n");
            }
            printf("QUAL JOGADOR VOCE EH: J1(X) J2(O) : ");
    scanf("%c", &modojogo);
    if(modojogo[0]=='X'){

            printf("JOGADOR 1. DIGITE O LOCAL DA SUA ESCOLHA:\n[0][0]\t [0][1]\t [0][2]\n[1][0]\t [1][1]\t [1][2]\n[2][0]\t [2][1]\t [2][2]\n");
    scanf("%i", &i);
    scanf("%i", &j);
    matriz[j]='X';

    if(matriz[j]==matriz[0][0] && matriz[j]==matriz[0][1] && matriz[j]==matriz[0][2] || matriz[j]==matriz[0][0] &&
    matriz[j]==matriz[1][0] && matriz[j]==matriz[2][0] || matriz[j]==matriz[0][0]&&matriz[j]==matriz[1][1]&&
    matriz[j]==matriz[2][2]|| matriz[j]==matriz[1][0] && matriz[j]==matriz[1][1] && matriz[j]==matriz[1][2]||
    matriz[j]==matriz[2][0] && matriz[j]==matriz[2][1] && matriz[j]==matriz[2][2]||matriz[j]==matriz[0][1] &&
    matriz[j]==matriz[1][1] && matriz[j]==matriz[2][1] || matriz[j]==matriz[0][2] &&
    matriz[j]==matriz[1][2] && matriz[j]==matriz[2][2]){

    printf("VOCÊ GANHOU");

    inicio=0;
}
    }
else{
        if(modojogo[0]=='O'){

            printf("JOGADOR 2. DIGITE O LOCAL DA SUA ESCOLHA:\n[0][0]\t [0][1]\t [0][2]\n[1][0]\t [1][1]\t [1][2]\n[2][0]\t [2][1]\t [2][2]\n");
    scanf("%i", &i);
    scanf("%i", &j);
    matriz[j]='O';

    if(matriz[j]==matriz[0][0] && matriz[j]==matriz[0][1] && matriz[j]==matriz[0][2] || matriz[j]==matriz[0][0] &&
    matriz[j]==matriz[1][0] && matriz[j]==matriz[2][0] || matriz[j]==matriz[0][0]&&matriz[j]==matriz[1][1]&&
    matriz[j]==matriz[2][2]|| matriz[j]==matriz[1][0] && matriz[j]==matriz[1][1] && matriz[j]==matriz[1][2]||
    matriz[j]==matriz[2][0] && matriz[j]==matriz[2][1] && matriz[j]==matriz[2][2]||matriz[j]==matriz[0][1] &&
    matriz[j]==matriz[1][1] && matriz[j]==matriz[2][1] || matriz[j]==matriz[0][2] &&
    matriz[j]==matriz[1][2] && matriz[j]==matriz[2][2]){

    printf("VOCE GANHOU");

    inicio=0;
    }
}
else{
        printf("\n Escolha o jogador correto. JOGADOR 01 (X)                  JOGADOR 02 (O)\n");
    }
}
    }while(inicio==1);
}

 

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Lísias de Castro
      Ola, sou Lísias e gostaria de saber se alguém poderia me ajudar nessa tarefa tão difícil para finalizar minha biblioteca.
      Eu fiz um motor de jogos, e nele já consegui implementar todas as funções básicas para um uso primário. Fazendo a criação de jogos simples através dela.
      Mas estou desenvolvendo um rpg, e resolvi fazer com que os personagens atirem a longa distância. Porém, para que isso aconteça, tenho que fazer com que o objeto a ser atirado sempre corra em linha reta.
      Criei uma função que faz com que todos os objetos se movam na tela, mas ela não funciona de uma maneira linear. O que posso modificar nessa função para que ela me proporcione isso?
       
      static STATUS place_user_move(OBJECT_SET * U, BP32 x, BP32 y) { if (U == NULL)return (Off); if (U->x_route == x) { if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but(U, NORTH); if (U->y_route < y) { U->y_route = y; U->where_stop(U); return (On); } } if (U->y_route < y) { U->y_route += U->y_speed; U->where_stop_but(U, SOUTH); if (U->y_route > y) { U->where_stop(U); U->y_route = y; return (On); } } return (Off); } if (U->y_route == y) { if (U->x_route > x) { U->x_route -= U->x_speed; U->where_stop_but(U, WEST); if (U->x_route < x) { U->where_stop(U); U->x_route = x; return (On); } } if (U->x_route < x) { U->x_route += U->x_speed; U->where_stop_but(U, EAST); if (U->x_route > x) { U->where_stop(U); U->x_route = x; return (On); } } return (Off); } if (U->x_route > x) { U->x_route -= U->x_speed; if (U->x_route < x)U->x_route = x; if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but_and(U, NORTH, WEST); if (U->y_route < y)U->y_route = y; } if (U->y_route < y) { U->where_stop_but_and(U, SOUTH, WEST); U->y_route += U->y_speed; } } if (U->x_route < x) { U->x_route += U->x_speed; if (U->x_route > x)U->x_route = x; if (U->y_route < y) { U->y_route += U->y_speed; U->where_stop_but_and(U, SOUTH, EAST); if (U->y_route > y)U->y_route = y; } if (U->y_route > y) { U->y_route -= U->y_speed; U->where_stop_but_and(U, NORTH, EAST); if (U->y_route < y)U->y_route = y; } } return (Off); } PLACE_CALL STATUS PLACE_TYPE place_user_route(CHAINED * user, BP32 x, BP32 y) { if (user && USER_C(user->it)->object && bit_is_on(USER_C(user->it)->object->status, OBJECT_VISIBLE)) { OBJECT_SET * U = USER_C(user->it)->object; if (U->x_route == x && U->y_route == y) { obj_where_stop_all(U); return (On); } //printf("xs %f ys %f\n",object->x_speed,object->y_speed); return (place_user_move(U, x, y)); } return (Off); } #define sign(x) ((x > 0) ? 1 : ((x < 0) ? -1 : 0) ) PLACE_CALL STATUS PLACE_TYPE place_user_straight(CHAINED * user, BP32 x1, BP32 y1) { if (user && USER_C(user->it)->object && bit_is_on(USER_C(user->it)->object->status, OBJECT_VISIBLE)) { OBJECT_SET * O = USER_C(user->it)->object; BP32 dx, dy; dx = x1 - O->x_route; dy = y1 - O->y_route; static BP32 x = -1, y = -1, p = -1; if (x == -1)x = O->x_route; if (y == -1)y = O->y_route; if (p == -1)p = 2 * dy - dx; printf("x %lf y %lf\n", x, y); if (x < x1) { if (p >= 0) { y = y + 1; p = p + 2 * dy - 2 * dx; } else { p = p + 2 * dy; } x = x + 1; } else { O->x_route = x; O->y_route = y; x = -1; y = -1; p = -1; return (On); } O->x_route = x; O->y_route = y; x = -1; y = -1; p = -1; } return (Off); } a função user_place_straight foi minha tentativa de implementar bresenham que promete fazer o que estou tentando.
       
      Isso é o que fá fiz com o motor: https://www.youtube.com/watch?v=nuLi_lB6c4Y&feature=youtu.be
       
      Mas até agora não estou conseguindo resultado
    • By SGTFalcao
      Boa noite, 
       
      Preciso de ajuda com o desenvolvimento de um programa. 
       
      Quero saber 3 coisas .
       
      1 - Criei uma  vetor de struct vinculada a uma constante de valor 5. Quero saber como faço para limitar o cadastro ao tamanho da constante ( controla o n° de posições do vetor da struct)
       
      De forma que ao cadastrar 5 livros ele impeça de cadastrar o sexto. 
       
      2- Impedir que dos 5 cadastros algum deles se repita. (Livros iguais)
       
       
       
      3- Se eu der o comando para exibir a lista de dados cadastrados e não houver nenhum ele tem que informar lista vazia. 
       
       
       
       
       
      Segue o meu código. 
       
      #include<stdio.h>
      #include<stdlib.h>
      #include<string.h>
      #define Max_livros 5
      struct biblio{
          char nomeobra[30];
          char nomeedit[30];
          char nomeaut[30];
          int codigo;
          int ativo;
      };
      biblio livros[Max_livros];
      void menu();
      void cadastrar();
      void mostrar();
      // Menu principal -------------------------INICIO-------------------------------
      int main(){
          menu();
          return 0;
      }
      // -----------------------------------------FIM---------------------------------
      void menu(){
          int op;    
          do{
          system("cls");
          printf("---------->>Sistema para bibliotecas<<----------\n \n \n ");
          printf("\n1 - Inserir um novo cadastro: ");
          printf("\n2 - Mostrar todos os cadastros: ");
          printf("\n0 - Encerrar \n\n");
          printf("Opcao escolhida: ");
          scanf("%d",&op);
          getchar();
          fflush(stdin);
          switch(op){
              case 1:
                   cadastrar();
              break;
              case 2:
                  mostrar();
              break;
              default : 
                  system("cls");
                  printf("\n \n ==========================================");
                  printf("\n\n\n\n\t Erro : opcao invalida!!!\n\n\n\n");
                  printf("\n \n ==========================================\n\n");
                  system("pause");
          }
          getchar();
          }while(op!=0);
                  }            
      void cadastrar(){
          
          system("cls");    
          char nomeobra[20];
          char nomeedit[20];
          char nomeaut[20];
          int codigo;
          int op;
          do{    
              codigo=0;
              codigo=codigo+1;
              printf("\nDigite o nome da obra: ");
              fgets(nomeobra,sizeof(nomeobra),stdin);
                  
              
              printf("\nDigite o(s) nome(s) d(os) autor(es): ");
              fgets(nomeaut,sizeof(nomeaut),stdin);
              
              
              printf("\nDigite o nome da editora: ");
              fgets(nomeedit,sizeof(nomeedit),stdin);
              
              for(int i=0;i<Max_livros;i++){
                  if(livros.ativo==0)
                  {
                      strcpy(livros.nomeobra,nomeobra);
                      strcpy(livros.nomeaut,nomeaut);
                      strcpy(livros.nomeedit,nomeedit);
                      livros.ativo=1;
                      break;
                  }
              }
              printf("\n1 - Continuar \n0 - Sair \n\n");
              scanf("%d",&op);
                  getchar();
                  fflush(stdin);            
          }while(op!=0);
          }
          
          
      void mostrar(){
          int codigo=0;
          system("cls");
          printf("------------->>Lista de livros cadastrados<<-------------\n \n \n");
          for(int i=0;i<Max_livros;i++){
              if(livros.ativo==1){        
                  codigo=codigo+1;
              printf("\nCodigo: %d\n",codigo);
              printf("\nNome da Obra: %s\n",livros.nomeobra);
              printf("\nNome do(s) autor(es): %s\n",livros.nomeaut);
              printf("\nNome da editora: %s\n",livros.nomeedit);
              printf("\n\n--------------------------------\n\n");
              }
          }
          printf("\n\nPressione '0' para voltar ao menu...");
          getchar();
          fflush(stdin);

    • By No(-)me
      OBJETIVO: Ler strings armazenando em campos de uma struct, atendendo à necessidade/interesse de não ler o que resta no buffer na próxima entrada (lendo espaços e quantidade de chars pré definidos)
       
      O QUE PESQUISEI: Tudo que pude, tentei( E TESTEI!) várias formatações com scanf, li e entendi o que fui capaz (lendo em todo lugar) sobre sscanf, fgets, estruturas de repetição recebendo strings de char em char, função criada para o último método citado, setbuf, setvbuf, bufsize e muito mais acredite, vou até passar na biblioteca estadual amanhã para ver se tem algum livro de C e pesquisar mais. (ISTO SÓ PRA DEIXAR CLARO PRA COMUNIDADE que não sou preguiçoso visto que essa é minha primeira pergunta num fórum na história - todo e qualquer tipo de fórum - porque existe uma pressão muito grande sobre fazer perguntas num fórum de programação em especial)
       
      Até que achei um jeito sem ser o famigerado fflush, o rewind (stdin)...
      *Reafirmo! Estou ciente de getchar em estrutura de repetição ou fgets por exemplo, mas só estou aqui porque não me foi útil.*
       
      AFINAL qual o problema de usar a função rewind para o fluxo stdin?
      Claro, é mais usual para chamar ponteiro de arquivo em leitura, mas isso é  motivo suficiente para ser ruim usar em stdin? Qual o problema real de se aplicar no fluxo stdin? Não é portável? Achei até uma doc da microsoft indicando para isto: https://docs.microsoft.com/pt-br/cpp/c-runtime-library/reference/rewind?view=vs-2019 em que há "...Para limpar o buffer de teclado, use rewind com o fluxo stdin, que está associado com o teclado por padrão...".
       
      Vi reprovação por meio de usuários de outros fóruns nos quais achei perguntas parecidas como esta mas não achei as explicações de como isto ser ruim muito convincentes (um pouco presunçoso ou dedutivo da minha parte por ser um mero iniciante).
      O que acham? Eu só tenho 3 meses que conheço a programação em geral.
       
      SITUAÇÃO ATUAL: Olha, já que isto é para um trabalho de ADS EAD em que a faculdade ensina com 'fflush stdin' sem problemas, e já que ainda não achei alternativa também totalmente resoluta e confiável, está assim com o fflush stdin  GENTE DESCULPE QUALQUER INCONVENIENTE.
      #include <stdio.h> #include <stdlib.h> #include <locale.h> typedef struct cadastro{ char nLivro[31]; char nAutores[31]; char nEditora[31]; int cod; }livro; int main(){ setlocale (LC_ALL, ""); livro estante[4]; int op, i, j; i = 1; j = 1; do { printf ("\t> Menu <\n\n1 - > Efetua um novo cadastro\n\n2 - > Visualiza todos cadastros\n\n0 - > Sai do menu\n\n"); scanf ("%1d%*c", &op); fflush (stdin); switch (op){ case 1 :if (i < 6){ printf ("\t> Efetua um novo cadastro\n\n> Nome da obra: "); scanf ("%30[^\n]", estante[i-1].nLivro);//não é necessário 's' nesta ocasião. printf ("\n> Autor(es): "); fflush (stdin);//ou rewind(stdin). scanf ("%30[^\n]", estante[i-1].nAutores); fflush (stdin); printf ("\n> Editora: "); scanf ("%30[^\n]", estante[i-1].nEditora); fflush (stdin); printf ("\n\n\t>Cadastro bem sucedido!"); estante[i-1].cod = i; i++; }else { printf ("Cadastro lotado!"); }......(vergonha do código)  
    • By jadson16
      Estou com um erro no site , esse site era de um jogo antigo que estava gravado no dvd ai tentei abrir ele só pra olhar mesmo e relembrar os velhos tempos mais não consigo arrumar, estou muito precisando de ajuda quem poder me ajudar por favor ficarei grato, vou postar a imagens dos seguinte erros:
       

      Esse é o primeiro erro que mostra e quando vou olhar na linha 460 está assim


       
    • By E.E.E
      Galera meu prof mandou fazer essa tarefa e eu fiz so uma parte dela , podem me ajudar com o resto ?
       
        Criar um programa que leia e mostre 
      as notas e faltas de 10 alunos em uma 
      matriz utilizando seus índices como seus
      respectivos códigos.

      O programa deverá solicitar:
      Média para aprovação:
      Média para recuperação
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.