Вы находитесь на странице: 1из 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 funo 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 usurio digitou algo diferente das opes 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 no 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: No foi possvel 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 no tenha sido feito na funo insere_palavra preenche_dicionario(dicionario); if (dicionario.empty()) //Se depois de inicializar o vector dicionario for constado que no h palavras no arquivo, no permite remoo { 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 usurio digitou uma opo 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: No foi possvel abrir o arquivo.\n\n" << endl; } for (int i=0; i<dicionario.size(); i++) arquivo << dicionario[i] << endl; //Insere o contedo do vector dicionrio, depois que o mesmo foi alrerado arquivo.close(); system("pause"); GJ.menu_jogo(); }

string gerenciamento_palavras::sorteio() { string Palavra; srand(time(0)); //Gera uma sequncia de nmeros aleatrios 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 usurio para adivinhar palavra vector<string> dicionario; //Armazena as palavras que esto no arquivo para serem posteriormente sorteadas. void insere_palavra(); //Funo para inserir nova palavra void remove_palavra(); //Funo para remover palavra string sorteio(); //Funo que sorteia um nmero, sendo que este representa a localizao de uma palavra no vector dicionrio void preenche_dicionario(vector<string> &dicionario); //Preenche vector dicionario com as plavras armazenadas em Dicionrio_palavras.txt };

class gerenciamento_jogo : public gerenciamento_palavras //Graas a POO podemos utilizar as funes da classe gerenciamento_palavras, inclusive o vector dicionrio atravs de herana ^^ { public: gerenciamento_jogo(){}; //Construtor ~gerenciamento_jogo(){}; //Destrutor string opcao; //Recebe opo escolhida pelo usurio 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 usurio escolheu opo correta. void exibir(string palavra , vector<bool> exibe); //Exibe palavra sorteada };

#endif // FORCA_H_INCLUDED

Вам также может понравиться