Ir para conteúdo
Fórum Script Brasil
  • 0

Jogo da Velha


Thiago Serrilho

Pergunta

Fuçando nos códigos que tenho feito aqui achei um jogo da velha que eu estava fazendo e que está abandonado a um tempão. Ele aparentemente funciona "correntemente", mas tem um erro no código que eu não consigo achar. O erro está nas jogadas na posição Linha 3 Coluna 3. Na primeira jogada se for informado esses valores para linha e coluna ele irá dizer que a jogada já foi realizada.

#include<stdio.h>
 #include<stdlib.h>
 /*
    PROGRAMA........: JOGO DA VELHA V. 1.0
    CRIADO EM.......: 11/11/2007
    AUTOR...........: THIAGO CESAR SERRILHO
    E-MAIL..........: webserrilho@gmail.com / webserrilho@hotmail.com
    DESCRIÇÃO.......: TRADICIONAL JOGO DA VELHA ONDE O OBJETIVO DO JOGO É FAZER
                      UMA SEQUENCIA DE "X" OU DE "O". O JOGADOR DEVE INFORMAR O
                      NUMERO DA LINHA E DA COLUNA ONDE DESEJA FAZER A JOGADA.
 */
 main()
 {
     char matriz[3][3], valor, jog1[60], jog2[60], resp;
     int linha=0, coluna=0, i=0, j=0, cont=1, n=0, jogada, verifica[3][3];
        
     do
     {
         fflush(stdin);  
         printf("           JOGO DA VELHA V. 1.0\n");
         printf("           ==== == ===== == ===\n\n\n\n");
         printf("INFORME O NOME DO JOGADOR 1: "); gets(jog1); 
         printf("INFORME O NOME DO JOGADOR 2: "); gets(jog2);
         printf("===============================================================\n");
         printf("JOGADOR 1: %s = \"X\"\n", jog1);
         printf("JOGADOR 2: %s = \"O\"\n", jog2);
         printf("===============================================================\n");
         printf("PRESSIONE \"ENTER\" PARA CONTINUAR..."); getchar();
         system("cls");
         
         for(i = 1; i <= 3; i++)
         {
             for(j = 1; j <= 3; j++)
             {
                 matriz[i][j]  =' '; //esvazia os vetores.
                 verifica[i][j]=' ';
             }
        }
        
        for(jogada = 1; jogada <= 9; jogada++)
        {
             printf("\n");
             for(i = 1; i <= 3; i++)
             {
                 for(j = 1; j <= 3; j++)
                 {
                     //controla o preenchimento dos valores.
                     if(matriz[i][j] == 'X' || matriz[i][j] == 'O')
                     printf(" %2c  ",matriz[i][j]); //mostra os valores colocados.
                     else
                     printf("     "); //deixa em branco espaços ainda não informados.
                     if(j <= 2)
                     printf("%c", -77); //desenha as colunas.
                 }
                 printf("\n");
                 if(i <= 2) //controla a exibição da última linha do desenho.
                 for(cont = 1; cont <= 15; cont++)
                 {
                     printf("%c", -60); //desenha as linhas.
                     if(cont == 5 || cont == 10) 
                     printf("%c", -59); //coloca o caractere '+' na junção das linhas e colunas.
                 }
                 printf("\n");
             }
             printf("===============================================================\n\n");
             //VERIFICA LINHAS.
             if(matriz[1][1]=='X' && matriz[1][2]=='X' && matriz[1][3]=='X'){ printf("RESULTADO: >> \"X\" VENCEU <<\n"); goto FIM; }
             if(matriz[2][1]=='X' && matriz[2][2]=='X' && matriz[2][3]=='X'){ printf("RESULTADO: >> \"X\" VENCEU <<\n"); goto FIM; }
             if(matriz[3][1]=='X' && matriz[3][2]=='X' && matriz[3][3]=='X'){ printf("RESULTADO: >> \"X\" VENCEU <<\n"); goto FIM; }
             if(matriz[1][1]=='O' && matriz[1][2]=='O' && matriz[1][3]=='O'){ printf("RESULTADO: >> \"O\" VENCEU <<\n"); goto FIM; }
             if(matriz[2][1]=='O' && matriz[2][2]=='O' && matriz[2][3]=='O'){ printf("RESULTADO: >> \"O\" VENCEU <<\n"); goto FIM; }
             if(matriz[3][1]=='O' && matriz[3][2]=='O' && matriz[3][3]=='O'){ printf("RESULTADO: >> \"O\" VENCEU <<\n"); goto FIM; }            
             //VERIFICA COLUNAS.
             if(matriz[1][1]=='X' && matriz[2][1]=='X' && matriz[3][1]=='X'){ printf("RESULTADO: >> \"X\" VENCEU <<\n"); goto FIM; }
             if(matriz[1][2]=='X' && matriz[2][2]=='X' && matriz[3][2]=='X'){ printf("RESULTADO: >> \"X\" VENCEU <<\n"); goto FIM; }
             if(matriz[1][3]=='X' && matriz[2][3]=='X' && matriz[3][3]=='X'){ printf("RESULTADO: >> \"X\" VENCEU <<\n"); goto FIM; }
             if(matriz[1][1]=='O' && matriz[2][1]=='O' && matriz[3][1]=='O'){ printf("RESULTADO: >> \"O\" VENCEU <<\n"); goto FIM; }
             if(matriz[1][2]=='O' && matriz[2][2]=='O' && matriz[3][2]=='O'){ printf("RESULTADO: >> \"O\" VENCEU <<\n"); goto FIM; }
             if(matriz[1][3]=='O' && matriz[2][3]=='O' && matriz[3][3]=='O'){ printf("RESULTADO: >> \"O\" VENCEU <<\n"); goto FIM; }
             //VERIFICA DIAGONAIS.
             if(matriz[1][1]=='X' && matriz[2][2]=='X' && matriz[3][3]=='X'){ printf("RESULTADO: >> \"X\" VENCEU <<\n"); goto FIM; }
             if(matriz[1][3]=='X' && matriz[2][2]=='X' && matriz[3][1]=='X'){ printf("RESULTADO: >> \"X\" VENCEU <<\n"); goto FIM; }
             if(matriz[1][1]=='O' && matriz[2][2]=='O' && matriz[3][3]=='O'){ printf("RESULTADO: >> \"O\" VENCEU <<\n"); goto FIM; }
             if(matriz[1][3]=='O' && matriz[2][2]=='O' && matriz[3][1]=='O'){ printf("RESULTADO: >> \"O\" VENCEU <<\n"); goto FIM; }

             printf("JOGADA N. %d\n", jogada);
             if(jogada % 2 != 0) //Impar = jogador 1, Par = jogador 2.
             {
                 printf("VEZ DO JOGADOR 1: %s = \"X\"\n", jog1); valor= 'X';
             }
             else
             {
                 printf("VEZ DO JOGADOR 2: %s = \"O\"\n", jog2); valor= 'O';
             }
             printf("===============================================================\n");
             VOLTA:;
             do
             {
                 printf("INFORME O NUMERO DA LINHA.: "); scanf("%d",&linha);
                 if(linha > 3) printf("O numero da linha não pode ser maior que 3.\n");
                 if(linha < 1) printf("O numero da linha não pode ser menor que 1.\n");
             }while(linha > 3 || linha < 1);
             do
             {
                 printf("INFORME O NUMERO DA COLUNA: "); scanf("%d",&coluna);
                 if(coluna > 3) printf("O numero da coluna não pode ser maior que 3.\n");
                 if(coluna < 1) printf("O numero da coluna não pode ser menor que 1.\n");
             }while(coluna > 3 || coluna < 1);
             //verifica se a jogada já foi feita
             if(verifica[linha][coluna]==1)
             {
                 printf("Esta jogada já foi feita\n"); goto VOLTA;
             }
             else
             {
                 //coloca valor 1 em jogadas já feitas
                 matriz[linha][coluna]=valor; // coloca o valor no jogo.
                 verifica[linha][coluna]=1;
             }
             printf("\n");
             if(jogada < 8) system("cls");
         }
         printf("===============================================================\n");
         printf("\nRESULTADO: >> O JOGO EMPATOU <<\n");
         FIM:;
         printf("\n===============================================================\n");
         printf("DESEJA JOGAR NOVAMENTE (S/N): "); scanf("%s",&resp);
         system("cls"); //Limpa a tela para recomeçar o jogo.
     }while(resp=='s' || resp=='S');    
 }

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá denovo, Thiago.

No seu código do gerador de jogos da Sena eu havia reparado em algo que acabou sendo uma solução prática. Entretanto, vendo esse seu código me parece que você esqueceu que todo vetor começano elemento 0 e não no 1.

Portanto:

int vetor[3];
criará um vetor de inteiros con três elementos, sendo eles:
vetor[0]
vetor[1]
vetor[2]
ao tenta acessar vetor[3] você estará acessando uma parte da memória que não está alocada para o vetor e isso pode ser perigoso, embora em alguns casos seja muito útil e legal para brincar com a memória. Seu código aqui:
for(i = 1; i <= 3; i++)
         {
             for(j = 1; j <= 3; j++)
             {
                 matriz[i][j]  =' '; //esvazia os vetores.
                 verifica[i][j]=' ';
             }
        }
e aqui:
for(jogada = 1; jogada <= 9; jogada++)
        {
             printf("\n");
             for(i = 1; i <= 3; i++)
             {
                 for(j = 1; j <= 3; j++)
                 {
Estão fazendo isso. Para arrumar seu código de maneira prática, mude:
char matriz[3][3]
para:
char matriz[4][4]

Compilei e funcionou direitinho.

Até mais!

Editado por == Douplus ==
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...