Ir ao conteúdo

Posts recomendados

Postado

Olá!
Estava tentando fazer um jogo da velha, mas estou com um problema para determinar o vencedor: o código lê as entradas mas sempre retorna empate. Tentei fazer com base em outro código que vi e não consigo identificar o que fiz de errado. Alguém pode me esclarecer isso? Obrigado!

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

char mat[3][3];

int fim = 0;
int mov = 0;
char ent;

void inicializa_matriz()
{
    int i, j;

    for(i = 0; i < 3; i++)
        for(j = 0; j < 3; j++)
            mat[i][j]= ' ';
}

void mostrar_tabuleiro()
{
    int i, x;
  
    x = 0;

    system("clear");
    printf("   0    1    2   ");

    while(x < 3)
    { 
        i = 0;
        printf("\n%d", x);
        while(i < 3)
        {
            if(i == 1)
            printf("| %c |", mat[x][i]);
            else  
            printf(" %c ", mat[x][i]);
        
        i++;
        }

        printf("\n");

        if(x < 2)
        printf("  ____________");

        x++;
    }
}

void ler_jogada1()
{
    int x, y;
    
    printf("Jogador 1 (X) - Insira linha e coluna: ");
    scanf("%d %d", &x, &y);
    
    if (mat[x][y] != ' ') 
    {
        printf("\nJogada invalida.\n\n");
        ler_jogada1();
    }
    else
    {
        mat[x][y] = 'X';
    }
}

void ler_jogada2()
{
    int x, y;
    
    printf("Jogador 2 (O) - Insira linha e coluna: ");
    scanf("%d %d", &x, &y);

    if (mat[x][y] != ' ')
    {
        printf("\nJogada invalida.\n\n");
        ler_jogada2();   
    }
    else 
    {
        mat[x][y] = 'O';
    }
    
}

char verifica_vit()
{
    int i;

    for (i = 0; i < 3; i++)
    {
        // verifica linhas
        if (mat[i][0] == mat[i][1] && mat[i][0] == mat[i][2])
            return mat[i][0];

        // verifica colunas
        if (mat[0][i] == mat[1][i] && mat[0][i] == mat[2][i])
            return mat[0][i];
    }

    // verifica diagonal principal
    if (mat[0][0] == mat[1][1] && mat[1][1] == mat[2][2])
        return mat[0][0];
        
    // verifica diagonal secundaria
    if (mat[0][2] == mat[1][1] && mat[1][1] == mat[2][0])
        return mat[0][2];
    
    // retorna ' ' se nenhum dos comandos funcionar
    return ' ';
    
}

int main()
{
    int i, j;
    char resultado = ' ';

    printf("## JOGO DA VELHA ##\n");

    printf("Jogador 1 - X\nJogador 2 - O\n");

    inicializa_matriz();
    mostrar_tabuleiro();
     
    while(fim == 0)
    {
        mostrar_tabuleiro();
        ler_jogada1();
        mov++;

        if(mov == 9)
            break;
        
        resultado = verifica_vit();

        if(resultado != ' ')
            break;

        mostrar_tabuleiro();
        ler_jogada2();
        mov++;

        if(mov == 9)
            break;
        
        resultado = verifica_vit();

        if(resultado != ' ')
            break;
    }
 
    char resultado1 = verifica_vit;

    mostrar_tabuleiro();

    if (resultado1 == 'X')
    {
        printf("Jogador 1 (X) ganhou!\n\n");
    }
    else if (resultado1 == 'O')
    {
        printf("Jogador 2 (O) ganhou!\n\n");
    }
    else
    {    
        printf("Empate.\n\n");
    }
    
  return 0;
}

 

  • Curtir 1
Postado

 

char resultado1 = verifica_vit;

Aqui, tu esqueceu do parênteses no final 'verifica_vit()'. O programa está entendendo que resultado1 = uma variável qualquer chamada 'verifica_vit' que não foi inicializada e deve ter valor nulo ou algo do tipo ao invés da função, por isso está pulando pro último else que é empate quando não vale nem 'X' nem 'O'.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!