Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182

    [C++] gioco dell'impiccato

    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;
         
         
         }

  2. #2

    Re: [C++] gioco dell'impiccato

    Originariamente inviato da mistergks
    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..
    Semplicemente perchè ogni volta fai un banale ciclo..e quindi capisci che nel complesso non basta..

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    e quindi ci vuole un istruzione di controllo?!

  4. #4
    Originariamente inviato da mistergks
    e quindi ci vuole un istruzione di controllo?!
    Prima di mostrare all'utente lo stato della parola, devi stabilire in qualche modo cosa devi "scoprire" della parola nascosta.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    ho capito...ma non saprei come fare... indizi???

  6. #6
    Originariamente inviato da mistergks
    ho capito...ma non saprei come fare... indizi???
    In questo caso puoi mettere in relazione ogni indice della stringa con un valore booleano. Se il valore dell'i-esimo indice è true, allora mostri ciò che sta in quell'indice. Questa è la soluzione più semplice..

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    non ho capito come e dove inizializzo la variabile bool?

  8. #8
    potresti semplicemente usare un altro vettore di int della stessa dimensione della stringa (o più semplicemente creare un vettore di struct dove tale struct è composta da un char e un int)

    assumi 0 come false e 1 come true

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    ma in che punto del programma andrebbe inserito questo booleano?!

  10. #10
    Originariamente inviato da mistergks
    non ho capito come e dove inizializzo la variabile bool?
    Non si tratta di una singola variabile, ma di un array di boolean della medesima lunghezza della parola da indovinare; dunque l'i-esimo boolean dell'array (di boolean) "indica" se l'i-esima lettera della stringa può essere mostrata.
    Ribadisco che questa è la soluzione più grezza, ma efficace.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.