Jump to content
Sign in to follow this  
polska

Problema com switch em Jogo Galo

Recommended Posts

polska

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.

Share this post


Link to post
Share on other sites
pmg

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!

Share this post


Link to post
Share on other sites
polska

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.

Share this post


Link to post
Share on other sites
pmg

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!

Share this post


Link to post
Share on other sites
polska

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 :confused:


Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

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
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.