Jogo da Velha em C

16 respostas
F

Boa Tarde pessoal,
Este é o meu primeiro post no forum. Sou iniciante em programação C.
Gostaria de uma ajuda no meu código, estou tentando fazer um jogo da velha.
Estou quebrando cabeça a horas e não consegui decifrar onde esta o meu erro. Então gostaria de pedir uma ajudinha aos colegas experts em programação.

Qualquer ajuda é bem vinda galera. Muito Obrigado
#include <cstdlib>
#include <iostream>

using namespace std;

char tabuleiro[3][3];
char jog1[20],jog2[20],simb_jog1,simb_jog2,linha,coluna;
int prox_jogador = 1;//Controla o jogador da vez



void jogar (int jogador)
{
    int i = 0; //inicializando contador da estrutura while
    char nome_jog[20],simb_jog;
    
    if (jogador == 1){
       nome_jog = jog1;
       simb_jog = simb_jog1;
       prox_jogador=2;
    }else{
       nome_jog = jog2;
       simb_jog = simb_jog2;
       prox_jogador=1;
    }

	//Definindo o jogador da vez
        linha = 0; //inicializando valor da linha
        coluna = 0; //inicializando valor da coluna
        while (linha < 1 || linha > 3) //Controla se o valor ir a ser digitado certo
        {
            printf("\n\n Vez do Jogador %d. Escolha a Linha (1,2,3): ", nome_jog);
            scanf("%d", &linha); //lendo linha escolhida
            if (linha < 1 || linha > 3) printf("\nAviso: Linha invalida! Voce so pode escolher as linhas de 1 a 3.\n"); //Aviso de linha inválida, caso o jogador tenha escolhido linha menor que 1 ou maior que 3
        }
        while (coluna < 1 || coluna > 3) 
        {
            printf("\n\n Vez do Jogador %d. Escolha a Coluna (1,2,3): ", nome_jog);
            scanf("%d", &coluna); //lendo coluna escolhida
            if (coluna < 1 || coluna > 3) printf("\nAviso: Coluna invalida! Voce so pode escolher as colunas de 1 a 3.\n"); //Aviso de coluna inválida, caso o jogador tenha escolhido coluna menor que 1 ou maior que 3
        }
 
    }
    linha--;//Subtrair o indice digitado pelo usuario, para o indice comecar do 0 nao por 1
    coluna--;////Subtrair o indice digitado pelo usuario, para o indice comecar do 0 nao por 1

    while(i==0){
        if (tabuleiro[linha][coluna] == ' ') //se não estiver marcado
        { 
           tabuleiro[linha][coluna] = simb_jog; //marcar com o símbolo do jogador da vez
           i=1;
        } else { //se o campo escolhido  estivar marcado
           Printf ("Ja houve jogada nesta casa! Escolha outra casa.\n"); //aviso
        }
    }
    
    
    imprime_tabuleiro(prox_jogador);
    
}

int status()
{    /*
   retorna 0 se n?o h? ganhador;
   retorna 1 se o jogador 1 ganhar;
   retorna 2 se o jogador 2 ganhar;
   retorna 3 se houver empate;
   */
   //verifica se tem ganhador na linha 0
   if(tabuleiro[0][0]==simb_jog1 && tabuleiro[1][0]==simb_jog1 && tabuleiro[2][0]==simb_jog1) return 1;
   if(tabuleiro[0][0]==simb_jog2 && tabuleiro[1][0]==simb_jog2 && tabuleiro[2][0]==simb_jog2) return 2; 
   //verifica se tem ganhador na linha 1
   if(tabuleiro[0][1]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][1]==simb_jog1) return 1;
   if(tabuleiro[0][1]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][1]==simb_jog2) return 2;      
   //verifica se tem ganhador na linha 2
   if(tabuleiro[0][2]==simb_jog1 && tabuleiro[1][2]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
   if(tabuleiro[0][2]==simb_jog2 && tabuleiro[1][2]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;      
   //verifica se tem ganhador na coluna 0
   if(tabuleiro[0][0]==simb_jog1 && tabuleiro[0][1]==simb_jog1 && tabuleiro[0][2]==simb_jog1) return 1;
   if(tabuleiro[0][0]==simb_jog2 && tabuleiro[0][1]==simb_jog2 && tabuleiro[0][2]==simb_jog2) return 2;      
   //verifica se tem ganhador na coluna 1
   if(tabuleiro[1][0]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[1][2]==simb_jog1) return 1;
   if(tabuleiro[1][0]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[1][2]==simb_jog2) return 2;      
   //verifica se tem ganhador na coluna 2
   if(tabuleiro[2][0]==simb_jog1 && tabuleiro[2][1]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
   if(tabuleiro[2][0]==simb_jog2 && tabuleiro[2][1]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;      
   //verifica diagonal 1
   if(tabuleiro[0][0]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
   if(tabuleiro[0][0]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;      
   //verifica diagonal 2
   if(tabuleiro[0][2]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][0]==simb_jog1) return 1;
   if(tabuleiro[0][2]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][0]==simb_jog2) return 2;

   //verifica se empate
   if(tabuleiro[0][0]!=' ' && tabuleiro[1][0]!=' ' && tabuleiro[2][0]!=' ')
   {
      if(tabuleiro[0][1]!=' ' && tabuleiro[1][1]!=' ' && tabuleiro[2][1]!=' ')
      {
         if(tabuleiro[0][1]!=' ' && tabuleiro[1][1]!=' ' && tabuleiro[2][1]!=' ')
         {
            return 3; 
         }else{ 
            return 0;
         }
      }else{
            return 0;
      }
   }else{
          return 0; 
   }
}

int imprime_tabuleiro(prox_jogador){
   printf(" %c | %c | %c\n",tabuleiro[0][0],tabuleiro[1][0],tabuleiro[2][0]);
   printf("---+---+---\n");
   printf(" %c | %c | %c\n",tabuleiro[0][1],tabuleiro[1][1],tabuleiro[2][1]);
   printf("---+---+---\n");     
   printf(" %c | %c | %c\n",tabuleiro[0][2],tabuleiro[1][2],tabuleiro[2][2]);
   if (status()==1){
      printf("\nStatus do jogo: Vencedor - %s\n",jog1);
   }     
   if (status()==2){
      printf("\nStatus do jogo: Vencedor - %s\n",jog2);
   }     
   if (status()==3){
      printf("\nStatus do jogo: Empate\n");
   }     
   if (status()==0){
      printf("\nStatus do jogo: Em andamento\n");
      printf("\nDigite sua posicao\n"); 
      //jogar(prox_jogador);       
   } 
   return 0;
}


void zerarMatriz()
{ 
  int i,j = 0;
  for(i=0;i<=3;i++){
     for(j=0;j<3;j++){
        tabuleiro[i][j]=' ';
     }
  }
  
}


    
int main(int argc, char *argv[])
{
   zerarMatriz();
   
   printf("Digite o nome do Jogador 1: ");
   fflush(stdin);
   scanf("%s",jog1);
   printf("Digite o simbolo usado pelo Jogador 1: ");
   fflush(stdin);
   scanf("%c",&simb_jog1);
   printf("Digite o nome do Jogador 2: ");
   fflush(stdin);
   scanf("%s",jog2);
   printf("Digite o simbolo usado pelo Jogador 2: ");
   fflush(stdin);
   scanf("%c",&simb_jog2);
   while(simb_jog1==simb_jog2)
   {
      printf("\nO simbolo deve ser diferente do jogador 1!!!\nDigite novamente o simbolo do jogador 2:");                            
      fflush(stdin);
      scanf("%c",&simb_jog2);
   }
   
   
   
   system("CLS");//limpa a tela
   imprime_tabuleiro(prox_jogador);
   system("PAUSE");
   return EXIT_SUCCESS;
}

16 Respostas

F

Boa noite pessoal.
Preciso de ajuda. Quando eu compilo o codigo aparecem vários erros. Mas entre os erros indicados no programa, seguem abaixos alguns deles. Gostaria de saber o que significam estas mensagens.

E:\Trabalho-Jogo da Velha\velha-04.cpp In function `void jogar(int)’:
18 E:\Trabalho-Jogo da Velha\velha-04.cpp ISO C++ forbids assignment of arrays
22 E:\Trabalho-Jogo da Velha\velha-04.cpp ISO C++ forbids assignment of arrays
47 E:\Trabalho-Jogo da Velha\velha-04.cpp expected unqualified-id before “while”

Grato.
Fabricio

W

Fabricio@8:
Boa noite pessoal.
Preciso de ajuda. Quando eu compilo o codigo aparecem vários erros. Mas entre os erros indicados no programa, seguem abaixos alguns deles. Gostaria de saber o que significam estas mensagens.

E:\Trabalho-Jogo da Velha\velha-04.cpp In function `void jogar(int)’:

47 E:\Trabalho-Jogo da Velha\velha-04.cpp expected unqualified-id before “while”

Grato.
Fabricio


Esses dois erros :
18 E:\Trabalho-Jogo da Velha\velha-04.cpp ISO C++ forbids assignment of arrays
22 E:\Trabalho-Jogo da Velha\velha-04.cpp ISO C++ forbids assignment of arrays
Ocorrem por causa do jeito que vc esta tentando copiar um array para outro array. O jeito que o seu codigo esta eh invalido:

nome_jog = jog1;

e

nome_jog = jog2;

O outro erro, 47 E:\Trabalho-Jogo da Velha\velha-04.cpp expected unqualified-id before “while”, ocorre porque vc esta fazendo um loop (while) fora da funcao jogar, vc colocou um extra colchete. (linha 33 do codigo abaixo).

void jogar (int jogador)
{
    int i = 0; //inicializando contador da estrutura while
    char nome_jog[20],simb_jog;
    
    if (jogador == 1){
       nome_jog = jog1;
       simb_jog = simb_jog1;
       prox_jogador=2;
    }else{
       nome_jog = jog2;
       simb_jog = simb_jog2;
       prox_jogador=1;
    }

	//Definindo o jogador da vez
    linha = 0; //inicializando valor da linha
    coluna = 0; //inicializando valor da coluna
    while (linha < 1 || linha > 3) //Controla se o valor ir a ser digitado certo
    {
        printf("\n\n Vez do Jogador %d. Escolha a Linha (1,2,3): ", nome_jog);
        scanf("%d", &linha); //lendo linha escolhida
        if (linha < 1 || linha > 3) printf("\nAviso: Linha invalida! Voce so pode escolher as linhas de 1 a 3.\n"); //Aviso de linha inválida, caso o jogador tenha escolhido linha menor que 1 ou maior que 3
    }
    
	while (coluna < 1 || coluna > 3) 
    {
        printf("\n\n Vez do Jogador %d. Escolha a Coluna (1,2,3): ", nome_jog);
        scanf("%d", &coluna); //lendo coluna escolhida
        if (coluna < 1 || coluna > 3) printf("\nAviso: Coluna invalida! Voce so pode escolher as colunas de 1 a 3.\n"); //Aviso de coluna inválida, caso o jogador tenha escolhido coluna menor que 1 ou maior que 3
    }
 
} /* ********** fecha a funcao *********  */

linha--;//Subtrair o indice digitado pelo usuario, para o indice comecar do 0 nao por 1
coluna--;////Subtrair o indice digitado pelo usuario, para o indice comecar do 0 nao por 1


while(i==0){
    if (tabuleiro[linha][coluna] == ' ') //se não estiver marcado
    { 
        tabuleiro[linha][coluna] = simb_jog; //marcar com o símbolo do jogador da vez
        i=1;
    } else { //se o campo escolhido  estivar marcado
        Printf ("Ja houve jogada nesta casa! Escolha outra casa.\n"); //aviso
    }
}   
    
imprime_tabuleiro(prox_jogador);
    
}
F

Desculpe pessoal,
Fiz algo errado no meu codigo, coloquei () ao inves de [] na matriz.

Vou consertar e ver se era isso que estava dando erro no meu codigo.

F

Terminei o código!!!
Agradeço a todos vocês pela ajuda, se não fosse por este excelente fórum eu não teria conseguido.
Gostaria de tirar uma dúvida. Precisei declarar uma variavel constante MAX_CHAR e criar um laço for, para definir o nome do jogador no meu vetor.
nome_jog = jog1;
nome_jog = jog2;

Teria outra maneira do programa reconhecer o nome do jogador sem esta variável??

Se alguém por acaso tiver uma sugestão de melhoria e quiser me ajudar, eu ficaria grato.
Este é o meu primeiro codigo em C, e aprendi muito com todos vocês.

Abraços
Fabricio

Segue abaixo o código completo:
#include <cstdlib>
#include <iostream>

using namespace std;

const int MAX_CHAR = 20; //Constante que define o tamanho do vetor de char
char tabuleiro[3][3];
char jog1[MAX_CHAR],jog2[MAX_CHAR],simb_jog1,simb_jog2,linha,coluna;
int prox_jogador = 1;//Controla o jogador da vez
int imprime_tabuleiro(int prox_jogador);
int status();
void jogar (int jogador);

int status()
{    /*
   retorna 0 se n?o h? ganhador;
   retorna 1 se o jogador 1 ganhar;
   retorna 2 se o jogador 2 ganhar;
   retorna 3 se houver empate;
   */
   //verifica se tem ganhador na linha 0
   if(tabuleiro[0][0]==simb_jog1 && tabuleiro[1][0]==simb_jog1 && tabuleiro[2][0]==simb_jog1) return 1;
   if(tabuleiro[0][0]==simb_jog2 && tabuleiro[1][0]==simb_jog2 && tabuleiro[2][0]==simb_jog2) return 2; 
   //verifica se tem ganhador na linha 1
   if(tabuleiro[0][1]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][1]==simb_jog1) return 1;
   if(tabuleiro[0][1]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][1]==simb_jog2) return 2;      
   //verifica se tem ganhador na linha 2
   if(tabuleiro[0][2]==simb_jog1 && tabuleiro[1][2]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
   if(tabuleiro[0][2]==simb_jog2 && tabuleiro[1][2]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;      
   //verifica se tem ganhador na coluna 0
   if(tabuleiro[0][0]==simb_jog1 && tabuleiro[0][1]==simb_jog1 && tabuleiro[0][2]==simb_jog1) return 1;
   if(tabuleiro[0][0]==simb_jog2 && tabuleiro[0][1]==simb_jog2 && tabuleiro[0][2]==simb_jog2) return 2;      
   //verifica se tem ganhador na coluna 1
   if(tabuleiro[1][0]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[1][2]==simb_jog1) return 1;
   if(tabuleiro[1][0]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[1][2]==simb_jog2) return 2;      
   //verifica se tem ganhador na coluna 2
   if(tabuleiro[2][0]==simb_jog1 && tabuleiro[2][1]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
   if(tabuleiro[2][0]==simb_jog2 && tabuleiro[2][1]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;      
   //verifica diagonal 1
   if(tabuleiro[0][0]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
   if(tabuleiro[0][0]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;      
   //verifica diagonal 2
   if(tabuleiro[0][2]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][0]==simb_jog1) return 1;
   if(tabuleiro[0][2]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][0]==simb_jog2) return 2;

   //verifica se empate
   if(tabuleiro[0][0]!=' ' && tabuleiro[0][1]!=' ' && tabuleiro[0][2]!=' ')
   {
      if(tabuleiro[1][0]!=' ' && tabuleiro[1][1]!=' ' && tabuleiro[1][2]!=' ')
      {
         if(tabuleiro[2][0]!=' ' && tabuleiro[2][1]!=' ' && tabuleiro[2][2]!=' ')
         {
            return 3; 
         }else{ 
            return 0;
         }
      }else{
            return 0;
      }
   }else{
          return 0; 
   }
}

int imprime_tabuleiro(int prox_jogador){
    printf("  1     2    3\n"); //aqui,são mostrados os números das colunas do tabuleiro
    printf("1 "); //aqui é mostrado o número da primeira linha
    printf("%c", tabuleiro[0][0]); //aqui é exibido o campo que cruza a linha 1 com a coluna 1
    printf("  | "); //caractere de divisão entre dois campos
    printf("%c", tabuleiro[0][1]); //aqui é exibido o campo que cruza a linha 1 com a coluna 2
    printf("  | "); //caractere de divisão entre dois campos
    printf("%c", tabuleiro[0][2]); //aqui é exibido o campo que cruza a linha 1 com a coluna 3
    printf("\n -----------\n2 "); //desenha linha horizontal e mostra número da linha 2
    printf("%c", tabuleiro[1][0]);; //aqui é exibido o campo que cruza a linha 2 com a coluna 1
    printf("  | "); //caractere de divisão entre dois campos
    printf("%c", tabuleiro[1][1]); //aqui é exibido o campo que cruza a linha 2 com a coluna 2
    printf("  | "); //caractere de divisão entre dois campos
    printf("%c", tabuleiro[1][2]); //aqui é exibido o campo que cruza a linha 2 com a coluna 3
    printf("\n -----------\n3 "); //desenha linha horizontal e mostra número da linha 3  
    printf("%c", tabuleiro[2][0]); //aqui é exibido o campo que cruza a linha 3 com a coluna 1
    printf("  | "); //caractere de divisão entre dois campos
    printf("%c", tabuleiro[2][1]); //aqui é exibido o campo que cruza a linha 3 com a coluna 2
    printf("  | "); //caractere de divisão entre dois campos
    printf("%c", tabuleiro[2][2]); //aqui é exibido o campo que cruza a linha 3 com a coluna 3
   
   if (status()==1){
      printf("\nStatus do jogo: Vencedor - %s\n",jog1);
   }     
   if (status()==2){
      printf("\nStatus do jogo: Vencedor - %s\n",jog2);
   }     
   if (status()==3){
      printf("\nStatus do jogo: Empate\n");
   }     
   if (status()==0){
      printf("\nStatus do jogo: Em andamento\n");
      printf("\nDigite sua posicao\n"); 
      jogar(prox_jogador);       
   } 
   printf("\n\nJOGO DA VELHA por Fabricio e Hudy\n\n Nao tem pra ninguem\n\n");
   return 0;
}

void jogar (int jogador)
{
    int i=0,j = 0; //inicializando contador da estrutura while
    char nome_jog[20],simb_jog;
    
    if (jogador == 1){
       for (j=0;j<MAX_CHAR;j++){//
           nome_jog[j]=jog1[j];    
       }
       simb_jog = simb_jog1;
       prox_jogador=2;
    }else{
        for (j=0;j<MAX_CHAR;j++){
           nome_jog[j]=jog2[j];    
       }
       simb_jog = simb_jog2;
       prox_jogador=1;
    }

            
                    
    while(i==0){
        //Definindo o jogador da vez
        linha = 0; //inicializando valor da linha
        coluna = 0; //inicializando valor da coluna
        while (linha < 1 || linha > 3) //Controla se o valor ir a ser digitado certo
        {
            printf("\n\n Vez do Jogador %s. Escolha a Linha (1,2,3): ", nome_jog);
            scanf("%d", &linha); //lendo linha escolhida
            if (linha < 1 || linha > 3) 
               printf("\nAviso: Linha invalida! Voce so pode escolher as linhas de 1 a 3.\n"); //Aviso de linha inválida, caso o jogador tenha escolhido linha menor que 1 ou maior que 3
        }
        while (coluna < 1 || coluna > 3) 
        {
            printf("\n\n Vez do Jogador %s. Escolha a Coluna (1,2,3): ", nome_jog);
            scanf("%d", &coluna); //lendo coluna escolhida
            if (coluna < 1 || coluna > 3) 
               printf("\nAviso: Coluna invalida! Voce so pode escolher as colunas de 1 a 3.\n"); //Aviso de coluna inválida, caso o jogador tenha escolhido coluna menor que 1 ou maior que 3
        }
 
        linha--;//Subtrair o indice digitado pelo usuario, para o indice comecar do 0 nao por 1
        coluna--;////Subtrair o indice digitado pelo usuario, para o indice comecar do 0 nao por 1
 
        if (tabuleiro[linha][coluna] == ' ') //se não estiver marcado
        { 
                      
           tabuleiro[linha][coluna] = simb_jog; //marcar com o símbolo do jogador da vez
           i=1;
        } else { //se o campo escolhido  estivar marcado
           printf ("Ja houve jogada nesta casa! Escolha outra casa.\n"); //aviso
        }
    }
    
    
    imprime_tabuleiro(prox_jogador);
    
}

void zerarMatriz()
{ 
  int i,j = 0;
  for(i=0;i<=3;i++){
     for(j=0;j<3;j++){
        tabuleiro[i][j]=' ';
     }
  }
  
}


    
int main(int argc, char *argv[])
{
   zerarMatriz();
   printf("\t\t---- -- -----\n\t\tJOGO DA VELHA\n\t\t---- -- -----\n\n");
   printf("Digite o nome do Jogador 1: ");
   fflush(stdin);
   scanf("%s",jog1);
   printf("Digite o simbolo usado pelo Jogador 1: ");
   fflush(stdin);
   scanf("%c",&simb_jog1);
   printf("Digite o nome do Jogador 2: ");
   fflush(stdin);
   scanf("%s",jog2);
   printf("Digite o simbolo usado pelo Jogador 2: ");
   fflush(stdin);
   scanf("%c",&simb_jog2);
   
            printf("INICIAR JOGO: ");
            system("PAUSE");
            system("cls");		
   
 
   	
   while(simb_jog1==simb_jog2)
   {
      printf("\nO simbolo deve ser diferente do jogador 1!!!\nDigite novamente o simbolo do jogador 2:");                            
      fflush(stdin);
      scanf("%c",&simb_jog2);
   }
   
   
   
   system("CLS");//limpa a tela
   imprime_tabuleiro(prox_jogador);
   system("PAUSE");
   /*
   return EXIT_SUCCESS;
   */
}
F

Boa noite pessoal,
Fiz uma segunda opção do codigo. Nesse arquivo ele está verificando somente se o usuário digitar o número 1, falta de 2 a 9.
Alguem pode me dar uma ideía de como fazer???

Grato.

#include <cstdlib>
#include <iostream>

using namespace std;

char tabuleiro[3][3];
char jog1[20],jog2[20],simb_jog1,simb_jog2,jogada,novamente;
int vez,i,j;

int status()
{    /*
   retorna 0 se n?o h? ganhador;
   retorna 1 se o jogador 1 ganhar;
   retorna 2 se o jogador 2 ganhar;
   retorna 3 se houver empate;
   */
   //verifica se tem ganhador na linha 0
   if(tabuleiro[0][0]==simb_jog1 && tabuleiro[1][0]==simb_jog1 && tabuleiro[2][0]==simb_jog1) return 1;
   if(tabuleiro[0][0]==simb_jog2 && tabuleiro[1][0]==simb_jog2 && tabuleiro[2][0]==simb_jog2) return 2; 
   //verifica se tem ganhador na linha 1
   if(tabuleiro[0][1]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][1]==simb_jog1) return 1;
   if(tabuleiro[0][1]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][1]==simb_jog2) return 2;      
   //verifica se tem ganhador na linha 2
   if(tabuleiro[0][2]==simb_jog1 && tabuleiro[1][2]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
   if(tabuleiro[0][2]==simb_jog2 && tabuleiro[1][2]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;      
   //verifica se tem ganhador na coluna 0
   if(tabuleiro[0][0]==simb_jog1 && tabuleiro[0][1]==simb_jog1 && tabuleiro[0][2]==simb_jog1) return 1;
   if(tabuleiro[0][0]==simb_jog2 && tabuleiro[0][1]==simb_jog2 && tabuleiro[0][2]==simb_jog2) return 2;      
   //verifica se tem ganhador na coluna 1
   if(tabuleiro[1][0]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[1][2]==simb_jog1) return 1;
   if(tabuleiro[1][0]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[1][2]==simb_jog2) return 2;      
   //verifica se tem ganhador na coluna 2
   if(tabuleiro[2][0]==simb_jog1 && tabuleiro[2][1]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
   if(tabuleiro[2][0]==simb_jog2 && tabuleiro[2][1]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;      
   //verifica diagonal 1
   if(tabuleiro[0][0]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
   if(tabuleiro[0][0]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;      
   //verifica diagonal 2
   if(tabuleiro[0][2]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][0]==simb_jog1) return 1;
   if(tabuleiro[0][2]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][0]==simb_jog2) return 2;
   //verifica se empate
   if(tabuleiro[0][0]!=' ' && tabuleiro[1][0]!=' ' && tabuleiro[2][0]!=' ')
   {
      if(tabuleiro[0][1]!=' ' && tabuleiro[1][1]!=' ' && tabuleiro[2][1]!=' ')
      {
         if(tabuleiro[0][1]!=' ' && tabuleiro[1][1]!=' ' && tabuleiro[2][1]!=' ')
         {
            return 3; 
         }
         else return 0;
      }
      else return 0;
   }
   else return 0;
}

void imprime_tabuleiro()
{
   printf(" %c | %c | %c\n",tabuleiro[0][0],tabuleiro[1][0],tabuleiro[2][0]);
   printf("---+---+---\n");
   printf(" %c | %c | %c\n",tabuleiro[0][1],tabuleiro[1][1],tabuleiro[2][1]);
   printf("---+---+---\n");     
   printf(" %c | %c | %c\n",tabuleiro[0][2],tabuleiro[1][2],tabuleiro[2][2]);
   if (status()==1)
   {
      printf("\nStatus do jogo: Vencedor - %s\n",jog1);
   }     
   if (status()==2)
   {
      printf("\nStatus do jogo: Vencedor - %s\n",jog2);
   }     
   if (status()==3)
   {
      printf("\nStatus do jogo: Empate\n");
   }     
   if (status()==0)
   {
      printf("\nStatus do jogo: Em andamento\n");        
      if (vez==1)
      {
         printf("\nJogador: %s\n",jog1);
      }
      if (vez==2)
      {
         printf("\nJogador: %s\n",jog2);
      }   
   }     
}

int main(int argc, char *argv[])
{
   printf("Digite o nome do Jogador 1: ");
   fflush(stdin);
   scanf("%s",jog1);
   printf("Digite o simbolo usado pelo Jogador 1: ");
   fflush(stdin);
   scanf("%c",&simb_jog1);
   printf("Digite o nome do Jogador 2: ");
   fflush(stdin);
   scanf("%s",jog2);
   printf("Digite o simbolo usado pelo Jogador 2: ");
   fflush(stdin);
   scanf("%c",&simb_jog2);   
   while(simb_jog1==simb_jog2)
   {
      printf("\nO simbolo deve ser diferente do jogador 1!!!\nDigite novamente o simbolo do jogador 2:");                            
      fflush(stdin);
      scanf("%c",&simb_jog2);
   }   
   novamente='1';
   while(novamente=='1')
   {    
      //apaga o tabuleiro
      for(i=0;i<3;i++)
      {
         for(j=0;j<3;j++)
         {
            tabuleiro[i][j]=' ';
         }       
      }
      vez=1;
      system("CLS");
      while(status()==0)
      {
         imprime_tabuleiro();
         fflush(stdin);      
         scanf("%c",&jogada);
         system("CLS");      
         if (jogada=='1')
         {
            if(tabuleiro[0][2]!=' ')
            {                
               printf("\nPosicao ja marcada no tabuleiro!!!\n\n");                                  
            }
            else
            {
               if (vez==1)
               {
                  tabuleiro[0][2]=simb_jog1;
                  vez=2;
               }
               else
               {
                  tabuleiro[0][2]=simb_jog2;
                  vez=1;
               }
            }
         } 
       }
       imprime_tabuleiro();
       printf("\nPara continuar jogando pressione 1 ou qualquer tecla para sair");       
       fflush(stdin);      
       scanf("%c",&novamente);
    }    
    return EXIT_SUCCESS;
}
F

Boa Tarde pessoal,
Como eu faço para declara um numero digitado no teclado numerico para cada posição da matriz?
Por exemplo: Eu gostaria de fazer um programa que utilizasse o teclado numerico de 1 a 9 e conforme o usuario vai digitando o numero será preenchida automaticamente com o seu simbolo no espaço da matriz referente aquele numero.

Alguem poderia me dar uma ajudinha, eu realmente estou precisando:?:

Grato :smiley:

G

Oi Fabricio, tudo bem?

Eu acredito que voce deveria solicitar ao usuário a posição i,j da matriz, não?

[]'s

F

getAdicted,

Obrigado por reponder meu post.
Mas é exatamente isto que não estou entendo…
De acordo com meu codigo é esta parte que faz a matriz imprimir o numero digitado, mas e agora como eu faço para o resto??

Grato

scanf("%c",&jogada); system("CLS"); if (jogada=='2') { if(tabuleiro[1][2]!=' ') { printf("\nPosicao ja marcada no tabuleiro!!!\n\n"); } else { if (vez==1) { tabuleiro[1][2]=simb_jog1; vez=2; } else { tabuleiro[1][2]=simb_jog2; vez=1; } } } }

E

Fabricio@8:
Boa Tarde pessoal,
Como eu faço para declara um numero digitado no teclado numerico para cada posição da matriz?
Por exemplo: Eu gostaria de fazer um programa que utilizasse o teclado numerico de 1 a 9 e conforme o usuario vai digitando o numero será preenchida automaticamente com o seu simbolo no espaço da matriz referente aquele numero.

Alguem poderia me dar uma ajudinha, eu realmente estou precisando:?:

Grato :smiley:

O C++ puro (sem usar alguma API do sistema operacional) não prevê acesso direto a essas teclas, como você quer fazer. Como você deve ter percebido, o método get ( http://www.cplusplus.com/reference/iostream/istream/get/ ) espera que você tecle um ENTER (ou no caso do Unix/Linux, também aceita um Ctrl+D ) para ler os caracteres, em vez de retornar imediatamente a tecla para você.

Você está criando seu programa para Unix/Linux ou para Windows?

E

(Agora li melhor seu programa, você está usando system (“CLS”) e system (“PAUSE”), o que indica que você está rodando seu programa no Windows)

F

entanglement,
É Winddows sim.

Gostaria de saber como eu faço para continuar o jogo??

E

Procure por getch ou getche .

F

Desculpe amigo, mas eu ainda não aprendi este comando.
Voce poderia me dar um exemplo de como utiliza-lo para me ensinar, por favor??

Grato.

E

Não sei se seu compilador tem o header <conio.h>

Se tiver, então ele tem um método

int getch();

que retorna o caracter digitado.

Por exemplo, se você digitar o algarismo 0 no teclado normal, ele lhe retorna o valor inteiro 48 ou ‘0’.

F

[quote]Não sei se seu compilador tem o header [code]

Então amigo, o problema é este. Precisa ter este compilador? Agora não sei.

Mas obrigado pela explicação de como utlilizar getch.

Fabricio

F

Bom dia pessoal,
Ja terminei o meu codigo e estou fazendo umas melhorias no meu programa e estou precisando de uma ajuda.
No meu post nº6 coloquei um codigo e eu gostaria de saber como eu faço para a matriz imprimir os numeros e quando o usuario digitar o numero substitui o numero pelo o simbolo do usuario.
Fiz um teste aqui mas ele imprimi os numeros, mas não substitui pelo simbolo. Fica o simbolo e o numero dentro da matriz.

7 8 9
4 5 6
1 2 3

Me ajuda pessoal, agora falta pouco.
Grato

Criado 18 de novembro de 2012
Ultima resposta 22 de nov. de 2012
Respostas 16
Participantes 4