Ir ao conteúdo

Posts recomendados

Postado

Pessoal o prof passou um exercício mais empaquei não consigo mais ir além.

poderiam me dar uma ajudinha.

 

b) controle da vez de jogar: 'X' ou 'O', dentro do loop do jogo;
c) verificação do ganhador: 'X', 'O' ou deu velha, chamando uma função com o nome 'confereVencedor' no loop do jogo; fiz mais não consigo colocar DEU VELHA
e) verificação se o jogador está quase ganhando, chamando uma função com o nome 'quaseGanhando' no loop do jogo. (Exemplo 1='X' 2='X' 3='')
f) baseado na questão anterior, sugira a próxima jogada;
quaseGanhando - deve receber dois parâmetros por referência e onde deve ser a sugestão de linha e coluna 

#include <stdio.h>
#include <stdlib.h>
char jogo[3][3];
int ganhou=0;

//verificação do ganhador: 'X', 'O' ou deu velha, chamando uma função com o nome 'confereVencedor' no loop do jogo;

void conferevencedor(){
    
     // alguém ganhou por linha
            if(jogo[0][0] == '0' && jogo[0][1] == '0' && jogo[0][2] == '0' ||
               jogo[1][0] == '0' && jogo[1][1] == '0' && jogo[1][2] == '0' ||
               jogo[2][0] == '0' && jogo[2][1] == '0' && jogo[2][2] == '0'){
                printf("\O JOGADOR 0 GANHOU POR LINHA\n");
                ganhou = 1;
            }

            if(jogo[0][0] == 'X' && jogo[0][1] == 'X' && jogo[0][2] == 'X' ||
               jogo[1][0] == 'X' && jogo[1][1] == 'X' && jogo[1][2] == 'X' ||
               jogo[2][0] == 'X' && jogo[2][1] == 'X' && jogo[2][2] == 'X'){
                printf("\O JOGADOR X GANHOU POR LINHA\n");
                ganhou = 1;
            }

            // alguém ganhou por colunaint
            if(jogo[0][0] == '0' && jogo[1][0] == '0' && jogo[2][0] == '0' ||
               jogo[0][1] == '0' && jogo[1][1] == '0' && jogo[2][1] == '0' ||
               jogo[0][2] == '0' && jogo[1][2] == '0' && jogo[2][2] == '0'){
                printf("\O JOGADOR 0 GANHOU POR COLUNA\n");
                ganhou = 1;
            }

            if(jogo[0][0] == 'X' && jogo[1][0] == 'X' && jogo[2][0] == 'X' ||
               jogo[0][1] == 'X' && jogo[1][1] == 'X' && jogo[2][1] == 'X' ||
               jogo[0][2] == 'X' && jogo[1][2] == 'X' && jogo[2][2] == 'X'){
                printf("\O JOGADOR X GANHOU POR LINHA\n");
                ganhou = 1;
            }

            // alguém ganhou na diagonal principal
            if(jogo[0][0] == '0' && jogo[1][1] == '0' && jogo[2][2] == '0'){
                printf("\O JOGADOR 0 GANHOU POR DIAGONAL\n");
                ganhou = 1;
            }

            if(jogo[0][0] == 'X' && jogo[1][1] == 'X' && jogo[2][2] == 'X'){
                printf("\O JOGADOR X GANHOU POR DIAGONAL\n");
                ganhou = 1;
            }

            // alguém ganhou na diagonal secundária
            if(jogo[0][2] == '0' && jogo[1][1] == '0' && jogo[2][0] == '0'){
                printf("\O JOGADOR 0 GANHOU POR DIAGONAL SECUNDARIA\n");
                ganhou = 1;
            }

            if(jogo[0][2] == 'X' && jogo[1][1] == 'X' && jogo[2][0] == 'X'){
                printf("\O JOGADOR X GANHOU POR DIAGONAL SECUNDARIA\n");
                ganhou = 1;
            }    
            }
        

int main(){

    // variaveis
    int l=0;
    int c=0;
    int linha=0;
    int coluna=0;
    int jogador=0;
    int jogadas=0; 
    int opcao=0;
    

     do{
      
       jogador = 1;
        
        // como inicializar nossa estrutura de dados?
        for(l = 0; l < 3; l++){
            for(c = 0; c < 3; c++){
                jogo[l][c] = ' ';
            }
        }

        while ( jogadas < 9){ // repete até alguém ganhar ou atingir 9 jogadas
            // imprimir jogo
            printf("\n\n\t 0   1   2\n\n");
            for(l = 0; l < 3; l++){
                for(c = 0; c < 3; c++){
                    if(c == 0)
                        printf("\t");
                    printf(" %c ", jogo[l][c]);
                    if(c < 2)
                        printf("|");
                    if(c == 2)
                        printf("  %d", l);
                }
                if(l < 2)
                    printf("\n\t-----------");
                printf("\n");
            }

            // ler coordenadas
            do{
                printf("\n\JOGADOR 1 = 0\nJOGADOR 2 = X\n");
                printf("\nJOGADOR %d: Digite a linha: ", jogador);
                scanf("%d", &linha);
                
                printf("JOGADOR %d: Digite a coluna: ", jogador);
                scanf("%d", &coluna);
            }while(linha < 0 || linha > 2 || coluna < 0 || coluna > 2 || jogo[linha][coluna] != ' ');

            // salvar coordenadas
            if(jogador == 1){
                jogo[linha][coluna] = '0';
                jogador++;
            }
            else{
                jogo[linha][coluna] = 'X';
                jogador = 1;
            }
            jogadas++;

           conferevencedor();
           
        }
    
     }while(ganhou=0);
       
    
    
    return 0;
}

 

  • Obrigado 1
Postado

@Silvana Roden Seria melhor você tratar tudo isso como estados do seu programa.

No caso você retornaria para a função principal qual é o estado o seu programa está nesse momento.

 

Exemplo

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

#define Q_LINHAS 3
#define Q_COLUNAS 3

#define Q_JOGADAS_VITORIA 3

enum estados_jogo {
    NINGUEM_GANHOU = 0,
    VITORIA_CRUZ,
    VITORIA_CIRCULO,
    DEU_VELHA,
    Q_ESTADOS_JOGO
};

enum objetos_jogo {
    OBJ_VAZIO = 0,
    OBJ_CRUZ,
    OBJ_CIRCULO,
    OBJ_QUANTIDADE
};


int ganhou=0;

void
inicializaTabuleiro(enum objetos_jogo tabuleiro[Q_LINHAS][Q_COLUNAS])
{
    unsigned short int
        linhas, colunas;
    
    for (linhas = 0; linhas < Q_LINHAS; linhas++) {
        for (colunas = 0; colunas < Q_COLUNAS; colunas++) {
            tabuleiro[linhas][colunas] = OBJ_VAZIO;
        }
    }
}

//verificação do ganhador: 'X', 'O' ou deu velha, chamando uma função com o nome 'confereVencedor' no loop do jogo;

enum estados_jogo
confereVencedor(enum objetos_jogo tabuleiro[Q_LINHAS][Q_COLUNAS])
{
    enum objetos_jogo objeto_atual;
    short int
        linhas, colunas,
        contador = 0;
    
    /* Checa linhas */
    for (linhas = 0; linhas < Q_LINHAS; linhas++) {
        objeto_atual = tabuleiro[linhas][0];
        contador = 1;
        for (colunas = 1; colunas < Q_COLUNAS; colunas++) {
            if (tabuleiro[linhas][colunas] == objeto_atual) {
                contador++;
            }
        }
        
        if (contador == Q_JOGADAS_VITORIA && objeto_atual != OBJ_VAZIO) {
            if (objeto_atual == OBJ_CRUZ) {
                return(VITORIA_CRUZ);
            } else if (objeto_atual == OBJ_CIRCULO) {
                return(VITORIA_CIRCULO);
            }
        }
    }
    
    /* Checa colunas */
    for (colunas = 0; colunas < Q_COLUNAS; colunas++) {
        objeto_atual = tabuleiro[0][colunas];
        contador = 1;
        for (linhas = 1; linhas < Q_LINHAS; linhas++) {
            if (tabuleiro[linhas][colunas] == objeto_atual) {
                contador++;
            }
        }
        
        if (contador == Q_JOGADAS_VITORIA && objeto_atual != OBJ_VAZIO) {
            if (objeto_atual == OBJ_CRUZ) {
                return(VITORIA_CRUZ);
            } else if (objeto_atual == OBJ_CIRCULO) {
                return(VITORIA_CIRCULO);
            }
        }
    }
    
    /* Checa diagonais */
    contador = 1;
    objeto_atual = tabuleiro[0][0];
    for (colunas = 1, linhas = 1; colunas < Q_COLUNAS && linhas < Q_LINHAS; colunas++, linhas++) {
        if (objeto_atual == tabuleiro[linhas][colunas]) {
            contador++;
        }
    }
    if (contador == Q_JOGADAS_VITORIA && objeto_atual != OBJ_VAZIO) {
        if (objeto_atual == OBJ_CRUZ) {
            return(VITORIA_CRUZ);
        } else if (objeto_atual == OBJ_CIRCULO) {
            return(VITORIA_CIRCULO);
        }
    }
    
    contador = 1;
    objeto_atual = tabuleiro[0][Q_COLUNAS-1];
    for (linhas = 1, colunas = Q_COLUNAS-2; linhas < Q_LINHAS || colunas > 0; linhas++, colunas--) {
        if (objeto_atual == tabuleiro[linhas][colunas]) {
            contador++;
        }
    }
    if (contador == Q_JOGADAS_VITORIA && objeto_atual != OBJ_VAZIO) {
        if (objeto_atual == OBJ_CRUZ) {
            return(VITORIA_CRUZ);
        } else if (objeto_atual == OBJ_CIRCULO) {
            return(VITORIA_CIRCULO);
        }
    }
    
    contador = 0;
    for (linhas = 0; linhas < Q_LINHAS; linhas++) {
        for (colunas = 0; colunas < Q_COLUNAS; colunas++) {
            if (tabuleiro[linhas][colunas] != OBJ_VAZIO) {
                contador++;
            }
        }
    }
    if (contador == Q_LINHAS*Q_COLUNAS) {
        return(DEU_VELHA);
    }
    
    return(NINGUEM_GANHOU);
}

void
mostraTabuleiro(enum objetos_jogo tabuleiro[Q_LINHAS][Q_COLUNAS])
{
    unsigned short int
        linhas, colunas;

    printf("\n\n\t");
    for (colunas = 0; colunas < Q_COLUNAS; colunas++) {
        printf("%hu    ", colunas);
    }
    printf("\n");
    for (linhas = 0; linhas < Q_LINHAS; linhas++) {
        printf("\t");
        for (colunas = 0; colunas < Q_COLUNAS; colunas++) {
            switch (tabuleiro[linhas][colunas]) {
                case OBJ_VAZIO:
                    printf("   ");
                    break;
                
                case OBJ_CRUZ:
                    printf(" X ");
                    break;
                
                case OBJ_CIRCULO:
                    printf(" O ");
                    break;

            }
            
            if (colunas < Q_COLUNAS-1) {
                printf("|");
            }
        }
        printf("  %hu\n", linhas);
    }
}

int main(){

    // variaveis
    int l=0;
    int c=0;
    int linha=0;
    int coluna=0;
    int jogador=0;
    int jogadas=0; 
    int opcao=0;
    
    enum objetos_jogo tabuleiro[Q_LINHAS][Q_COLUNAS];

    do{
      
       jogador = 1;
        
        // como inicializar nossa estrutura de dados?
        inicializaTabuleiro(tabuleiro);
        /*for(l = 0; l < 3; l++){
            for(c = 0; c < 3; c++){
                jogo[l][c] = ' ';
            }
        }*/

        while ( jogadas < 9){ // repete até alguém ganhar ou atingir 9 jogadas
            // imprimir jogo
            mostraTabuleiro(tabuleiro);
            /*printf("\n\n\t 0   1   2\n\n");
            for(l = 0; l < 3; l++){
                for(c = 0; c < 3; c++){
                    if(c == 0)
                        printf("\t");
                    printf(" %c ", jogo[l][c]);
                    if(c < 2)
                        printf("|");
                    if(c == 2)
                        printf("  %d", l);
                }
                if(l < 2)
                    printf("\n\t-----------");
                printf("\n");
            }
            */

            // ler coordenadas
            do{
                printf("\nJOGADOR 1 = 0\nJOGADOR 2 = X\n");
                printf("\nJOGADOR %d: Digite a linha: ", jogador);
                scanf("%d", &linha);
                
                printf("JOGADOR %d: Digite a coluna: ", jogador);
                scanf("%d", &coluna);
            }while(linha < 0 || linha > 2 || coluna < 0 || coluna > 2 || tabuleiro[linha][coluna] != OBJ_VAZIO);

            // salvar coordenadas
            if(jogador == 1){
                tabuleiro[linha][coluna] = OBJ_CIRCULO;
                jogador++;
            }
            else{
                tabuleiro[linha][coluna] = OBJ_CRUZ;
                jogador = 1;
            }
            jogadas++;

            switch (confereVencedor(tabuleiro)) {
                case VITORIA_CRUZ:
                    printf("Vitoria do X\n");
                    break;
                
                case VITORIA_CIRCULO:
                    printf("Vitoria do O\n");
                    break;
                
                case DEU_VELHA:
                    printf("Deu velha\n");
                    break;
           }
           
        }
    
     }while(ganhou=0);
    
    return 0;
}

 

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