1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

jogo do galo c

Discussão em 'Programação' iniciada por Nody, 9 de Janeiro de 2008. (Respostas: 14; Visualizações: 5217)

  1. Nody

    Nody Power Member

    ora boas tardes, alguem ja fez o jogo do galo em C ?
    se sim gostaria de saber que logica usaram para pensar o "passo" do computador

    cumps
     
  2. docpt

    docpt Power Member

    Olá, boas!
    Eu já fim um jogo do galo em C, para um trabalho de curso.
    Já não programo em C à muito tempo, mas vou tentar ajudar-te.

    Ora bem eu fiz assim:

    --Inicio do jogo--
    nome do jogador 1?
    nome1
    nome do jogador 2?
    nome2
    jogador 1 joga com X
    jogador 2 joga com 0( por exemplo)
    De seguida fiz um ciclo de 9 jogadas em ciclo "for", onde está praticamente as jogadas todas dos dois jogadores (no máximo é possível jogar até 9 jogadas), os possíveis resultados e também o desenho do tabuleiro de jogo que ao longo de cada jogada é desenhada no tabuleiro);
    Ou seja:
    jogador 1 joga,
    jogador2 a joga(não esquecer que não há jogadas iguais)
    isto até alguém ganha, empatar...
    --final do jogo--

    Foi assim que praticamente fiz o meu jogo do galo.
    Alguma duvida?

    Cumprimentos...
     
    Última edição: 9 de Janeiro de 2008
  3. Nody

    Nody Power Member

    desde ja obrigado pela resposta ao post, a duvida é : os requisitos daquilo que tenho que fazer é:

    -usar um array bidimensional;
    -desenhar o espaço de jogo através de ciclos for;
    -apenas um jogador joga X o computador tem que jogar O

    a duvida é não consigo perceber como ou melhor que logica dou ao computador pa ele jogar.

    cumps
     
    Última edição: 9 de Janeiro de 2008
  4. docpt

    docpt Power Member

    Já estou e perceber a tua questão que também foi a minha "o computador jogar por si".
    Eu quando fiz o jogo filo a pensar em duas pessoas. E alias não sobe concluir para que o pc joga-se por si.
    Mas sabes fazer com que as jogadas aparecem no tabuleiro?

    Já agora também fica a minha questão como colocar o computador a jogar por si, sei que o pc vai ter de ir a jogadas anteriores e para ver que jogada por ...sei que ...mas não lembro o nome da função em c em que o pc pode por aleatoriamente uma jogada mas neste caso tem de ver as jogadas anteriores.....
    cumps...
     
  5. Boas!
    Eu sou novo aqui, mas vou tentar ajudar.
    Eu tenho um colega que também teve de fazer o jogo do galo, ele não usava lógica para calcular as jogadas do PC. Como no jogo do galo existem poucas combinações de jogadas, o meu colega calculou a melhor jogada para cada situação, e guardou tudo na memoria do PC, depois era só ir a memoria buscar a informação da próxima jogada do PC.


    Se o programa ficar bem feito o PC nunca perde, no pior caso fica empatado, isto faz com que o jogo perca um bocadinho a piada.


    Espero que ajude.
    Boa sorte.
     
  6. docpt

    docpt Power Member

    Pois a muitas formas de fazer o jogo do galo, os meus colegas fizeram de forma diferente e chegaram lá, alguns deles fizeram o jogo de uma forma simples.
    Depende da lógica e dos conhecimentos de cada um.
    :)Cumps.
     
  7. Nody

    Nody Power Member

    boas, jorge, eu penso que o que estás a falar tem lógica, guardar as jogadas em memória e mexer-lhe através de ponteiros, docpt sim as jogadas aparecem no tabuleiro do genero, crio o array com valores, e esses valores sao 1,2,3,4,5,6 ou seja as posicoes possiveis no tabuleiro, e depois faço um switch case para cada 1 dos casos. que acham?
     
  8. trovial

    trovial Power Member

    eu fiz isso ha algum tempo, mas nk cheguei a acabar,

    era catrefada de if's

    dou.te uma dica, uma vez que falaste em array bidimensional, portanto uma matriz 3x3,
    o tabuleiro do tic tac, tem quatro lados, mas sao todos iguais,
    faz o calculo para um dos lados, e depois roda o tabuleiro.
     
  9. fulgas

    fulgas Power Member

    Aconselho-te a veres o algoritmo minimax e o alpha-beta prunning.
    É mto usado para este género de jogos.
     
  10. Tyran

    Tyran Power Member

    Pois devem ser alguns, por isso o melhor seria dar uso a recursividade

    cumpzz
     
  11. koust

    koust Power Member

    Se for para um trabalho final de curso, existem muitos livros que tem um jogo do galo em C. O livro na minha assinatura, por ex, tem ... eu tenho-o aqui por isso posso-te resumir os passos do autor, mas ele utilizou para jogar com 2 pessoas:

    -inicializou a matriz [3,3] com ' ';
    -criou a funcao mostra, que mostrava o tabuleiro.

    depois no main, criou um ciclo infinito:
    - pede a posicao em que o jogador X quer jogar, guarda a posiçao; de seguida ele ve se a casa está livre ou se está a ser o ocupada. Se tiver ocupada, ele pede para jogar novamente. incremente o nr_jogadas.
    - assim que o nr de jogadas == 3*3, o programa sai.

    isto é o basico dos basicos, o teu motor ..

    depois para completar falta-te:
    -a linha, coluna ou diagonal esta preenchida? entao jogador X ganhou. (podes criar uma funcao para cada caso, e no final outra para ver se o jg ganhou.

    no main o trablho é igual, excepto agora tens q verificar estas condiçoes. nao e dificil, o codigo q estou a ler leva 100linhas. muitos dos trabalho finais levam ~600 .. para calcular a jogada do computador, ou fazes o que jorge fez, ou utilizas um algoritmo com uma funcao matemática que te diga qual a melhor posicao. não fasso ideia..

    espero ter ajudado.
     
  12. Nody

    Nody Power Member

    agradeço a tua explicação e ja percebi +- a ideia :) e não, não é 1 trabalho de fim de curso, é apenas um exercicío de aula lol. em relação ao livro...tá espectacular, mas o meu stor fez um pdf da sua autoria com + de 200 páginas que em alguns aspectos tá melhor! vou-lhe perguntar se posso circular se poder vou meter aqui pa verem :)

    quando terminar deixo aqui como fiz, mas koust, gostei do teu algoritmo. e é nele q vou pegar.

    cumps
     
    Última edição: 10 de Janeiro de 2008
  13. The_True_Eue

    The_True_Eue Power Member

    Quando eu fiz isto pela primeira vez foi na calculadora. O programa ficou tão grande que só me sobravam uns 30 ou 40 bytes na memória, o que não dava para as variáveis todas... Tive de tirar o código para o computador jogar e ficou para dois jogadores...
    Depois, no 11º ano, acho eu, tive de fazer isso em VB. Já foi para aí há 5 anos, por isso não me lembro bem de todos os pormenores, mas aqui ficam algumas conclusões que tirei na altura.

    A estratégia de (o programador) calcular todas as jogadas possíveis previamente não é tão difícil como parece. E não dá uma catrefada de ifs. Pelo menos pela minha definição de catrefada. E dá para fazer com switch, o que simplifica as coisas.
    No fundo, quando a "inteligência" estiver toda implementada, só existem quatro ou cinco jogos diferentes possíveis.
    Não precisas de código para verificar se o jogador ganha. Esse código nunca vai ser executado :D. Para verificar um empate é simples: se ao fim das 9 jogadas ninguém ganhar, é empate. Para verificar se o programa ganhou... lê a seguir...
    Deves começar por escrever código para não deixar o jogador terminar uma linha (ou para o programa ganhar...), ou seja, quando duas casas adjacentes têm o mesmo símbolo, jogar na casa que evita a linha (ou faz). Se as duas casas adjacentes tinham o símbolo do programa, ganhou. Senão safou-se de perder.
    Depois de escrever código para fechar linhas, falta o código para as primeiras duas ou três jogadas, que são tudo o que define o jogo. Na altura passei uma tarde inteira a jogar contra mim próprio (no meu programa, a dois jogadores) para verificar todas as possibilidades.
    Depois há que reduzir os padrões das primeiras jogadas àqueles que são "seguros", isto é, que não deixam o jogador fazer uma jogada que o leva a ganhar o jogo.
    Por exemplo, só há três tipos de 1ª jogadas: num canto, no centro, ou numa das outras quatro casas (eu chamei-lhes lados). Qualquer uma é segura, apesar de os lados apresentarem muito menos chances de vitória, excepto contra um jogador estúpido. Sendo o computador a começar, uma casa aleatória, com preferência pelo centro e pelos cantos. Eu dei ainda mais preferência aos cantos, de modo a apanhar desprevenidos alguns jogadores que estão habituados a começar sempre pelo centro. Se for o jogador a começar e jogar num dos lados, jogar no centro. Outras jogadas levam invariavelmente a uma derrota. Se ocorrer o oposto (programa -> lado), mas o jogador não joga no centro, já da para ganhar.
    Espero que esta pequena análise de algumas situações iniciais sirva de alguma ajuda.
     
  14. koust

    koust Power Member

    muito bom :) ora ai tens o pseudo-codigo já praticamente feito
     
  15. Margrad

    Margrad Power Member

    Já fiz o jogo em C. A logica do computador é primeiro ver se pode ganhar, depois se pode perder e por fim previne-se contra aquelas jogadas que permitem ganhar de duas maneiras diferentes, se nenhum dos casos se verificar mete na primeira casa vazia disponível.
     

Partilhar esta Página