#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "variaveisforca.h" //Defini as funções da livraria - header files em .h e chama entre ""
char palavrasecreta [20];
char chutes[26];
int chutesdados = 0;
void escolhepalavra()
{
FILE* f; //ponteiro de f
f = fopen("palavras.txt", "r"); //Função fopen abre o arquivo e deve primeiro entre "" anunciar o arquivo (salvo em outpout), e "r" sifnifica que é apenas a leitura
int qtddepalavras;
fscanf(f, "%d", &qtddepalavras);//fscanf le o arquivo e deve primeiro de tudo anunciar o arquivo
if(f == 0)
{
printf("Desculpe, banco de dados indisponivel!\n\n");
exit(1);
}
srand(time(0));
int randomico = rand() % qtddepalavras;
for(int i = 0; i <= randomico; i++)
{
fscanf(f, "%s", palavrasecreta);
}
fclose(f);
}
void abertura()
{
printf("***************************\n");
printf("**** Jogo de Forca ****\n");
printf("***************************\n\n");
}
int jachutou(char letra)
{
int achou = 0;
for(int j = 0; j < chutesdados; j++)
{
if(chutes[j] == letra)
{
achou = 1;
break;
}
}
return achou;
}
void desenhaforca()
{
for (int i = 0; i < strlen(palavrasecreta); i++)
{
int achou = jachutou(palavrasecreta[i]);
if(achou)
{
printf("%c", palavrasecreta[i]);
}
else
{
printf("_ ");
}
}
printf("\n");
}
void chuta()
{
char chute;
scanf(" %c", &chute);
chutes[chutesdados] = chute;
chutesdados++;
}
int enforcou()
{
int erros = 0;
for(int i = 0; i < chutesdados; i++)
{
int existe = 0;
for(int j = 0; j < strlen(palavrasecreta); j++)
{
if(chutes[i] == palavrasecreta[j])
{
existe = 1;
break;
}
}
if(!existe) erros++;
}
return erros >= 5;
}
int acertou()
{
for(int i = 0; i < strlen(palavrasecreta); i++)
{
if(!jachutou(palavrasecreta))
{
return 0;
}
}
return 1;
}
void adicionapalavra()
{
char quer;
printf("Voce deseja adicionar uma nova palavra no jogo? (S/N)");
scanf(" %c", &quer);
if(quer == 'S')
{
char novapalavra[20];
printf("Qual a nova palavra? ");
scanf("%s", &novapalavra);
FILE* f;
f = fopen("palavras.txt", "r+");
if(f == 0)
{
printf("Desculpe, banco de dados indisponivel!\n\n");
exit(1);
}
int qtd;
fscanf(f, "%d", &qtd);
qtd++;
fseek(f, 0, SEEK_SET);
fprintf(f, "%d", qtd);
fseek(f, 0, SEEK_END);//SEEK_END a referência a ultima posição do arquivo
fprintf(f, "\n%s", novapalavra);
fclose(f);
}
}
int main()
{
escolhepalavra(palavrasecreta);
abertura();
do
{
desenhaforca(palavrasecreta, chutes, chutesdados);
chuta(chutes, chutesdados);
}
while(!acertou() && !enforcou());
adicionapalavra();
}