Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
HangMan1_0 - HangMan.h

HangMan.h

Caricato da: Netarrow
Scarica il programma completo

  1. #include <string>
  2. #include <iostream>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. char ch;
  8.  
  9. class HangMan { // unica classe del progetto
  10. private:
  11.         int manche; // le possibilità di sbaglio
  12.         string situation; // tiene in memoria la parola scoperta fino ad ora dall'utente
  13.                                          // nel formato da mandare in output
  14.         string word; // parola da scoprire
  15.         ifstream* in; // puntatore a un ogetto ifstream, per permettere l'allocazione dinamica
  16. public:
  17. string now; // adattamento di situation eliminando gli spazi di formattazione
  18.         string getWord() {
  19.                 return word; // ritorna valore word
  20.         }
  21.         string* getSituation() {
  22.                 return &situation; // ritorna indirizzo di memoria di situation, per permettere modifiche
  23.         }
  24.  
  25.         int* getManche() {
  26.                 return &manche; // ritorna indirizzo di memoria di manche, per permettere modifiche
  27.         }
  28.  
  29. // costruttore
  30.         HangMan(string file) {
  31.                 vector<string> parole; // memorizza le parole presenti nel file
  32.                 manche = 6; // le possibilità di errore partono da 6
  33.                 in = new ifstream(file.c_str());// allocazione dinamica, dato che il nome del file si sa a run-time
  34.                 if(!in->is_open()) { // se il file non è stato trovato
  35.                         // avverti l'utente
  36.                         cerr << "Errore: file " + file + " non trovato" << endl;
  37.                         cout << "Premi un tasto ed invio per continuare... ";
  38.                 cin >> ch;
  39.                         exit(1);// esci in errore
  40.                 }
  41.                 string s; // stringa temporanea in cui salvare la parola corrente
  42.                 while(*in >> s) {
  43.                         parole.push_back(s); // aggiungila al vettore di stringhe
  44.                 }
  45.                 srand(time(0));// inizializza il seme per generare un numero pseudo-causuale
  46.                 int parola = 0 + rand() % (parole.size()-1); // crea un numero pseudo-causuale compreso tra 0 e il numero di parole del vettore, inizia da 0 quindi -1
  47.                 word = parole[parola]; // usa questo numero come indice per generare la parola a random
  48.                 for(register int w = 0; w < word.size(); w++)
  49.                         //tutto minuscolo
  50.                         word[w] = tolower(word[w]);
  51.                 for(register int i = 0; i < word.size(); i++) {
  52.                         //inizializza situation e now nei due differenti formati
  53.                         situation += " _";
  54.                         now += " ";
  55.                 }
  56.         }
  57.  
  58.         void clear() {
  59.                 /*
  60.                 Questa funziona potrebbe essere aggirata con un system("cls") in windows
  61.                 o un system("clear") in linux, per portabilizzare il tutto e stata usata questa
  62.                 scorciatoia. Oppure la funzione clrscr() di conio.h(solo in windows)
  63.                 */
  64.                 for(register int i = 0; i < 25; i++) // vai a capo 25 volte
  65.                 cout << "\n";
  66.         }
  67.  
  68.         void printSituation() {// aggiorna la schermata
  69.                 clear();//pulisci lo schermo
  70.                 // e scrivi
  71.                 cout << "\nLa parola scoperta Š fino ad ora: \t\t\t Hai " << manche << " tentativi" << endl << endl;
  72.                 cout << situation << endl << endl;
  73.                 cout << "Cosa vuoi fare?\n\n";
  74.                 cout << "1. Dico una lettera\n";
  75.                 cout << "2. Dico una parola\n";
  76.                 cout << "3. Mi arrendo\n\n";
  77.         }
  78.  
  79.         void completeSituation() {
  80.                 // dopo che l'utente indovina la parola in un colpo, viene completata la situazione
  81.                 for(register int i = 0; i < word.size(); i++) {
  82.                         situation[i*2+1] = word[i];
  83.                 }
  84.         }
  85.  
  86.         string play() {// inizia a giocare
  87.                 int option;
  88.                 printSituation();//scrivi la situazione
  89.  
  90.                 do {
  91.                 cin >> option;//prendi l'opzione
  92.                 if(option < 1 || option > 3) cerr << "Inserire opzione esistente: 1, 2 o 3!\n";
  93.                 } while(option < 1 || option > 3);
  94.  
  95.                 switch(option) {// a seconda dell'opzione ritorna una stringa diversa
  96.                 case 1:
  97.                         return "LET";
  98.                         break;
  99.                 case 2:
  100.                         return "WOR";
  101.                         break;
  102.                 case 3:
  103.                         return "END";
  104.                 }
  105.                 return NULL;//si è verificato un errore
  106.         }
  107. };