Enviado em 14/06/2015 - 14:09h
Gente, preciso de ajuda!
Esse código que segue abaixo é de um Jogo da Forca utilizando arquivo. Ele é compilado, mas o erro aparece quando o usuário digita a letra, se o usuário acertar a letra ele atribui +1 aos erros ao invés de +0. E quando o usuário erra, ele atribui +2 ao erros ao invés de +1. Agradeceria imensamente se alguém pudesse me ajudar!
arquivo : palavras.txt
abelha
aguia
alce
anta
aranha
avestruz
arara
baleia
borboleta
cabra
calango
camaleao
cachorro
capivara
carangueijo
carneiro
cascavel
cavalo
cisne
coala
coelho
corvo
crocodilo
elefante
ema
esquilo
foca
galinha
gorila
golfinho
hamster
jacare
leao
leopardo
lobo
lula
lontra
papagaio
pato
pavao
panda
peru
pinguim
pombo
porco
pulga
puma
raposa
rato
rinoceronte
sapo
tatu
tigre
touro
urso
urubu
veado
zebra
tucano
coral
arvore
formiga
tanajura
lagarta
lanterna
barata
predio
caneta
caderno
computador
perola
ostra
relogio
vestido
termometro
voltimetro
biscoito
celular
coleira
pirulito
chocolate
leite
minhoca
acerola
ceramica
bicicleta
aviao
onibus
balanco
automovel
igreja
cadeira
computador
sorvete
travesseiro
basquete
voleibol
ventilador
imovel
violao
Esse código que segue abaixo é de um Jogo da Forca utilizando arquivo. Ele é compilado, mas o erro aparece quando o usuário digita a letra, se o usuário acertar a letra ele atribui +1 aos erros ao invés de +0. E quando o usuário erra, ele atribui +2 ao erros ao invés de +1. Agradeceria imensamente se alguém pudesse me ajudar!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define NUMPL 100
#define MAXTAMPL 16
int Aleatorio(){ // Retorna um número aleatório entre 1 e 100;
srand(time(NULL));
return rand()%NUMPL;
}
void linha_forca(int x, char y[15]){ //imprime as letras acertadas da palavra sorteada
printf("***** ");
for (int j=0;j<=x-1;j++){
printf("%c ", y[j]);
}
printf("\n");
printf("***** ");
for(int i=0;i<= x-1;i++){
printf("-- ");
}
printf("\n");
printf("\n");
printf("\n");
}
void des_forca(int x, int y, char z[15]){ //desenha a forca e as letras acertadas.
switch (x){
case 0:
printf("\n");
printf(" *********** \n");
printf(" *********** \n");
printf(" ** ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" *** \n");
linha_forca(y,z);
break;
case 1:
printf("\n");
printf(" *********** \n");
printf(" *********** \n");
printf(" ** ** \n");
printf(" ** ( ) \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" *** \n");
linha_forca(y,z);
break;
case 2:
printf("\n");
printf(" *********** \n");
printf(" *********** \n");
printf(" ** ** \n");
printf(" ** ( ) \n");
printf(" ** | \n");
printf(" ** | \n");
printf(" ** | \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" *** \n");
linha_forca(y,z);
break;
case 3:
printf("\n");
printf(" *********** \n");
printf(" *********** \n");
printf(" ** ** \n");
printf(" ** ( ) \n");
printf(" ** /| \n");
printf(" ** / | \n");
printf(" ** | \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" *** \n");
linha_forca(y,z);
break;
case 4:
printf("\n");
printf(" *********** \n");
printf(" *********** \n");
printf(" ** ** \n");
printf(" ** ( ) \n");
printf(" ** /|\\ \n");
printf(" ** / | \\ \n");
printf(" ** | \n");
printf(" ** \n");
printf(" ** \n");
printf(" ** \n");
printf(" *** \n");
linha_forca(y,z);
break;
case 5:
printf("\n");
printf(" *********** \n");
printf(" *********** \n");
printf(" ** ** \n");
printf(" ** ( ) \n");
printf(" ** /|\\ \n");
printf(" ** / | \\ \n");
printf(" ** | \n");
printf(" ** / \n");
printf(" ** _/ \n");
printf(" ** \n");
printf(" *** \n");
linha_forca(y,z);
break;
case 6:
printf("\n");
printf(" *********** \n");
printf(" *********** \n");
printf(" ** ** \n");
printf(" ** ( ) \n");
printf(" ** /|\\ \n");
printf(" ** / | \\ VOCE PERDEU! \n");
printf(" ** | \n");
printf(" ** / \\ \n");
printf(" ** _/ \\_ \n");
printf(" ** \n");
printf(" *** \n");
linha_forca(y,z);
break;
}
}
main()
{
char palavra[NUMPL][MAXTAMPL]; // matriz que irá armazenar as palavras do arquivo([NUMPAL) e as letras de cada palavra([MAXTAMPL])
char vetpl[16];
int IndicePalavrasLidas = 0; //indicar a linha da matriz
FILE *pl;
pl = fopen ("palavras.txt", "r"); // abrir aquivo onde esta o banco de palavras
if (pl == NULL){
printf("O arquivo nao pode ser aberto.\n \f"); //teste para saber se ocorreu algum erro ao abrir o arquivo
getchar();
exit(0);
}
while(fgets(vetpl, 15, pl)){
sscanf(vetpl,"%s",palavra[IndicePalavrasLidas]);
IndicePalavrasLidas++;
}
fclose(pl);
int c = Aleatorio();
int tentativas = 6;
int num_erros = 0;
char letra;
char ShowWord[15];
bool acertou = 0;
int cont = 0;
int teste = 0;
int num_letr = strlen (palavra[Aleatorio()]); // retorna um inteiro com a quantidade de caracteres da palavra sorteada.
for (int i=0;i<=num_letr;i++){ // atribui espaço as letras da forca, limpando assim a memória.
ShowWord[i] =' ';
}
while((num_erros<6) or (acertou == 0)){
system("CLS"); // limpa tela
printf("Erros: %d Cont: %d teste: %d \n ", num_erros,cont,teste);
printf("%s \n",palavra[c]);
des_forca(num_erros,num_letr,ShowWord); //desenha forca
printf("Digite uma letra: ");
scanf("%c",&letra);
teste = 0; // variável auxiliar para saber se o usuário errou
for(int i = 0; i <=num_letr-1;i++){ // verificará a letra digitada
if(letra == palavra[c][i]){ // Teste para saber se a palavra digitada é correspondente com a da forca
ShowWord[i] = letra;
cont = cont+1; // número de acertos
teste = 1; // se o usuário tiver acertado a letra, teste passará a ter o valor 1.
}
}
if (teste == 0){ //Se teste permanecer 0, significa que o usuario errou, já que a condição if(letra == palavra[c][i]) deu falsa
num_erros = (num_erros + 1);
}
if (cont==num_letr){ //se o contador for igual ao numero de letras da palavra sorteada o usuário ganhou
acertou = 1;
break;
}
}
if (acertou==1){ //se o contador for igual ao numero de letras da palavra sorteada o usuário ganhou
system("CLS");
printf("\n\n Parabens!!! Voce Acertou!!!");
}
printf("\n \n");
system("PAUSE");
}
arquivo : palavras.txt
abelha
aguia
alce
anta
aranha
avestruz
arara
baleia
borboleta
cabra
calango
camaleao
cachorro
capivara
carangueijo
carneiro
cascavel
cavalo
cisne
coala
coelho
corvo
crocodilo
elefante
ema
esquilo
foca
galinha
gorila
golfinho
hamster
jacare
leao
leopardo
lobo
lula
lontra
papagaio
pato
pavao
panda
peru
pinguim
pombo
porco
pulga
puma
raposa
rato
rinoceronte
sapo
tatu
tigre
touro
urso
urubu
veado
zebra
tucano
coral
arvore
formiga
tanajura
lagarta
lanterna
barata
predio
caneta
caderno
computador
perola
ostra
relogio
vestido
termometro
voltimetro
biscoito
celular
coleira
pirulito
chocolate
leite
minhoca
acerola
ceramica
bicicleta
aviao
onibus
balanco
automovel
igreja
cadeira
computador
sorvete
travesseiro
basquete
voleibol
ventilador
imovel
violao