Blue Dark 0 Denunciar post Postado Abril 11, 2009 Bem... Estou fazendo um jogo da forca e me deparei com um problema que não consigo descobri o motivo... aqui esta o código: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char Palavra_Secreta[50] = {},Palavra_Player[50] = {},Letra[20]; int a,vida=7,i=0; printf("\n\t\t\t-----------------------\n\t\t\t Jogo da Forca\n\t\t\t-----------------------\n\n"); printf("Insira a palavra a ser descoberta: "); scanf("%[^\n]%*c",Palavra_Secreta); system("CLS"); while(vida != 0) { system("CLS"); printf("\n\t-------------\n\tVidas: %d\n\t-----------",vida); printf("\n\n\t\t"); a=0; for(i=0;i < strlen(Palavra_Secreta);i++) { if (Palavra_Secreta[i] == ' ' || Palavra_Secreta[i] == '-') { printf(" %c",Palavra_Secreta[i]); Palavra_Player[i] = Palavra_Secreta[i]; } else { if(Palavra_Secreta[i] == Letra[0] && Palavra_Player[i] != Letra[0]) { printf(" %c",Palavra_Secreta[i]); Palavra_Player[i] = Letra[0]; a++; } else { if(Palavra_Player[i] == Palavra_Secreta[i]) { printf(" %c",Palavra_Secreta[i]); } else { printf(" _"); } } } } if(a==0)vida--; if(strcmp(Palavra_Secreta,Palavra_Player) == 0) { printf("\n\n\t\t\tVoce Ganhou"); vida = 0; } else { printf("\n\nDigite uma letra: "); scanf("%[^\n]%*c",Letra); } } scanf("%*c"); } O problema é que as vezes (principalmente na primeira vez) mesmo com a várivale a diferente de zero o if é ativado e executa o vida-- que decrementa a variável (é assim que se escreve =P?) e as vezes quando é igual a 0 não acontece nada... O que pode ter de errado no código.... Ps: se quiserem opinar tbm para alguma melhoria no codigo podem falar =) Desde já obrigado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Abril 11, 2009 Fala Blue Dark, tudo certo?? Antes de mais... Divida esse código em funções auxiliares!!! É meio confuso de ler o código assim, em uma só função! a tua variável a está sendo incrementada na hora errada! Na primeira iteração, ele não entra naquele: if(Palavra_Secreta[i] == Letra[0] && Palavra_Player[i] != Letra[0])então "a" continua sendo 0.você tem duas opções, incrementar a em outra parte do código ou decrementar (acho que é assim q c escreve...=P) vida em outra parte... Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Abril 11, 2009 Dá uma olhada ONDE você está pedindo uma letra p/ o jogador: depois de fazer a verificação na primeira vez, sem ter nenhuma letra p/ conferir. Por isso que o "if não funciona". Eu não entendi: você pede uma letra e usa um array p/ guardar e sempre verifica a posição zero. Use char de uma vez. Ao invés de ter uma variável a, que não quer dizer nada, coloque acertos. if(Palavra_Player[i] == Palavra_Secreta[i]) { printf(" %c",Palavra_Secreta[i]); } else { printf(" _"); } Não precisa de chaves nisso. if(strcmp(Palavra_Secreta,Palavra_Player) == 0) { printf("\n\n\t\t\tVoce Ganhou"); vida = 0; } Um break também serve ao invés de vida=0. Aqui o programa perde algumas letras. Insira a palavra a ser descoberta: jogo ------------- Vidas: 7 ----------- Digite uma letra: o _ o _ o ------------- Vidas: 7 ----------- Digite uma letra: j j o _ o ------------- Vidas: 7 ----------- Digite uma letra: g _ o g o ------------- Vidas: 7 ----------- Digite uma letra: Compartilhar este post Link para o post Compartilhar em outros sites
Blue Dark 0 Denunciar post Postado Abril 11, 2009 Antes de mais... Divida esse código em funções auxiliares!!! É meio confuso de ler o código assim, em uma só função! Por enquanto so tava testando se a lógica ia funcionar... Pode deixar que eu vou dividir isso em funções =) ----- É percebi no que eu estava errando.... o problema era o instante em que mostrava as vidas na tela, não era o valor real naquele momento... ja concegui concertar.. vlw =D ------- Eu não entendi: você pede uma letra e usa um array p/ guardar e sempre verifica a posição zero. Use char de uma vez. Tentei usar apenas como char mas dava problema quando ele digitava mais de um caracter =| ------- Um break também serve ao invés de vida=0. É não tinha pensando em usar break.. vlw =) ------ Ao invés de ter uma variável a, que não quer dizer nada, coloque acertos. É eu tinha trocado pra a so para testar se era algum problema relacionado ao nome.. mas antes tava acertos o nome da variavel =P ----- Aqui o programa perde algumas letras. É eu percebi isso mas não entendi o porque... mas agora eu ja testei varias vezes e não acontece mais =D ----- Vlw VictorCacciari e import java.Isis pela ajuda... Ajudaram bastante ^^ http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif Compartilhar este post Link para o post Compartilhar em outros sites