Problema con gioco dell'impiccato

di il
19 risposte

Problema con gioco dell'impiccato

Salve a tutti, sto scrivendo il gioco dell'impiccato e ho riscontrato due bug nel programma che non riesco a risolvere. In sostanza, quando vado ad inserire la parola da indovinare dovrebbe accettarmi solo parole con lettere minuscole e nessun altro carattere, ma il controllo che ho fatto per questo scopo non sembra funzionare bene. Inoltre avevo implementato un controllo per scalare il monte errori solo nel caso in cui la lettera scelta fosse stata sbagliata ma anche questo non accade. Sarei molto felice se mi poteste aiutare a risolvere questo problema! Grazie in anticipo!
Vi posto il codice:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 30
#define ASCII 32 //costante di conversione

int main(){
    char parola_indovinare[MAX], parola[MAX], lettera;
    int indice_tentativi, tentativi, grandezza_parola, x, y, controllo=0, i=0;

    printf("**************Gioco dell'impiccato!****************");        //presentazione gioco

    int z=0;

    do{         // controllo lunghezza della parola e se sono tutte maiuscole
        printf("\n\nInserisci la parola da indovinare da 1 a 30 lettere minuscole: ");
        fflush(stdin);
        scanf("%s",parola_indovinare);
        for(y=0;y<strlen(parola_indovinare);y++){
            if((parola_indovinare[y]<97) || (parola_indovinare[y]>122))
                z=1;
        }
    }while((strlen(parola_indovinare)>MAX) || (strlen(parola_indovinare)<=0) || z==1);

    system("cls");

    printf("\n\nIl tentativo viene scalato solo quando si sbaglia.");
    printf("\nI tratti sono le vocali, i puntini le consonanti.");
    printf("\n\nIndovina la parola: ");

    tentativi=10;

    grandezza_parola=strlen(parola_indovinare);     //misura grandezza parola

    for(y=0;y<grandezza_parola;y++){        //ciclo assegnazione tratti e punti
        if((parola_indovinare[y]==97) || (parola_indovinare[y]==101) || (parola_indovinare[y]==105) || (parola_indovinare[y]==111) || parola_indovinare[y]==117)
            parola[y]='_';
        else
            parola[y]='.';
        printf("%c",parola[y]);
        printf(" ");
    }

    for(indice_tentativi=0;indice_tentativi<tentativi;){
        printf("\nHai %d tentativi.",i);
        printf("\nInserisci la lettera: ");
        fflush(stdin);
        scanf("%c",&lettera);                     //inserimento lettera

        if((lettera>=65) && (lettera<=90)){     //conversione maiuscole in minuscole tramite codice ASCII
            lettera=lettera+ASCII;
        }

        for(x=0;x<grandezza_parola;x++){
            if(lettera==parola_indovinare[x]){          //ciclo assegnazione lettera a vettore parola
                parola[x]=lettera;
                controllo=1;
            }
            else
                controllo=0;
        }

        if(controllo==1){
            for(x=0;x<grandezza_parola;x++){
                printf("%c",parola[x]);
                printf(" ");
            }
        }

        else{
            indice_tentativi++;
            i--;
            for(x=0;x<grandezza_parola;x++)
                printf("%c ",parola[x]);
        }
    }

    printf("\nGioco finito!");          //fine gioco
    system("\nPause");
    return 0;
}

19 Risposte

  • Re: Problema con gioco dell'impiccato

    Una cosa per volta ... intanto

    z=0;

    deve stare NEL ciclo subito dopo la do{
  • Re: Problema con gioco dell'impiccato

    Grazie, il primo problema si è risolto!
  • Re: Problema con gioco dell'impiccato

    Il secondo problema come potrei risolvere?
  • Re: Problema con gioco dell'impiccato

    Il secondo non è chiaro. Esponi meglio, facendo anche riferimento alla parte di codice che non va.
  • Re: Problema con gioco dell'impiccato

    Non riesco a spiegarti il problema scrivendolo, potresti eseguire il programma per capire meglio il problema?
  • Re: Problema con gioco dell'impiccato

    No, adesso non posso. E comunque dovresti provare a spiegarti, non mi sembra possibile che tu non lo possa fare.
  • Re: Problema con gioco dell'impiccato

    Il programma dovrebbe scalare il tentativo soltanto quando la lettera inserita è effettivamente sbagliata, invece alcune volte avviene e altre no, anche se ho sempre inserito una lettera presente nella parola.
  • Re: Problema con gioco dell'impiccato

    Scrivi una funzione che verifica, quindi ritorna true o false, se la.parola contiene la lettera inserita
  • Re: Problema con gioco dell'impiccato

    Se la variabili si chiama

    tentativi

    e parte da 10, in quale parte del codice esiste il decremento di questa variabile? Io non lo trovo.
  • Re: Problema con gioco dell'impiccato

    oregon ha scritto:


    .... in quale parte del codice esiste il decremento di questa variabile? Io non lo trovo.
    In effetti il decremento è svolto dalla variabile intera "i", ma tale variabile viene istanziata nel codice con il valore zero, anziché 10, o comunque non v'è successiva assegnazione ad essa del medesimo valore della variabile "tentativi".
  • Re: Problema con gioco dell'impiccato

    La mia idea era di decrementare "i" solo per la stampa dei tentativi, e di incrementare indice_tentativi fino a quando quest'ultimo non era minore di tentativi. Il decremento e l'incremento dovevano avvenire se la lettera inserita non faceva parte della parola ed era quindi sbagliata.
  • Re: Problema con gioco dell'impiccato

    La variabile i è istanziata a 10
  • Re: Problema con gioco dell'impiccato

    mattia06 ha scritto:


    La variabile i è istanziata a 10
    Scusami, dove è istanziata a 10 ? Non riesco a vederlo lì nel codice.
  • Re: Problema con gioco dell'impiccato

    Veramente i è a zero ...

    Comunque, così c'è troppa confusione. Dividi tutto in funzioni, come suggerito e usale nel main. E la variabile dei tentativi chiamala tentativi non i !
Devi accedere o registrarti per scrivere nel forum
19 risposte