Advertisement
Guest User

codigo da jogo forca em c++

a guest
Nov 14th, 2022
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.15 KB | Source Code | 0 0
  1. //arquivo forca.h
  2.  
  3. #include <vector>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. class gerenciamento_palavras
  9. {
  10.  public:
  11.  gerenciamento_palavras() {}; //Construtor
  12.  ~gerenciamento_palavras() {}; //Destrutor
  13.  
  14.  char letra; //Recebe letra escolhida pelo usuário para adivinhar palavra
  15.  
  16.  vector<string> dicionario; //Armazena as palavras que estão no arquivo para serem posteriormente sorteadas.
  17.  
  18.  void insere_palavra(); //Função para inserir nova palavra
  19.  void remove_palavra(); //Função para remover palavra
  20.  string sorteio(); //Função que sorteia um número, sendo que este representa a localização de uma palavra no vector dicionário
  21.  void preenche_dicionario(vector<string> &dicionario); //Preenche vector dicionario com as plavras armazenadas em Dicionário_palavras.txt
  22. };
  23.  
  24. class gerenciamento_jogo
  25. {
  26.  public:
  27.   vector<string> dicionario; //Armazena as palavras que estão no arquivo para serem posteriormente sorteadas.
  28.  
  29.   gerenciamento_jogo(){}; //Construtor da classe
  30.   ~gerenciamento_jogo(){}; //Destrutor da classe
  31.  
  32.  void menu_jogo();
  33.  void verificacao();
  34.  void exibir(string palavra, vector<bool> exibe);
  35.  void jogar();
  36. };
  37.  
  38. #############################################################
  39. //arquivo palavras.cpp
  40. #include <iostream>
  41. #include <iomanip>
  42. #include <vector>
  43. #include <string>
  44. #include <fstream> //Para manipular arquivos
  45. #include <cstdlib> //Usar comando rand()
  46. #include <ctime> //Usar time
  47. #include "forca.h" //Permite usar o arquivo forca.h
  48.  
  49. #define MAX_LINE 1000
  50.  
  51. using namespace std;
  52.  
  53. gerenciamento_jogo gj;
  54.  
  55. void gerenciamento_palavras::preenche_dicionario(vector<string> &dicionario)
  56. {
  57.  char linha[MAX_LINE];
  58.  
  59.  ifstream arquivo("./dicionario_palavras", ios::in);
  60.  
  61.  while (arquivo.good())
  62.  {
  63.   arquivo.getline(linha,MAX_LINE-1);
  64.   if (linha[0]!='\0')dicionario.push_back(linha); //Coloca palavras lidas no arquivo no vector dicionario
  65.  }
  66.  arquivo.close();
  67. }
  68.  
  69. void gerenciamento_palavras::insere_palavra()
  70. {
  71.  //system("cls");
  72.  string palavra;
  73.  
  74.  cout<< "Digite a palavra que deseja inserir:\n\n";
  75.  cin >> palavra;
  76.  
  77.  ofstream arquivo("./dicionario_palavras", ios::app | ios::out);
  78.  
  79.  if (!arquivo.is_open())
  80.   {
  81.    cout << "Erro: Não foi possível abrir o arquivo." << endl;
  82.   }
  83.  
  84.   arquivo << palavra << endl;
  85.   arquivo.close();
  86.   dicionario.clear(); //Apaga tudo o que está no vector dicionario
  87.   preenche_dicionario(dicionario); //Preenche vector dicionario com as novas e antigas palavras
  88.  
  89.   //system("pause");
  90.   gj.menu_jogo();
  91. }
  92.  
  93. void gerenciamento_palavras::remove_palavra()
  94. {
  95.  //system("cls");
  96.   if(dicionario.empty()) //Inicializa vector dicionario, caso isso já não tenha sido feito na função insere_palavra
  97.   preenche_dicionario(dicionario);
  98.  
  99.  if (dicionario.empty()) //Se depois de inicializar o vector dicionario for constado que não há palavras no arquivo, não permite remoção
  100.   {
  101.    cout<< "Nao ha palavras para serem removidas!\n\n";
  102.    gj.menu_jogo();}
  103.    
  104.    int op;
  105.    cout << "Escolha a palavra que deseja remover ou digite -1 para voltar ao menu do jogo:\n\n";
  106.    
  107.    int i=0;
  108.    for (vector<string>::iterator it = dicionario.begin(); it!=dicionario.end(); it++)
  109.     {
  110.      if((*it) != "")cout << "[" << i << "] " << (*it) << endl;
  111.      i++;
  112.     }
  113.     cin >> op;
  114.    
  115.     if(op == -1)gj.menu_jogo(); //Volta ao menu do jogo
  116.     else //Verifica se o usuário digitou uma opção diferente das listadas
  117.     {
  118.      bool aux = false;
  119.      for(int i=0; i<dicionario.size(); i++){
  120.      if (op == i)aux = true;
  121.     }
  122.     if(aux == false)
  123.     {
  124.      cout<< "A opcao digitada nao corresponde a nenhuma das listadas acima! Tente novamente.\n";
  125.      //system("pause");
  126.      remove_palavra();
  127.     }
  128.   }
  129.    dicionario.erase(dicionario.begin()+ op);
  130.    //remove("./dicionario_palavras"); //Apaga arquivo dicionario_palavras.txt
  131.    
  132.    ofstream arquivo("./dicionario_palavras", ios::app | ios::out);
  133.    
  134.    if (!arquivo.is_open())
  135.     {
  136.      cout << "Erro: Não foi possível abrir o arquivo.\n\n" << endl;
  137.     }
  138.     for (int i=0; i<dicion:ario.size(); i++)arquivo << dicionario[i] << endl; //Insere o conteúdo do vector dicionário, depois que o mesmo foi alrerado
  139.    
  140.     arquivo.close();
  141.     //system("pause");
  142.    gj.menu_jogo();
  143. }
  144.  
  145. string gerenciamento_palavras::sorteio()
  146. {
  147.  string Palavra;
  148.  srand(time(0)); //Gera uma sequência de números aleatórios diferentes toda vez que o programa é executado
  149.  
  150.  int id = rand() % (dicionario.size()-1); //Sorteia o índice de uma palavra aleatoriamente, de zero até o tamanho do vector dicionario
  151.  
  152.  if(dicionario[id] == "")sorteio();
  153.  else
  154.  {
  155.   Palavra=dicionario[id];
  156.  }
  157.  return Palavra;
  158. }
  159.  
  160. ############################################################
  161. //arquivo jogo.cpp
  162.  
  163. #include <iostream>
  164. #include <iomanip>
  165. #include <vector>
  166. #include <string>
  167. #include <fstream> //Para manipular arquivos
  168. #include <cstdlib> //Usar comando rand()
  169. #include <ctime> //Usar time
  170. #include "forca.h" //Permite usar o arquivo forca.h
  171.  
  172. using namespace std;
  173.  
  174. void gerenciamento_jogo::menu_jogo()
  175. {
  176.  //system("cls");
  177.  int opcao;
  178.  cout << "####JOGO DA FORCA####\n\n"
  179.       << "[1]Inserir palavra;\n"
  180.       << "[2]Remover palavra;\n"
  181.       << "[3]Jogar;\n"
  182.       << "[4]Sair.\n\n";
  183.  cin >> opcao;
  184.  
  185.  if(opcao != 1 && opcao != 2 && opcao != 3 && opcao != 4) //Verifica se o usuário digitou algo diferente das opções listadas
  186.   {
  187.    cout<< "Opcao invalida! Digite novamente.\n";
  188.    //system("pause");
  189.    //system("cls");
  190.    menu_jogo();
  191.   }
  192.  else
  193.  if(opcao == 1)insere_palavra();
  194.  else
  195.  if(opcao == 2)remove_palavra();
  196.  else
  197.  if(opcao == 3)jogar();
  198.  else
  199.  {
  200.   cout << "Finalizando Forca...\n\n";
  201.   //system("pause");
  202.   //system("cls");
  203.  }
  204. }
  205.  
  206. void gerenciamento_jogo::verificacao()
  207. {
  208.  char opcao;
  209.  cin >> opcao;
  210.  if((opcao == 's')||(opcao == 'S'))jogar();
  211.  else
  212.  if((opcao == 'n')||(opcao == 'N'))menu_jogo();
  213.  else
  214.  {
  215.   cout << "A opcao digitada nao corresponde a nenhuma das opcoes acima.\n"
  216.        << "Por favor, tente novamente!\n\n";
  217.   //system ("pause");
  218.   verificacao();
  219.  }
  220. }
  221.  
  222. void gerenciamento_jogo::exibir(string palavra, vector<bool> exibe)
  223. {
  224.  for (int i = 0 ; i < palavra.size() ; i++ )
  225.  if (exibe[i] || palavra[i] == ' ' )cout << palavra[i];
  226.  else
  227.  cout << "_" << " ";
  228. }
  229.  
  230. void gerenciamento_jogo::jogar()
  231. {
  232.  //system("cls");
  233.  char letra;
  234.  string palavra;
  235.  if(dicionario.empty())preenche_dicionario(dicionario);//Preenche vector dicionario somente se este ainda não foi inicializado
  236.  if(dicionario.empty()) //Verifica se vector dicionario está vazio antes de iniciar o jogo
  237.  {
  238.   cout << "Antes de jogar cadastre uma palavra! \n";
  239.   //system("pause");
  240.   menu_jogo();
  241.  }
  242.  palavra=sorteio();
  243.  vector<bool> aparece(palavra.size(),false);
  244.  
  245.  cout << "A palavra sorteada tem " << palavra.size() << " letras.\n\n";
  246.  cout << "Digite uma letra: \n";
  247.  
  248.  int cont_acerto=0;
  249.  int cont_erro=0;
  250.  bool aux;
  251.  
  252.  while (cont_acerto!= palavra.size())
  253.  {
  254.   cin >> letra;
  255.   aux = false;
  256.  
  257.   for (int i=0; i<palavra.size(); i++)
  258.   {
  259.    if (palavra[i] == letra)
  260.    {
  261.     aparece[i]=true;
  262.     aux= true;
  263.     cont_acerto=cont_acerto+1;
  264.    }
  265.   }
  266.  
  267.   exibir(palavra, aparece);
  268.   cout << endl;
  269.  
  270.   if(aux == false)cont_erro=cont_erro+1;
  271.   if(cont_erro == 5) //Quando o jogador atinge o numero maximo de erros, ele perde
  272.   {
  273.    //system("cls");
  274.    cout << "GAME OVER \n\n"
  275.         << "A palavra eh: " << palavra << "\n"
  276.         << "Erros: " << cont_erro << "\n"
  277.         << "Que pena, vc perdeu!\n\n"
  278.         << "Deseja jogar novamente (S/N)? \n\n";
  279.    verificacao();
  280.   }
  281. }
  282.  
  283. //Mostra mensagem abaixo se o usuario acerta todas as letras
  284. //system("cls");
  285.  cout << "YOU WON!!! \n\n"
  286.       << "A palavra eh: " << palavra << "\n"
  287.       << "Erros: " << cont_erro << "\n"
  288.       << "Parabens, vc acertou!\n\n"
  289.       <<" Deseja jogar novamente (S/N)?\n\n " << endl;
  290.   verificacao();
  291. }
  292.  
  293. #########################################################
  294. //arquivo main.cpp
  295.  
  296. #include <iostream>
  297. #include "forca.h" //Permite usar o arquivo forca.h
  298.  
  299. using namespace std;
  300.  
  301. int main()
  302. {
  303.  gerenciamento_jogo gj;
  304.  
  305.  gj.menu_jogo(); //Inicializa programa com a função menu_jogo()
  306.  
  307.  return 0;
  308. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement