to Do Jogo Da Forca Em C++

11
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");

Transcript of to Do Jogo Da Forca Em C++

Page 1: 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");

Page 2: to Do Jogo Da Forca Em C++

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()

{

Page 3: to Do Jogo Da Forca Em C++

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())

Page 4: to Do Jogo Da Forca Em C++

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;

}

}

Page 5: to Do Jogo Da Forca Em C++

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>

Page 6: to Do Jogo Da Forca Em C++

#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()

{

Page 7: to Do Jogo Da Forca Em C++

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();

Page 8: to Do Jogo Da Forca Em C++

}

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();

Page 9: to Do Jogo Da Forca Em C++

}

}

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

{

Page 10: to Do Jogo Da Forca Em C++

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

};

Page 11: to Do Jogo Da Forca Em C++

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