• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pereira010

jogo do galo

6 mensagens neste tópico

Boa!

eu sei que isto já tá bem batido aqui no forum, pois ja tive a ver varias topicos sobre o galo.

tou a fazer um jogo de um só jogador,  ja tenho codigo praticamente feito só que o meu problema é que nao sei fazer com que o computador seja mais "inteligente" a jogar  :(

eu vou postar o codigo e se alguem me pudesse ajudar agradecia  :)

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

char campo[3][3];  /* campo de jogo */

char verificar(void);       /* Verifica se exitste um vencedor */
void inic_campo(void);      /* inicializa o campo. */
void jogada_humano(void);   /* Jogada do jogador Humano */
void jogada_pc(void);    /* jogada do pc */
void imp_campo(void);    /* Imprime o campo */
char opcao;
char novo_jogo;


int main(void)
    {
    char final;

    system("color 9");
    printf("\t*** JOGO DO GALO ***\n");
    printf("\tjogador vs computador\n\n");

    opcao:    
    printf("\nQue tal um joguinho? (S/N):");
    scanf("%c", &opcao);
    if (opcao == 's' || opcao == 'S') goto jogo;
    if (opcao == 'n' || opcao == 'N') exit(opcao);
    if (opcao != 's' && opcao != 'S' && opcao != 'n' && opcao != 'N') printf("\n Introduza uma opcao valida!!");system("cls"); goto opcao;
    
    system("color 6");
    
    jogo:
       system("cls");
       printf("\t*** JOGO DO GALO ***\n");
       printf("\tjogador vs computador\n\n");
       
       final =  ' ';
       inic_campo();

       do {
           imp_campo();
           jogada_humano();
           final = verificar(); /* verifica se é vencedor */
           if(final!= ' ') break; /* vencedor!*/
           jogada_pc();
           final = verificar(); /* verifica se é vencedor */
           }

    while(final== ' ');
    
    imp_campo(); /* mostra as posiçoes finais */
    if(final=='X') printf("Epah! Ganhaste \n");
    else printf("yeah!! Ganhei aha aha\n");
    getchar();
    getchar();
    system("cls");
    goto novo_jogo;
    
    novo_jogo:
    printf("\n  Novo jogo? (S/N):");
    scanf("%c", &novo_jogo);
    if (opcao == 's' || opcao == 'S') goto jogo;
    if (opcao == 'n' || opcao == 'N') exit(novo_jogo);
    if (opcao != 's' && opcao != 'S' && opcao != 'n' && opcao != 'N') printf("\n Introduza uma opcao valida!!"); goto novo_jogo;
    return 0;
}

/* inicializa o campo. */
void inic_campo(void)
     {
     int i, j;

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

/* Jogada do jogador Humano */
void jogada_humano(void)
     {
     int x, y;

     printf("\n\nIntroduza a coordenada X: ");
     scanf("%d", &x);
     printf("Introduza a coordenada Y: ");
     scanf("%d", &y);
     ("%d%*c%d", &x, &y);
     x--; y--;

     if(campo[x][y]!= ' '){
     printf("hm.. tera que introduzir um jogada valida.\n");
     jogada_humano();
     }
  
  else campo[x][y] = 'X';
}

/* Jogada do computador */
void jogada_pc(void)
     {
     int i, j;
     for(i=0; i<3; i++){
                        for(j=0; j<3; j++)
                        if(campo[i][j]==' ') break;
                        if(campo[i][j]==' ') break;
                        }

     if(i*j==9)
               {
               printf("Bom.. temos um empate, prime ENTER para continuar\n");
               getchar();
               exit(0);
               }
               
               else
               campo[i][j] = 'O';
}

/* Imprime o campo */
void imp_campo(void)
     {
     int t, x;
     printf("\n\n 1   2   3 \n\n");
     printf("1\n\n2\n\n3\n\n");
     for(t=0; t<3; t++)
     {
     printf(" %c | %c | %c    ",campo[t][0], campo[t][1], campo [t][2]);
     if(t!=2) printf("\n---|---|---\n");
     }

printf("\n\n");

}

/* Verifica se exitste um vencedor */
char verificar(void)
     {
     int i;
     
     /* verifica as linhas */
     for(i=0; i<3; i++) 
     if(campo[i][0]==campo[i][1] &&
       campo[i][0]==campo[i][2]) return campo[i][0];
     
     /* verifica as colunas */
     for(i=0; i<3; i++)  
     if(campo[0][i]==campo[1][i] &&
     campo[0][i]==campo[2][i]) return campo[0][i];

     /* verifica as diagonais*/
     if(campo[0][0]==campo[1][1] &&
     campo[1][1]==campo[2][2])
     return campo[0][0];

     if(campo[0][2]==campo[1][1] &&
     campo[1][1]==campo[2][0])
     return campo[0][2];

     return ' ';
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aparentemente o computador está a jogar na primeira posição livre que encontra. Se queres introduzir AI no jogo tens de definir uma função "melhor" para a jogada do computador.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para começar por algoi simples podes pôr o computador a escolher uma posição aleatória (não é assim um jogador assim tão inteligente mas é um bom começo). Depois podes ir aperfeiçoando as jogadas, por exemplo, se tiver dois símbolos alinhados e o terceiro livre jogar lá e ganhar ou jogar numa posição que impeça o adversário de ganhar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hm.. nao tou a consegui.. na verdade é que nao sei como o fazer lol tou a ir por hipoteses mas nenhuma dá

podias dar me uma ajuda?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes dar aqui uma olhada

pa eu ja fiz em Java o jogo do galo, e para a AI o esquema que usei foi: se o pc jogar 1º, joga sempre no meio ou nas pontas. depois depois volta a jogar novamente ou meio ou pontas, na terceira vez ja faz check se ha jogadas do adversario pa cortar, se nao ha procura fazer uma jogada de vitoria, se nao der joga aleatorio ou nao pa tentar na prox jogada ganhar.

acho que ajuda muito se pegares numa folha e fizeres 1 jogo passo a passo e pensares sempre "se fosse eu agora a jogar qual a minha estrategia?" e passas no fundo a estrategia po jogo

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora