Ir para conteúdo


Revista PROGRAMAR – Edição 46 (Setembro 2014): Download já disponível!

- - - - -

Jogo do Galo em C


  • Por favor inicie sessão para responder
21 respostas a este tópico

#1 vaz

vaz

    null

  • Novo Membro
  • Pip
  • 7 mensagens

Publicado 06 de Março de 2008 - 22:19

oi pessoal!! Sou aluna do curso de informática e estou agora a dar C, um dos meus trabalhos e fazer o jogo do galo!! O jogo do galo em si já esta feito, mas faltam os retoques finais!!
Sei as coisas mais basicas.Abaixo mostro como esta o programa:

Código (C):
#include <stdio.h>
#include <conio.h>

int main()
{

int  cont;
char op,galo[3][3];
    gotoxy (7,20);
    printf("\t\t\t\t   |   |     \n");
    gotoxy (7,21);
    printf("\t\t\t\t 1 | 2 | 3   \n");
    gotoxy (7,22);
    printf("\t\t\t\t-----------\n");
    gotoxy (7,23);
    printf("\t\t\t\t 4 | 5 | 6\n");
    gotoxy (7,24);
    printf("\t\t\t\t----------- \n");
    gotoxy (7,25);
    printf("\t\t\t\t 7 | 8 | 9 \n");
    gotoxy (7,26);
    printf("\t\t\t\t   |   |     \n");
    a:
    op=getch();


    switch(op)
         {
    case '1':
    cont++;
    if (cont==1 || cont==3 || cont==5 || cont==7 || cont==9)
    {
    if(galo[0][0]=='X'||'O')
    {
    cont--;
    goto a;
    }
    gotoxy(34,21);
    printf("X");
    galo[0][0]=='X';
    goto a;
    }
    if(cont==2||cont==4||cont==6||cont==8)
    {
    if(galo[0][0]=='X')
    {
    cont--;
    goto a;
    }
    gotoxy(34,21);
    printf("O");
         galo[0][0]=='O';
    goto a;
    }
    break;

         case '2':
    cont++;
    if(cont==1 || cont==3 || cont==5 || cont==7 || cont==9)
    {
    gotoxy(38,21);
    printf("X");
    }
    else
    {
    gotoxy(38,21);
    printf("O");
    }
    break;

    case '3':
    cont++;
    if(cont==1 || cont==3 || cont==5 || cont==7 || cont==9)
    {
    gotoxy(42,21);
    printf("X");
    }
    else
    {
    gotoxy(42,21);
    printf("O");
    }
    break;

    case '4':
    cont++;
    if(cont==1 || cont==3 || cont==5 || cont==7 || cont==9)
    {
    gotoxy(34,23);
    printf("X");
    }
    else
    {
    gotoxy(34,23);
    printf("O");
    }
         break;

    case '5':
    cont++;
    if(cont==1 || cont==3 || cont==5 || cont==7 || cont==9)
    {
    gotoxy(38,23);
    printf("X");
    }
    else
    {
    gotoxy(38,23);
    printf("O");
    break;

         case '6':
    cont++;
    if(cont==1 || cont==3 || cont==5 || cont==7 || cont==9)
    {
    gotoxy(42,23);
    printf("X");
    }
    else
    {
    gotoxy(42,23);
    printf("O");
    }
         break;

    case '7':
    cont++;
         if(cont==1 || cont==3 || cont==5 || cont==7 || cont==9)
    {
    gotoxy(34,25);
    printf("X");
    }
    else
    {
    gotoxy(34,25);
    printf("O");
    }
         break;

         case '8':
    cont++;
    if(cont==1 || cont==3 || cont==5 || cont==7 || cont==9)
    {
    gotoxy(38,25);
    printf("X");
    }
    else
    {
    gotoxy(38,25);
    printf("O");
    }
         break;

         case '9':
    cont++;
    if(cont==1 || cont==3 || cont==5 || cont==7 || cont==9)
    {
    gotoxy(42,25);
    printf("X");
    }
    else
    {
    gotoxy(42,25);
    printf("O");
    }
    break;

    }
    getch();
    }
    goto a;
    }

O trabalho esta assim, mas existe um pequeno promenor, era suposto nao poder mudar o X ou O depois de jogar, mas infelizmente da!!
Queria saber se alguem me podia ajudar ?? Ja tentei de tudo e nao consigo...

PRECISO DE UMA RESPOSTA URGENTE

#2 TheDark

TheDark

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 4011 mensagens

Publicado 07 de Março de 2008 - 03:26

goto??? É hoje que eu morro...

*AHAM*

Mais recomposto...

Para impedires que um valor seja sobrescrito basta ver se já existe um 'X' ou um 'O' na posição que foi introduzida pelo jogador. Se existir... hm... fazes... goto a... aiai... até dói dizer isto.

P.S.: Isto parece mais C que C++...

#3 skm

skm

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 392 mensagens

Publicado 07 de Março de 2008 - 13:47

Ver MensagemTheDark, em 07 de Março de 2008 - 03:26, disse:


P.S.: Isto parece mais C que C++...

:P isto de c++ não tem nada ;)

#4 pedrosorio

pedrosorio

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 1994 mensagens

Publicado 07 de Março de 2008 - 19:42

Ouch...  :wallbash:

És aluna do curso de informática... de que faculdade?  :nono1:

#5 K

K

    void

  • Membro
  • PipPip
  • 74 mensagens

Publicado 07 de Março de 2008 - 20:06

Acabar a semana em beleza... goto

#6 vaz

vaz

    null

  • Novo Membro
  • Pip
  • 7 mensagens

Publicado 07 de Março de 2008 - 22:19

Sou aluna de informatica, mas estou no 1º ano de uma escola profissional!! Ou seja equivale ao 10ºano!!
Todos os meus colegas estao com o mesmo problema!!
eu apenas estive a tentar programar o primeiro case, mas nao da!!

Tou a dar isto a muito pouco tempo, nao posso saber tudo!!:S

#7 TheDark

TheDark

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 4011 mensagens

Publicado 08 de Março de 2008 - 03:16

Então uma dica: é muito mais elegante, já para não falar de boa prática, colocares um while onde tens a label a, e um continue; onde tens os goto a;

Ainda estou a tentar compreender o teu código completamente, só agora o vou testar.

#8 vaz

vaz

    null

  • Novo Membro
  • Pip
  • 7 mensagens

Publicado 08 de Março de 2008 - 14:21

O problema e que eu so dei as coisas mais basicas!! Nunca dei o while, mas ja o usei uma vez, por isso o stor deixa-mo usar, mas o continue nunca dei, por isso nao vou poder usar :s

#9 TheDark

TheDark

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 4011 mensagens

Publicado 08 de Março de 2008 - 16:03

Isso é estúpido. Poder utilizar while sem poder utilizar continue, que é uma parte importante do próprio while, não faz sentido. Mas enfim, o uso do continue também não é vital para o programa.

Uma pergunta: qual é o objectivo do uso da variável cont? É que nunca lhe é atribuído um valor, só é incrementada e decrementada. Podes estar a utilizar lixo que esteja nessa posição da memória.

#10 vaz

vaz

    null

  • Novo Membro
  • Pip
  • 7 mensagens

Publicado 08 de Março de 2008 - 16:22

Ta a ser usada como contador!! Porque assim quando forem as jogadas par, e a O e quando for as impar é o X... E para o X nao poder jogar 2 vezes seguidas!!

#11 TheDark

TheDark

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 4011 mensagens

Publicado 08 de Março de 2008 - 17:41

Ok, é uma maneira de o fazer. Mas nesse caso inicializa o valor da variável com 0, senão podes apanhar algum valor estrambólico.

Outra coisa: nos ifs tens Código (C):
    if(galo[0][0]=='X'||'O')
. Isto vai sempre dar um valor verdadeiro, porque 'O' é diferente de zero. O que pretendes deve ser Código (C):
    if(galo[0][0]=='X' || galo[0][0]=='O')
mas mesmo assim não vai funcionar por duas razões:
1. estás sempre a comparar com o índice [0][0];
2. nunca alteras o valor de nenhum índice. E também não sabes que valores vão estar no array, pois não o inicializaste (mesmo problema do cont acima).

#12 vaz

vaz

    null

  • Novo Membro
  • Pip
  • 7 mensagens

Publicado 08 de Março de 2008 - 21:07

o que me  recomendas para por isso a funcionar bem??

#13 Gois

Gois

    Boolean User

  • Membro
  • PipPipPip
  • 100 mensagens

Publicado 08 de Março de 2008 - 23:27

vaz.. engraçado porque eu proprio fiz o jogo do galo (trabalho de uma aula de faculdade)  e portanto posso dar umas dicas que talvez te sejam utéis...
1º passo cria um array 3 por 3
2º passo pedir ao jogador a posiçao, isto é, para a posiçao 1 será simplesmente a coluna 1 linha 1 e por ai adiante....
3ºpasso cria um ciclo infinito em que no final do jogador1 e jogador2 te verifique se os caracters 'X' e 'O' sao iguais tanto para linha como coluna e diagonal
caso se verifique que faça um return 1; no jogador1 e  return 2; do jogador 2.

Instruçoes utilizadas.
case na alteraçao do array
ciclo for na verificaçao das linhas colunas
na diagonal basta indicar as posiçoes do array ex: if (tab[0][0]=='X' && tab[1[1]=='X' && tab[2][2]=='X')
                                                                                    return 1; // valor 1 significa que o jogador 1 ganhou

P.s- Se tudo isto te parece chinês, entao pega no livro Linguagem C de Luis damas e estuda (inclui parte do jogo do galo) =)


Cumps,

#14 pedrosorio

pedrosorio

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 1994 mensagens

Publicado 09 de Março de 2008 - 11:02

Ver Mensagemvaz, em 07 de Março de 2008 - 22:19, disse:

Sou aluna de informatica, mas estou no 1º ano de uma escola profissional!! Ou seja equivale ao 10ºano!!
Todos os meus colegas estao com o mesmo problema!!
eu apenas estive a tentar programar o primeiro case, mas nao da!!

Tou a dar isto a muito pouco tempo, nao posso saber tudo!!:S

Ah ok... Desculpa lá... Mas realmente não estão a começar a ensinar-vos programação da melhor forma...

#15 Gois

Gois

    Boolean User

  • Membro
  • PipPipPip
  • 100 mensagens

Publicado 09 de Março de 2008 - 15:04

pedrosorio , nao ponhas a culpa para cima do docente...

#16 vaz

vaz

    null

  • Novo Membro
  • Pip
  • 7 mensagens

Publicado 09 de Março de 2008 - 19:00

Pedrodorio, e assim se nao queres ajudar, ninguem te obriga!! Mas tb nao culpes os meus stores...:S

#17 pedrosorio

pedrosorio

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 1994 mensagens

Publicado 09 de Março de 2008 - 19:10

Ver Mensagempedrosorio, em 09 de Março de 2008 - 11:02, disse:

Ah ok... Desculpa lá... Mas realmente não estão a começar a ensinar-vos programação da melhor forma...

Loool eu estava a pedir desculpa por ter sido um bocado grosseiro! E disse que se andavas no 10º ano era diferente ainda tinha alguma justificação... Eu não vou atirar a culpa para cima do docente mas então quem é que a ensinou a usar goto?

#18 TheDark

TheDark

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 4011 mensagens

Publicado 09 de Março de 2008 - 21:28

Ver Mensagemvaz, em 08 de Março de 2008 - 21:07, disse:

o que me  recomendas para por isso a funcionar bem??

Se utilizaste tudo o que te ensinaram nas aulas para escrever o código que escreveste, tenho que concordar com o pedrosorio. Algo está a falhar.

#19 vaz

vaz

    null

  • Novo Membro
  • Pip
  • 7 mensagens

Publicado 09 de Março de 2008 - 22:42

O stor ja teve a ver, mas como somos muitos ele n pode ver o programa completo... E diz que se ele me disser que faz quase todo o programa...

#20 pedrosorio

pedrosorio

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 1994 mensagens

Publicado 09 de Março de 2008 - 23:22

Isso é verdade... É natural que estejas a começar e tentes ir pelo caminho mais fácil. Mas não o faças, pensa a sério no while e de que forma é que o podes usar para resolver o teu problema...