Sto provando a fare questo esercizio:
es: Si scriva in C++ un programma completo opportunamente modularizzato in funzioni che simuli una variante del gioco dell’impiccato tra due giocatori. Le regole del gioco sono le seguenti: il primo giocatore sceglie una parola segreta e mostra all’altro una serie di trattini (lunga quanto la lunghezza della parola da indovinare), ognuno dei quali nasconde una lettera. Il secondo giocatore ha a disposizione sette tentativi, in cui può dire qual è secondo lui la parola segreta oppure dichiarare una lettera; se la lettera dichiarata è presente nella parola segreta, il primo giocatore scopre tutti i trattini che nascondono la lettera indovinata. Il gioco termina quando il secondo giocatore indovina la parola segreta (e quindi vince) oppure esaurisce i tentativi a disposizione (e quindi vince il primo giocatore).
Esempio di partita: Il giocatore 1 sceglie come parola segreta portobello e mostra quindi la serie di trattini: _ _ _ _ _ _ _ _ _ _.
1° tentativo il giocatore 2 sceglie di dichiarare la lettera o ed il giocatore 1 mostra: _o_ _o_ _ _ _o.
2° tentativo il giocatore 2 sceglie di dichiarare la lettera s ed il giocatore 1 mostra: _o_ _o_ _ _ _o.
3° tentativo il giocatore 2 sceglie di dichiarare la lettera l ed il giocatore 1 mostra _o_ _o_ _ l l o.
4° tentativo il giocatore 2 sceglie di provare ad indovinare direttamente la parola e dice portogallo. Il giocatore 1 comunica che la risposta è sbagliata.
5° tentativo il giocatore 2 sceglie di nuovo di provare ad indovinare la parola e dice portobello. Il giocatore 1 comunica che la risposta è esatta ed il gioco termina
Una domanda è: ho modularizzato correttamente il programma in funzioni? ho fatto bene a usare funzioni void?
Il programma compila cosi' com'è.. e in esecuzione il problema è:
1)quando il giocatore 2 (gioc2) decide di provare ad indovinare una lettera..e dice quella giusta appare la lettera nella posizione corretta...e fin qui tutto ok.. poi se sceglie di nuovo di indovina un'altra lettera e questa è corretta...il programma stampa solo questa nuova lettera nella posizione giusta e invece dovrebbe stampare la nuova lettera e anche le lettere precedentemente indovinate(capito?!)..
2)quando il giocatore 2 prova a indovinare l'intera parola... anche se non indovina tutta la parola ma indovina qualche lettera l'output del programma è formato da varie frasi(me ne dà 5 ogni volta)...alcune dicono hai sbagliato e altre risposta corretta... mentre dovrebbe dire risposta corretta soltanto se tutte le lettere della parola sono state indovinate. Quindi una sola frase dovrebbe stampare e non una frase per ciclo..
ecco il codice:
codice:
#include <iostream>
using namespace std;
void indovina(char parola [], int dim, char risposta_l, char risposta_p []);
void scegli(char parola [], int dim);
int main(){
char parola [20];
char risposta_l;
char risposta_p [20];
scegli(parola, 20);
indovina(parola, 20, risposta_l, risposta_p);
system("pause");
return 0;
}
void indovina(char parola [], int dim, char risposta_l, char risposta_p []){
int tentativi=0, scelta=0;
while(tentativi<=7){
cout<<"indovini una lettera?(1) o la parola?(2)"<<endl; cin>>scelta;
switch(scelta){
case 1: cout<<"scrivi la lettera... "<<endl; cin>>risposta_l;
for(int i=0; parola [i]!= '\0'; i++){
if(risposta_l == parola [i])
cout<<risposta_l;
if(risposta_l != parola [i])
cout<<"_ ";
}//for
break;
case 2: cout<<"scrivi la parola... "<<endl; cin>>risposta_p;
for(int i=0; parola [i] != '\0';i++){
if(risposta_p [i] != parola [i])
cout<<"SBAGLIATO!, ritenta"<<endl;
else
cout<<"RISPOSTA ESATTA!!!"<<endl;
}//for
break;
}//switch
++tentativi;
}//while
}
void scegli(char parola [], int dim){
cout<<"gioc1-inserire parola"<<endl;
cin>>parola;
system("cls");
for(int i=0; parola [i]!='\0'; i++)
cout<<"_ ";
cout<<endl;
cout<<"gioc2 - indovina la parola o una lettera!... "<<endl;
}