/* Gioco del 100
* by Paro
* Classico gioco del 100, con cpu a 4 livelli di difficoltÃ
*/
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
//Definisce per diversi OS la costante Pulisci per il comando system()
#ifdef WIN32
#define Pulisci "cls"
#elif WIN64
#define Pulisci "cls"
#else
#define Pulisci "clear"
#endif
int _random();
int main(){
int cpu, p; // variabili per i valori scelti dalla cpu e dal giocatore
char c; //variabile per le scelte dell'utente
int valtrue[10] = {1,12,23,34,45,56,67,78,89,100}; //valori che assicurano la vittoria
int dif; // variabile per il livello di difficoltÃ
system(Pulisci);
cout << "Gioco del 100" << endl << "Vuoi leggere le regole? (s/n) ";
cin >> c;
if ((c=='s')||(c=='S')) {
cout << "Regole del Gioco del 100" << endl;
cout << "Bisogna inserire un numero intero maggiore di quello attuale e non maggiore del numero attuale + 10" << endl;
cout << "Se, per esempio, il numero attuale è 5, l'intervallo dei numeri accettabili è compreso tra 6 e 15" << endl;
cout << "Si vince se si riesce ad immettere il valore 100" << endl;
for(;;){ //aspetta l'input di 's' o 'S' per continuare
cout << "Continuare? (s/) ";
cin >> c;
if ((c=='s')||(c=='S')) break;
cout << "Errore; Riprovare." << endl;
}
}
system(Pulisci);
cout << "Gioco del 100" << endl;
cout << "Inserire livello di difficoltà " << endl;
cout << "1 --> Facile" << endl << "2 --> Medio" << endl << "3 --> Difficile"<<endl<<"4 --> Impossibile (o quasi...)"<<endl;
for(;;){ //aspetta che si inserisca un livello di difficoltà accettabile
cout << "Livello: ";
cin >> dif;
if ((dif>0)&&(dif<5)) break;
cout << "Errore; Riprovare." << endl;
}
system(Pulisci);
for(;;){ //ciclo dell'applicazione
p=0; cpu=0;
for(int n=0; n<100;){ //ciclo di gioco
system(Pulisci);
cout << "Gioco del 100" << endl;
cout << "Il numero che hai inserito prima: " << p << endl;
cout << "Operazione eseguita dal cpu: +" << cpu-p << endl;
cout << "Numero attuale: " << n << endl;
for(;;){ //input utente
cout << "Inserisci il nuovo numero: ";
cin >> p;
if ((p<n+11)&&(p>n)) break;
cout << "Errore; Riprovare." << endl;
}
n=p;
if (n>=100) continue;
if (dif==4) { //difficoltà massima
for(int i=0;i<10;i++){ //input cpu
if ((valtrue[i]<n+11)&&(valtrue[i]>n)) {cpu=valtrue[i]; break;}
if (i==9) {cpu = n + _random();}
}
n=cpu;
continue;
}
if (dif==3) {//difficoltà difficile
if (4 < _random()) {
for(int i=0;i<10;i++){ //input cpu
if ((valtrue[i]<n+11)&&(valtrue[i]>n)) {cpu=valtrue[i]; break;}
if (i==9) {cpu = n + _random();}
}
}
else {cpu = n + _random();}
n = cpu;
continue;
}
if (dif==2) {//difficoltà normale
if (6 < _random()) {
for(int i=0;i<10;i++){ //input cpu
if ((valtrue[i]<n+11)&&(valtrue[i]>n)) {cpu=valtrue[i]; break;}
if (i==9) {cpu = n + _random();}
}
}
else {cpu = n + _random();}
n = cpu;
continue;
}
if (dif==1) {//difficoltà facile
if (7 < _random()) {
for(int i=0;i<10;i++){ //input cpu
if ((valtrue[i]<n+11)&&(valtrue[i]>n)) {cpu=valtrue[i]; break;}
if (i==9) {cpu = n + _random();}
}
}
else {cpu = n + _random();}
n = cpu;
continue;
}
} // fine del ciclo di gioco
if (p>=100) {cout << "Hai vinto! :)" << endl;}
else if (cpu>=100) {cout << "Ha vinto la cpu! :(" << endl;}
cout << "Rigiocare? (/n) ";
cin >> c;
if ((c=='N')||(c=='n')) break; //esce dal giro dell'applicazione
}
cout << "Grazie per aver giocato" << endl;
return 0;
}
int _random(){ // restituisce un valore casuale da 1 a 10
int r;
srand((unsigned)time(NULL));
r = rand() % 10 + 1;
return r;
}