Sion Posted June 11, 2008 at 09:44 PM Report Share #190776 Posted June 11, 2008 at 09:44 PM Boas Para nao fazer nova thread decidi editar este post, tem andado a continuar o meu jogo do galo (uma vez que e trabalho fim de ano, ja para esta quarta) Surgiu-me com que nunca me tinha deparado antes lol. Eu criei a estrutura for para correr o vector todo e preencher a primeira casa que puder com 'X' Se essa casa estiver vazia, assim que isso se verifique ele interrompe o duplo ciclo(for). So que ja exprimeitei breaks e nao resulta. Se puderem ajudar agradecia else { for(a=0;a<3;a++) { for(b=0;b<3;b++) { if (jogo[a][b]=='-') // significa que a casa está vazia jogo[a][b]='X'; // se isto se verificase queria que o for fica-se interropido se nao vai encher o resto das casas } } } Cumps . Thx _________________Cenas pá. Link to comment Share on other sites More sharing options...
Guest NoOne Posted June 11, 2008 at 09:57 PM Report Share #190777 Posted June 11, 2008 at 09:57 PM tens cont = cont +2; se fizers as contas 2 4 6 8 10.... cont nunca vai ser igual a 9... ve se assim dá para ti: sair=player1(jogo,simb); tabelainicial(jogo); cont++; if(cont==9) //apesar do cont chegar aos 9 o ciclo continua ... sair=0; sair=player2(jogo,simb2); tabelainicial(jogo); cont++; if(cont==9) //apesar do cont chegar aos 9 o ciclo continua ... { sair=0; } Link to comment Share on other sites More sharing options...
anolsi Posted June 11, 2008 at 10:00 PM Report Share #190778 Posted June 11, 2008 at 10:00 PM sair=player1(jogo,simb); tabelainicial(jogo); cont++; if(cont==9) //apesar do cont chegar aos 9 o ciclo continua ... sair=0; sair=player2(jogo,simb2); tabelainicial(jogo); cont++; if(cont==9) //apesar do cont chegar aos 9 o ciclo continua ... sair=0; Não precisas de ter cont = cont++ (Só estás a fazer duas atribuições, uma delas desnecessária) "Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."Não respondo a questões por PM que possam ser colocadas no fórum! Link to comment Share on other sites More sharing options...
Sion Posted June 11, 2008 at 10:41 PM Author Report Share #190784 Posted June 11, 2008 at 10:41 PM tens cont = cont +2;se fizers as contas 2 4 6 8 10.... cont nunca vai ser igual a 9... Provavelmente tens razao, mas usar o cont++ , vai adicionar 1 valor a cada passada no ciclo so que em cada passada sao efectuadas !2 jogadas!, e assim o maximo de jogadas que o cont ia permitir eram 18 😉 _________________Cenas pá. Link to comment Share on other sites More sharing options...
Dumpster Posted June 12, 2008 at 01:18 AM Report Share #190815 Posted June 12, 2008 at 01:18 AM if(cont>9) //cont>9? ^^ { sair=0; } ? Se contares 10 como 9, trabalha, cont>9 ^^" The, old (but still), lulz O: Link to comment Share on other sites More sharing options...
TheDark Posted June 12, 2008 at 03:00 AM Report Share #190817 Posted June 12, 2008 at 03:00 AM Esta é uma daquelas ocasiões em que o break dá jeito. Pessoalmente não programava o jogo dessa forma, até porque nas funções player1 e player2 estás sem dúvida a repetir código. juntava as duas funções e, se fosse necessário, passava mais um argumento à função resultante a indicar qual era o jogador activo. Depois disto, chamava a função apenas uma vez por cada iteração do do {} while, o que finalmente iria simplificar a contagem das jogadas. Desaparecido. Link to comment Share on other sites More sharing options...
Guest NoOne Posted June 12, 2008 at 10:23 AM Report Share #190838 Posted June 12, 2008 at 10:23 AM Não precisas de ter cont = cont++ (Só estás a fazer duas atribuições, uma delas desnecessária) Esqueci-me de tirar o "cont =" =P Link to comment Share on other sites More sharing options...
Guest NoOne Posted June 12, 2008 at 10:36 AM Report Share #190841 Posted June 12, 2008 at 10:36 AM Uma pequena sugestão, não sei se será a mais correcta, mas podes tentar assim... //Vitoria como variavel global int vitoria = 0; //0 = ninguem ganhou; 1= ganhou player 1; 2 = ganhou player 2; //Funções int main() { char jogo[3][3]; int posicao,cont=0; char simb,simb2; char *players[2]; //ler nomes dos jogadores menuinicial(); tabelainicializar(jogo); tabelainicial(jogo); simb=escolhasimbolo(); simb2=escolhasimbolo2(); while(1) { jogada(jogo,simb,1); //1 = numero de player cont++; if(cont==9) break; jogada(jogo,simb,2); cont++; if(cont==9) break; //vais ter outra condição que controle se algum jogador ganhou, como por exemplo; if(vitoria!=0) break; } if(vitoria!=0) printf("Vitória para o jogador %s ", players[vitoria]); else printf("Empate"); } Link to comment Share on other sites More sharing options...
Sion Posted June 12, 2008 at 12:38 PM Author Report Share #190866 Posted June 12, 2008 at 12:38 PM if(cont>9) //cont>9? ^^ { sair=0; } xD, nao sei como nao me lembrei dessa lol. NoOne se calhar vou pegar nalgumas ideas do teu codigo como o TheDark disse e tranformar a jogada numa funcao unica esplica-me so esta parte do codigo que percebi bem s.f.f , é que ainda nao dei string e nao as domino muito bem :fartnew2: if(vitoria!=0) printf("Vitória para o jogador %s ", players[vitoria]); o players[vitoria] escreve o nome do jogador que ganhou mas o que e ao certo a variavel vitoria? __ orbigado pelas sugestões a todos ajudou bastante sem duvida , mais um bocado de trabalho e está feito 👍 So mais um coisa.. estive a trabalhar no código pra reconhecer quando se ganha ou perde , pus o IF desta maneira, mas dá-me erro, nao é possivel fazer isto? tem que se fazer condição a condição? ? int wincheck(char jogo[3][3],int x, char sim ) { int jog=0; if (x==0) { jog=1; } else { jog=2; } if (jogo[0][0]== sim && jogo[0][1]== sim && jogo[0][2]== sim) || (jogo[2][0]== sim && jogo[2][1]== sim && jogo[2][2]== sim) || (jogo[1][0]== sim && jogo[1][1]== sim && jogo[1][2]== sim) { printf("Jogador %d, Ganhou!\n",jog); return 0; } } _________________Cenas pá. Link to comment Share on other sites More sharing options...
TheDark Posted June 12, 2008 at 12:47 PM Report Share #190868 Posted June 12, 2008 at 12:47 PM Uma pequena sugestão, não sei se será a mais correcta, mas podes tentar assim... //Vitoria como variavel global int vitoria = 0; //0 = ninguem ganhou; 1= ganhou player 1; 2 = ganhou player 2; //Funções int main() { char jogo[3][3]; int posicao,cont=0; char simb,simb2; char *players[2]; //ler nomes dos jogadores menuinicial(); tabelainicializar(jogo); tabelainicial(jogo); simb=escolhasimbolo(); simb2=escolhasimbolo2(); while(1) { jogada(jogo,simb,1); //1 = numero de player cont++; if(cont==9) break; jogada(jogo,simb,2); cont++; if(cont==9) break; //vais ter outra condição que controle se algum jogador ganhou, como por exemplo; if(vitoria!=0) break; } if(vitoria!=0) printf("Vitória para o jogador %s ", players[vitoria]); else printf("Empate"); } lol, isso foi mais ou menos o que eu disse, mas substituía esse while por while(1) { vitoria = jogada(jogo, cont%2); if ( vitoria != 0 || ++cont == 9 ) break; } onde jogada receberia como 2º parâmetro 0 para o jogador 1, e 1 para o jogador 2, e determina o símbolo a partir desse parâmetro. jogada retorna ainda 0 no caso de nessa jogada ninguém ter ganho, 1 para o caso em que ganha o jogador 1, e 2 para o caso em que ganha o jogador 2, o que evita ter vitoria como variável global. So mais um coisa.. estive a trabalhar no código pra reconhecer quando se ganha ou perde , pus o IF desta maneira, mas dá-me erro, nao é possivel fazer isto? tem que se fazer condição a condição? ? Sim, é possível. Tens é que pôr parêntesis à volta de toda a condição, a a abrir logo a seguir ao if e a fechar logo antes do {. Desaparecido. Link to comment Share on other sites More sharing options...
pedrosorio Posted June 12, 2008 at 03:23 PM Report Share #190896 Posted June 12, 2008 at 03:23 PM sair=player1(jogo,simb); tabelainicial(jogo); sair=player2(jogo,simb2); tabelainicial(jogo); cont=cont+2; printf("%d\n",cont); /*output a confirmar o valor que o cont tem */ if(cont==9) //apesar do cont chegar aos 9 o ciclo continua ... { sair=0; } Nunca jogaste ao galo? Ele faz com que ambos joguem e em seguida faz a verificação, ora nem era preciso saber o que é um número ímpar, bastava ver que para o jogo acabar empatado quem joga por último é o JOGADOR 1, se tu fazes a verificação a seguir ao JOGADOR 2 é impossível isso funcionar. Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
Sion Posted June 21, 2008 at 06:41 PM Author Report Share #192686 Posted June 21, 2008 at 06:41 PM Também exprimetei atribuir valores acima do "suposto" as variaveis que fazem de contadores no for para ele parar mas nao da :x _________________Cenas pá. Link to comment Share on other sites More sharing options...
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