polska Posted April 14, 2012 at 05:11 PM Report #449188 Posted April 14, 2012 at 05:11 PM Boas pessoal, estou a realizar o jogo do galo para a escola e estou com um pequeno problema, apesar de já ter feito práticamente o jogo todo, o jogador vs jogador, o jogador vs pc e os diversos niveis..etc.. só agora é que reparei num problema, eu tenho o seguinte código : switch(nQuadro){ case 1: if(m[0][0]==ESPACO){ m[0][0]=CAR1; }else{ do{ printf("Essa posição esta ocupada, volta a jogar:\n"); scanf("%d",&nQuadro); }while(m[nQuadro/3][nQuadro%3-1]!=ESPACO); m[nQuadro/3][nQuadro%3-1]=CAR1; } break; case 2: if(m[0][1]==ESPACO){ m[0][1]=CAR1; }else{ do{ printf("Essa posição esta ocupada, volta a jogar:\n"); scanf("%d",&nQuadro); }while(m[nQuadro/3][nQuadro%3-1]!=ESPACO); m[nQuadro/3][nQuadro%3-1]=CAR1; } break; case 3: if(m[0][2]==ESPACO){ m[0][2]=CAR1; }else{ do{ printf("Essa posição esta ocupada, volta a jogar:\n"); scanf("%d",&nQuadro); }while(m[nQuadro/3][nQuadro%3-1]!=ESPACO); m[nQuadro/3][nQuadro%3-1]=CAR1; } break; case 4: if(m[1][0]==ESPACO){ m[1][0]=CAR1; }else{ do{ printf("Essa posição esta ocupada, volta a jogar:\n"); scanf("%d",&nQuadro); }while(m[nQuadro/3][nQuadro%3-1]!=ESPACO); m[nQuadro/3][nQuadro%3-1]=CAR1; } break; case 5: if(m[1][1]==ESPACO){ m[1][1]=CAR1; }else{ do{ printf("Essa posição esta ocupada, volta a jogar:\n"); scanf("%d",&nQuadro); }while(m[nQuadro/3][nQuadro%3-1]!=ESPACO); m[nQuadro/3][nQuadro%3-1]=CAR1; } break; case 6: if(m[1][2]==ESPACO){ m[1][2]=CAR1; }else{ do{ printf("Essa posição esta ocupada, volta a jogar:\n"); scanf("%d",&nQuadro); }while(m[nQuadro/3][nQuadro%3-1]!=ESPACO); m[nQuadro/3][nQuadro%3-1]=CAR1; } break; case 7: if(m[2][0]==ESPACO){ m[2][0]=CAR1; }else{ do{ printf("Essa posição esta ocupada, volta a jogar:\n"); scanf("%d",&nQuadro); }while(m[nQuadro/3][nQuadro%3-1]!=ESPACO); m[nQuadro/3][nQuadro%3-1]=CAR1; } break; case 8: if(m[2][1]==ESPACO){ m[2][1]=CAR1; }else{ do{ printf("Essa posição esta ocupada, volta a jogar:\n"); scanf("%d",&nQuadro); }while(m[nQuadro/3][nQuadro%3-1]!=ESPACO); m[nQuadro/3][nQuadro%3-1]=CAR1; } break; case 9: if(m[2][2]==ESPACO){ m[2][2]=CAR1; }else{ do{ printf("Essa posição esta ocupada, volta a jogar:\n"); scanf("%d",&nQuadro); }while(m[nQuadro/3][nQuadro%3-1]!=ESPACO); m[nQuadro/3][nQuadro%3-1]=CAR1; } break; case 10: system("cls"); printf("\n\n\t**** %s DESISTIU, o vencedor é o COMPUTADOR! ****\n\n",j1); printf("\t1-SAIR\n"); printf("\t2-NOVO JOGO\n"); scanf("%d",&opcoes); switch(opcoes){ case 1: break; case 2: system("cls"); novojogoVSpc(); break; default : do{ printf("Nao existe, escolhe de novo:\n"); scanf("%d",&opcoes); }while(opcoes!=1 && opcoes!=2); } break; case 11: system("cls"); novojogoVSpc(); break; case 12: system("cls"); inicio(); break; default: do{ printf("Opção inválida, volta a escolher\n"); scanf("%d",&nQuadro); }while(nQuadro!=1 && nQuadro!=2 && nQuadro!=3 && nQuadro!=4 && nQuadro!=5 && nQuadro!=6 && nQuadro!=7 && nQuadro!=8 && nQuadro!=9); } Este switch serve para o jogador escolher um dos quadros do tabueleiro e colocar lá o X ou O ... tudo funciona, menos o default.. O que acontece é que se por exemplo o jogador escolhe a opção 0, o programa entra no default e volta a pedir, se ele escolher por exemplo 5, o programa sai do default e segue, em vez de repetir o switch... Neste caso não devia ter ali o nQuadro!=5 .. Mas depois não funcionaria para os outros casos... Alguma ajuda? Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
pmg Posted April 14, 2012 at 05:21 PM Report #449189 Posted April 14, 2012 at 05:21 PM O que se faz normalmente é meter o switch dentro dum do ... while loop do { switch (x) { case 1: /* ... */ break; case 2: /* ... */ break; /* ... */ default: /* ... */ break; } } while (!done); What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
polska Posted April 14, 2012 at 07:06 PM Author Report #449201 Posted April 14, 2012 at 07:06 PM O que se faz normalmente é meter o switch dentro dum do ... while loop do { switch (x) { case 1: /* ... */ break; case 2: /* ... */ break; /* ... */ default: /* ... */ break; } } while (!done); e o que devo colocar no while? !done? Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
pmg Posted April 14, 2012 at 07:15 PM Report #449204 Posted April 14, 2012 at 07:15 PM Sais do ciclo quando já não queres fazer nada lá dentro. Se for para repetir até o utilizador carregar em Q, nete isso na condição do /* ... */ while (tecla != 'Q'); What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
polska Posted April 14, 2012 at 08:29 PM Author Report #449210 Posted April 14, 2012 at 08:29 PM Sais do ciclo quando já não queres fazer nada lá dentro. Se for para repetir até o utilizador carregar em Q, nete isso na condição do /* ... */ while (tecla != 'Q'); ah, sim, só perguntei porque o !done podia ser algum comando reservado ou assim que desconhecia ;D Obrigado 😕 Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now