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

vaz

Jogo do Galo em C

22 posts in this topic

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:

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

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

Ouch...

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

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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.

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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.

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

    if(galo[0][0]=='X'||'O')

. Isto vai sempre dar um valor verdadeiro, porque 'O' é diferente de zero. O que pretendes deve ser

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

0

Share this post


Link to post
Share on other sites

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,

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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?

0

Share this post


Link to post
Share on other sites

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.

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

:( boas malta.

so para deixar o meu comentario. Uma vez perguntei a um dos professores de programacao, como poderia usar o goto em linguagem c, ele simplesmente me disse goto e proibido usar em c, nunca usem isso.

boas programacoes.

0

Share this post


Link to post
Share on other sites

goto n e proibido (e sim proibido qdo estamos no inicio da aprendizagem da linguagem podemos ter a tentacao de utilizar goto's) so em certas e mto particulares situacoes é que possivelmente necessitaremos de uma agilidade composta pelo goto, em tudo o resto de certeza que existira uma alternativa mto mais intuitiva :(

um pouco e offtopic.

tenta refazer esse codigo com as dicas que ja te deram e assim talvez consigas perceber pq e que em C nao e bem visto a utilizacao do goto e no teu programa e mesmo completamente desaconcelhado (a não ser que seja um caso qq que te exijam mesmo a utilizacao de label's e goto's )

boas programacoes a todos :thumbsup:

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now