to Do Jogo Da Forca Em C++
-
Upload
rafael-alves -
Category
Documents
-
view
266 -
download
7
Transcript of to Do Jogo Da Forca Em C++
Desenvolvimento do Jogo da Forca em C++ (atente-se que foram feitos 4 arquivos: Main.cpp,
Jogo.cpp, Palavras.cpp e Forca.h)
Main.cpp
#include <iostream>
#include "Forca.h" //Permite usar o arquivo Forca.h
using namespace std;
int main()
{
gerenciamento_jogo GJ;
GJ.menu_jogo(); //Inicializa programa com a função menu_jogo()
return 0;
}
Jogo.cpp
#include <iostream>
#include <iomanip>
#include<vector>
#include <string>
#include <fstream> //Para manipular arquivos
#include <cstdlib> //Usar comando rand()
#include<ctime> //Usar time
#include "Forca.h" //Permite usar o arquivo Forca.h
#define MAX_LINE 500
using namespace std;
void gerenciamento_jogo::menu_jogo()
{
system("cls");
cout << "####JOGO DA FORCA####\n\n"
<< "[1]Inserir palavra;\n"
<< "[2]Remover palavra;\n"
<< "[3]Jogar;\n"
<< "[4]Sair.\n\n";
cin >> opcao;
if ((opcao != "1")&&(opcao != "2")&&(opcao != "3")&&(opcao != "4")) //Verifica se o usuário
digitou algo diferente das opções listadas
{
cout<< "Opcao invalida! Digite novamente.\n";
system("pause");system("cls"); menu_jogo();
}
else if(opcao == "1")
insere_palavra();
else if (opcao == "2")
remove_palavra();
else if (opcao == "3")
jogar();
else
{
cout << "Finalizando Forca...\n\n";
system("pause");
system("cls");
}
}
void gerenciamento_jogo::verificacao()
{
cin >> opcao;
if ((opcao == "s")||(opcao == "S"))
jogar();
else if ((opcao == "n")||(opcao == "N"))
menu_jogo();
else
{
cout << "A opcao digitada nao corresponde a nenhuma das opcoes acima.\n"
<< "Por favor, tente novamente!\n\n";
system ("pause");
verificacao();
}
}
void gerenciamento_jogo::exibir(string palavra , vector<bool> exibe)
{
for (int i = 0 ; i < palavra.size() ; i++ )
if (exibe[i] || palavra[i] == ' ' )
cout << palavra[i];
else
cout << "_" << " ";
}
void gerenciamento_jogo::jogar()
{
system("cls");
if (dicionario.empty())
preenche_dicionario(dicionario);//Preenche vector dicionario somente se este ainda não
foi inicializado
if (dicionario.empty()) //Verifica se vector dicionario está vazio antes de iniciar o jogo
{
cout << "Antes de jogar cadastre uma palavra! \n";
system("pause");
menu_jogo();
}
palavra=sorteio();
vector<bool> aparece(palavra.size(),false);
cout << "A palavra sorteada tem " << palavra.size() << " letras.\n\n";
cout << "Digite uma letra: \n";
int cont_acerto=0;
int cont_erro=0;
bool aux;
while (cont_acerto!= palavra.size())
{
cin >> letra;
aux = false;
for (int i=0; i<palavra.size(); i++)
{
if (palavra[i] == letra)
{
aparece[i]=true;
aux= true;
cont_acerto=cont_acerto+1;
}
}
exibir(palavra,aparece);
cout << endl;
if (aux==false)
cont_erro=cont_erro+1;
if (cont_erro==5) //Quando o jogador atinge o numero maximo de erros, ele perde
{
system("cls");
cout << "GAME OVER \n\n"
<< "A palavra eh: " << palavra << "\n"
<< "Erros: " << cont_erro << "\n"
<< "Que pena, vc perdeu!\n\n"
<< "Deseja jogar novamente (S/N)? \n\n";
verificacao();
}
}
//Mostra mensagem abaixo se o usuario acerta todas as letras
system("cls");
cout << "YOU WON!!! \n\n"
<< "A palavra eh: " << palavra << "\n"
<< "Erros: " << cont_erro << "\n"
<< "Parabens, vc acertou!\n\n"
<<" Deseja jogar novamente (S/N)?\n\n " << endl;
verificacao();
}
Palavras.cpp
#include <iostream>
#include <iomanip>
#include<vector>
#include <string>
#include <fstream> //Para manipular arquivos
#include <cstdlib> //Usar comando rand()
#include<ctime> //Usar time
#include "Forca.h" //Permite usar o arquivo Forca.h
#define MAX_LINE 500
using namespace std;
gerenciamento_jogo GJ;
void gerenciamento_palavras::preenche_dicionario(vector<string> &dicionario)
{
char linha[MAX_LINE];
ifstream arquivo("./dicionario_palavras.txt", ios::in);
while (arquivo.good())
{
arquivo.getline(linha,MAX_LINE-1);
if (linha[0]!='\0')
dicionario.push_back(linha); //Coloca palavras lidas no arquivo no vector dicionario
}
arquivo.close();
}
void gerenciamento_palavras::insere_palavra()
{
system("cls");
cout<< "Digite a palavra que deseja inserir:\n\n";
cin >> palavra;
ofstream arquivo("./dicionario_palavras.txt" ,ios::app | ios::out);
if (!arquivo.is_open())
{
cout << "Erro: Não foi possível abrir o arquivo." << endl;
}
arquivo << palavra << endl;
arquivo.close();
dicionario.clear(); //Apaga tudo o que está no vector dicionario
preenche_dicionario(dicionario); //Preenche vector dicionario com as novas e antigas
palavras
system("pause");
GJ.menu_jogo();
}
void gerenciamento_palavras::remove_palavra()
{
system("cls");
if (dicionario.empty()) //Inicializa vector dicionario, caso isso já não tenha sido feito na
função insere_palavra
preenche_dicionario(dicionario);
if (dicionario.empty()) //Se depois de inicializar o vector dicionario for constado que não há
palavras no arquivo, não permite remoção
{
cout<< "Nao ha palavras para serem removidas!\n\n";
system("pause");
GJ.menu_jogo();
}
int op;
cout << "Escolha a palavra que deseja remover ou digite -1 para voltar ao menu do
jogo:\n\n";
int i=0;
for (vector<string>::iterator it = dicionario.begin(); it!=dicionario.end(); it++)
{
if ((*it) != "")
cout << "[" << i << "] " << (*it) << endl;
i++;
}
cin >> op;
if(op == -1)
GJ.menu_jogo(); //Volta ao menu do jogo
else //Verifica se o usuário digitou uma opção diferente das listadas
{
bool aux = false;
for(int i=0; i<dicionario.size(); i++)
{
if (op == i)
aux = true;
}
if (aux == false)
{
cout<< "A opcao digitada nao corresponde a nenhuma das listadas acima! Tente
novamente.\n";
system("pause");
remove_palavra();
}
}
dicionario.erase(dicionario.begin()+ op);
remove("./dicionario_palavras.txt"); //Apaga arquivo dicionario_palavras.txt
ofstream arquivo("./dicionario_palavras.txt" ,ios::app | ios::out);
if (!arquivo.is_open())
{
cout << "Erro: Não foi possível abrir o arquivo.\n\n" << endl;
}
for (int i=0; i<dicionario.size(); i++)
arquivo << dicionario[i] << endl; //Insere o conteúdo do vector dicionário, depois que o
mesmo foi alrerado
arquivo.close();
system("pause");
GJ.menu_jogo();
}
string gerenciamento_palavras::sorteio()
{
string Palavra;
srand(time(0)); //Gera uma sequência de números aleatórios diferentes toda vez que o
programa é executado
int id = rand() % (dicionario.size()-1); //Sorteia o índice de uma palavra aleatoriamente, de
zero até o tamanho do vector dicionario
if (dicionario[id]=="")
sorteio();
else
{
Palavra=dicionario[id];
return Palavra;
}
}
Forca.h
#ifndef FORCA_H_INCLUDED
#define FORCA_H_INCLUDED
#include<vector>
#include <string>
using namespace std;
class gerenciamento_palavras
{
public:
gerenciamento_palavras() {}; //Construtor
~gerenciamento_palavras() {}; //Destrutor
string palavra; //Recebe palavra sorteada
char letra; //Recebe letra escolhida pelo usuário para adivinhar palavra
vector<string> dicionario; //Armazena as palavras que estão no arquivo para serem
posteriormente sorteadas.
void insere_palavra(); //Função para inserir nova palavra
void remove_palavra(); //Função para remover palavra
string sorteio(); //Função que sorteia um número, sendo que este representa a localização
de uma palavra no vector dicionário
void preenche_dicionario(vector<string> &dicionario); //Preenche vector dicionario com as
plavras armazenadas em Dicionário_palavras.txt
};
class gerenciamento_jogo : public gerenciamento_palavras //Graças a POO podemos utilizar as
funções da classe gerenciamento_palavras, inclusive o vector dicionário através de herança ^^
{
public:
gerenciamento_jogo(){}; //Construtor
~gerenciamento_jogo(){}; //Destrutor
string opcao; //Recebe opção escolhida pelo usuário
void menu_jogo(); //Inicializa o menu principal do jogo. É o primeiro a ser chamado (olhar
em mais.cpp)
void jogar(); //Inicializa o jogo
void verificacao(); //Verifica se o usuário escolheu opção correta.
void exibir(string palavra , vector<bool> exibe); //Exibe palavra sorteada
};
#endif // FORCA_H_INCLUDED