mistergks
23-10-2012, 23:31
Ho fatto il gioco dell'impiccato con qualche semplificazione ovviamente...
All'inizio fa scegliere al giocatore1 una parola segreta..la nasconde e mostra al giocatore2 tanti trattini quant'è la parola segreta.
Egli ha 7 tentativi per indovinare e può scegliere di indovinare una lettera o tutta la parola.
Nel complesso va bene...però ho dei dubbi:
perchè all'inizio mi fa inserire la parola segreta con la cin.getline(....) e poi quando voglio leggere la lettera che il giocatore2 prova ad indovinare (è commentato nel codice il punto esatto) non mi funziona con la cin.getline ma mi funziona con cin>> ....??
cin>> va bene per leggere parole e frasi? Allora qual'è l'utilità di cin.getline?
Poi ho un altro dubbio... perchè quando stampa le lettere indovinate e i trattini stampa anche altri caratteri indefiniti dopo i trattini?! forse vado a prendere indirizzi di memoria non definiti?
#include <iostream>
#include <cstring>
using namespace std;
void mostratrattini(char parolasegreta[]);
void indovinalettera(char parolasegreta[], char lettera, char indovinate[]);
bool indovinaparola(char parolasegreta[], char word[]);
int main(){
char parolasegreta[50];
char lettera;
char word[50];
bool indovinato=false;
int scelta=0, tentativi=0;
char indovinate[50];
cout<<"Giocatore1: scegli la parola segreta!"<<endl;
cin.getline(parolasegreta,50);
system("cls");
mostratrattini(parolasegreta);
int size=strlen(parolasegreta);
for(int i=0; i<size; i++){
indovinate[i]='_';
}
while(tentativi < 7 && !indovinato){
cout<<"Giocatore2: Per provare ad indovinare una lettera (premi 0)"<<endl;
cout<<"per provare con l'intera parola (premi 1)"<<endl;
cin>>scelta;
if(scelta == 0){
cout<<"Allora inserisci una lettera.... "<<endl;
cin>>lettera;
indovinalettera(parolasegreta,lettera,indovinate);
}
if(scelta == 1){
cout<<"Inserisci la parola..."<<endl;
cin>>word; //perchè con la cin.getline(word,50) non funziona?????
if(indovinaparola(parolasegreta, word)){
cout<<"BRAVO!!! Hai indovinato!!!"<<endl;
indovinato=true;
}
else
cout<<"noooo!!! sbagliatoooo!!!"<<endl;
}
tentativi++;
}
system("pause");
return 0;
}
void mostratrattini(char parolasegreta[]){
for(int i=0; parolasegreta[i]; i++){
cout<<"_"<<" ";
}
cout<<endl;
}
void indovinalettera(char parolasegreta[], char lettera, char indovinate[]){
for(int i=0; parolasegreta[i]; i++){
if(lettera == parolasegreta[i])
indovinate[i]= lettera;
}
for(int k=0; indovinate[k]; k++){
cout<<indovinate[k]<<' ';
}
cout<<endl;
}
bool indovinaparola(char parolasegreta[], char word[]){
for(int i=0; parolasegreta[i]; i++){
if(word[i] != parolasegreta[i])
return false;
}
return true;
}
All'inizio fa scegliere al giocatore1 una parola segreta..la nasconde e mostra al giocatore2 tanti trattini quant'è la parola segreta.
Egli ha 7 tentativi per indovinare e può scegliere di indovinare una lettera o tutta la parola.
Nel complesso va bene...però ho dei dubbi:
perchè all'inizio mi fa inserire la parola segreta con la cin.getline(....) e poi quando voglio leggere la lettera che il giocatore2 prova ad indovinare (è commentato nel codice il punto esatto) non mi funziona con la cin.getline ma mi funziona con cin>> ....??
cin>> va bene per leggere parole e frasi? Allora qual'è l'utilità di cin.getline?
Poi ho un altro dubbio... perchè quando stampa le lettere indovinate e i trattini stampa anche altri caratteri indefiniti dopo i trattini?! forse vado a prendere indirizzi di memoria non definiti?
#include <iostream>
#include <cstring>
using namespace std;
void mostratrattini(char parolasegreta[]);
void indovinalettera(char parolasegreta[], char lettera, char indovinate[]);
bool indovinaparola(char parolasegreta[], char word[]);
int main(){
char parolasegreta[50];
char lettera;
char word[50];
bool indovinato=false;
int scelta=0, tentativi=0;
char indovinate[50];
cout<<"Giocatore1: scegli la parola segreta!"<<endl;
cin.getline(parolasegreta,50);
system("cls");
mostratrattini(parolasegreta);
int size=strlen(parolasegreta);
for(int i=0; i<size; i++){
indovinate[i]='_';
}
while(tentativi < 7 && !indovinato){
cout<<"Giocatore2: Per provare ad indovinare una lettera (premi 0)"<<endl;
cout<<"per provare con l'intera parola (premi 1)"<<endl;
cin>>scelta;
if(scelta == 0){
cout<<"Allora inserisci una lettera.... "<<endl;
cin>>lettera;
indovinalettera(parolasegreta,lettera,indovinate);
}
if(scelta == 1){
cout<<"Inserisci la parola..."<<endl;
cin>>word; //perchè con la cin.getline(word,50) non funziona?????
if(indovinaparola(parolasegreta, word)){
cout<<"BRAVO!!! Hai indovinato!!!"<<endl;
indovinato=true;
}
else
cout<<"noooo!!! sbagliatoooo!!!"<<endl;
}
tentativi++;
}
system("pause");
return 0;
}
void mostratrattini(char parolasegreta[]){
for(int i=0; parolasegreta[i]; i++){
cout<<"_"<<" ";
}
cout<<endl;
}
void indovinalettera(char parolasegreta[], char lettera, char indovinate[]){
for(int i=0; parolasegreta[i]; i++){
if(lettera == parolasegreta[i])
indovinate[i]= lettera;
}
for(int k=0; indovinate[k]; k++){
cout<<indovinate[k]<<' ';
}
cout<<endl;
}
bool indovinaparola(char parolasegreta[], char word[]){
for(int i=0; parolasegreta[i]; i++){
if(word[i] != parolasegreta[i])
return false;
}
return true;
}