#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <fstream>
#include <ctime> //semente dos numeros aleatorios
#include <cstdlib> //random
using namespace std;
char chute;
string palavra_secreta;
map <char, bool> mapa;
vector <char> chutes_errados;
//mapenado os erros:
//criar uma sequencias de caracteres que ja foram chutados e nao estao na palavra_secreta
//vetor dinâmico (cria vetor sem determinar o tamanho)
vector<string> le_arquivo(){
//input file stream - ifsream (le um fluxo no arquivo)
ifstream arquivo;
arquivo.open("frutas.txt");
int quantidade_de_palavras;
arquivo >> quantidade_de_palavras;
vector <string> palavras_do_arquivo;
for(int i=0; i < quantidade_de_palavras;i++){
string palavra_lida;
arquivo >> palavra_lida;
palavras_do_arquivo.push_back(palavra_lida);
}
return palavras_do_arquivo;
}
void sorteia_palavra (){
vector<string> palavras = le_arquivo();
srand(time (NULL));
int indice_sorteado = rand() % palavras.size();
palavra_secreta = palavras[indice_sorteado];
}
bool letra_existe (char chute){
for (char letra : palavra_secreta){
if (chute == letra){
return true;
}
}
return false;
}
bool nao_ganhou (){
for (char letra : palavra_secreta){
if (!mapa [letra]){
return true;
}
}
return false;
}
bool nao_enforcou (){
return chutes_errados.size () < 5;
}
void imprime_erros (){
cout << "Chutes errados: ";
for (char letra : chutes_errados){
cout << letra << " "; //imprime chutes errados
}
cout << endl;
}
void imprime_palavra (){
for (char letra : palavra_secreta){
if (mapa [letra]){
cout << letra << " ";
}else {
cout << "_ " ;
}
}
}
void lendo_chute (){
cout << endl;
cout << endl;
cout << "Digite uma letra." << endl;
cout << endl;
cin >> chute;
mapa [chute] = true;
}
void testa_chute(){
if (letra_existe(chute)){
cout << "Você acertou." << endl;
}else {
cout << "Você errou a letra." << endl;
chutes_errados.push_back(chute);
}
cout << endl;
}
void imprime_resultado (){
cout << "FIM DE JOGO" << endl;
if (nao_ganhou() == false){
cout << "Você ganhou. A palavra secreta era " << palavra_secreta << endl;
}else if (!nao_enforcou()){
cout << "Você perdeu. A palavra secreta era " << palavra_secreta << endl;
}
}
int main (){
cout << "***Jogo da forca***" << endl;
cout << endl;
le_arquivo();
sorteia_palavra();
while (nao_ganhou () && nao_enforcou()){
imprime_erros();
imprime_palavra();
lendo_chute();
testa_chute();
}
imprime_resultado();
}