• Nenhum resultado encontrado

Desenvolvimento do Jogo da Forca em C++ (atente-se que foram feitos 4 arquivos: Main.cpp, Jogo.cpp, Palavras.cpp e Forca.h) Main.

N/A
N/A
Protected

Academic year: 2021

Share "Desenvolvimento do Jogo da Forca em C++ (atente-se que foram feitos 4 arquivos: Main.cpp, Jogo.cpp, Palavras.cpp e Forca.h) Main."

Copied!
10
0
0

Texto

(1)

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

(2)

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

(3)

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

(4)

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; } }

(5)

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>

(6)

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

(7)

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

(8)

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

(9)

} }

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 {

(10)

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

Referências

Documentos relacionados

Sobre os motivos que levam a mulher a postergar a maternidade, verificou-se nesses estudos, uma variedade de situações que ocasionam esse fato; de modo geral, esse

A determinação da direcção da fonte sonora (Sound Direction Of Arrival - SDOA) centra-se no cálculo da diferença de tempo interaural, em inglês Interaural Time Diference

No caso deste relatório, será apresentado um software voltado para o cálculo numérico do cosseno, recorrendo ao polinômio de McLaurin e a resolução de Sistemas Lineares

6.8 Aos candidatos que concluíram o ensino médio e aguardam a emissão do Histórico e Certificado de conclusão do Ensino Médio da Instituição de ensino de origem, será dado o prazo

Performances heteronormativas de masculinidades faziam-se presentes na educação de sujeitos masculinos, por meio do discurso proposto pela Educação Física, objetivando a

Neste contexto, o objetivo deste trabalho é analisar a participação da agricultura familiar nas compras da alimentação escolar nas escolas municipais de Passo Fundo,

No entanto, Kimura e Harshiman (1984) relatam que as mulheres tendem a ir melhor que os homens em provas que avaliaram a velocidade perceptual, fluência verbal,

Ocorrência da veterinária: Apresentou hemorragia pulmonar (grau 1); Vedova,J.Aparecido: declarou que nos 900 metros finais foi fechado por Tinkerbel Faxina (J.James),