Sion Posted June 11, 2008 Report Share Posted June 11, 2008 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 Report Share Posted June 11, 2008 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 Report Share Posted June 11, 2008 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 Author Report Share Posted June 11, 2008 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 Report Share Posted June 12, 2008 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 Report Share Posted June 12, 2008 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 Report Share Posted June 12, 2008 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 Report Share Posted June 12, 2008 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 Author Report Share Posted June 12, 2008 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 Report Share Posted June 12, 2008 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 Report Share Posted June 12, 2008 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 Author Report Share Posted June 21, 2008 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