Accedi

Gioco dell'impiccato

DESCRIZIONE

L'impiccato è un gioco di carta e matita per due giocatori. Uno dei giocatori sceglie segretamente una parola; l'altro deve indovinarla.


CODICE SORGENTE

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <conio.h>
#define PAROLE_NEL_VOCABOLARIO 10
//Author: Masone Alessandro
void banner_menu_home();
void banner_menu_play();
void errore_0 ();
void errore_1 ();
void errore_2 ();
void errore_3 ();
void errore_4 ();
void errore_5 ();
void errore_6 ();
void errore_7 ();
void banner_time();
void banner_regole();
void banner_fireworks_1 ();
void banner_fireworks_2 ();
int main(int argc, char *argv[]){
 //sezione dichiarativa
 char dizionario[PAROLE_NEL_VOCABOLARIO][256]={{"bruco"}, {"fotocopia"}, {"virus"}, {"yogurt"}, {"diretta"}, {"bot"}, {"pagliaio"}, {"agosto"}, {"claustrofobia"}, {"gru"}};
 char suggerimento_dizionario[10][256]={{"Lo e' prima di diventare una farfalla"}, {"Una copia attraverso la scannerizzazione dell'immagine"}, {"un'entita' biologica con caratteristiche di parassita obbligato"}, {"E' un alimento frutto della fermentazione del latte operata da batteri"}, {"Una risposta mirata"}, {"Unione di python e telegram"}, {"l'ago finisce sempre al suo interno"}, {"L'ottavo mese dell'anno"}, {"Fobia dei piccoli spazio"}, {"E' sia un animale che uno stumento per edilizia"}};
 char parola_da_indovinare[256];
 char parola_o_lettera_inserita[256];
 char suggerimento[2560];
 char temp[256];
 int i;
 int lettera_presente;
 int errore=0;
 int parola_indovinata;
 char menu;
 int numero_casuale;
 int start=0;
 //primo menu
 do{
  //visualizza primo menu con scelta
  banner_menu_home();
  menu=getch();
  switch(menu){
   case '1': //scelta avvio gioco
    //scelta del secondo menu
    do{
     //visualizza menu di modalità di gioco con scelta
     start=0;
     banner_menu_play();
     menu=getch();
     switch(menu){
      case '1': //gioca con un amico
       //sezione di input della parola da indovinare e del suggerimento
       do{
        system("cls");
        printf("Inserire la parola da indovinare\n[!]Minimo 3 lettere\n>");
        fflush(stdin);
        gets(parola_da_indovinare);
       }while(strlen(parola_da_indovinare)<3);
       printf("Inserire il suggerimento per indovinare la parola ");
       puts(parola_da_indovinare);
       printf(">");
       fflush(stdin);
       gets(suggerimento);
       start=1;
       menu='1';
       break;
      case '2': //gioca da solo
       //assegnanzioni parole casuali da un vacabolario
       numero_casuale=rand()%PAROLE_NEL_VOCABOLARIO;
       strcpy(parola_da_indovinare, dizionario[numero_casuale]);
       strcpy(suggerimento, suggerimento_dizionario[numero_casuale]);
       start=1;
       menu='1';
       break;
      case '3': //menu precedente
       menu='1';
       break;
      default: //tasto non presente
       menu='0';
       break;
     }
    }while(menu=='0');
    if (start==1){ //se è stata scelta una modalità di gioco
     errore=0;
     //creazione della parola con iniziali e trattini da far visualizzare al gicoatore
     char parola_al_momento[strlen(parola_da_indovinare)];
     for (i=0;i<strlen(parola_da_indovinare);i++){
      if(parola_da_indovinare[i]==' '){
       parola_al_momento[i-1]=parola_da_indovinare[i-1];
       parola_al_momento[i]=' ';
       parola_al_momento[i+1]=parola_da_indovinare[i+1];
       i++;
      }
      else
       parola_al_momento[i]='_';
      }
     parola_al_momento[0]=parola_da_indovinare[0];
     parola_al_momento[strlen(parola_da_indovinare)]=parola_da_indovinare[strlen(parola_da_indovinare)];
     parola_al_momento[strlen(parola_da_indovinare)-1]=parola_da_indovinare[strlen(parola_da_indovinare)-1];
     //visualizza a video diagramma dell'impiccato
     do{
      system("cls");
      switch(errore){
       case 0:
        errore_0();
        break;
       case 1:
        errore_1();
        break;
       case 2:
        errore_2();
        break;
       case 3:
        errore_3();
        break;
       case 4:
        errore_4();
        break;
       case 5:
        errore_5();
        break;
       case 6:
        errore_6();
        break;
      }
      //visualizza a video lo status della parola e richiesta di un input parola/lettera
      printf("Parola\n>");
      puts(parola_al_momento);
      printf("Suggerimento per scovare la parola\n>");
      puts(suggerimento);
      printf("Inserisci una lettera che possa essere contenuta all'interno della parola oppure la parola stessa\n>");
      fflush(stdin);
      gets(parola_o_lettera_inserita);
      //verifca congruenza della parola o presenza della lettera
      strlwr(parola_o_lettera_inserita);
      strcpy(temp, parola_da_indovinare);
      strlwr(temp);
      if (strlen(parola_o_lettera_inserita)>1){ //se è una parola
       parola_indovinata=-1;
       parola_indovinata=strcmp(temp, parola_o_lettera_inserita);
       if(parola_indovinata!=0)
        errore++;
      }
      else{ //se è una lettera
       i=0;
       do{ //verifica presenza della lettera
        if (parola_o_lettera_inserita[0]==temp[i])
         lettera_presente=1;
        else
         lettera_presente=0;
        i++;
       }while(lettera_presente!=1 && i<strlen(parola_da_indovinare));
       if(lettera_presente==0) //se non è presente
        errore++;
       else{ //se è presente la aggiunge al nuovo status della parola
        for (i=0;i<strlen(parola_da_indovinare);i++){
         switch(parola_o_lettera_inserita[0]){
          case 'a':     
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'b':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'c':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'd':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'e':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'f':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'g':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'h':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'i':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'j':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'k':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'l':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'm':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'n':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'o':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'p':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'q':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'r':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 's':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 't':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'u':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'v':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'w':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'x':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'y':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          case 'z':
           for (i=0;i<strlen(parola_da_indovinare);i++)
            if (parola_o_lettera_inserita[0]==temp[i])
             parola_al_momento[i]=parola_da_indovinare[i];
           break;
          default:
           break;
         }
        }
       }
       //verifica se la parola è stata completata
       parola_indovinata=-1;
       parola_indovinata=strcmp(parola_al_momento, parola_da_indovinare);
      }
      if(errore==7){ //se sono stati commessi 7 errori
       system("cls");
       errore_7();
       printf("In memoria del nostro omino. Riposa in pace\n");
       banner_time();
       printf("La parola da indovinare era: ");
       puts(parola_da_indovinare);
       printf("Premi un tasto per tornare al menu");    
       getch();
      }
      else if (parola_indovinata==0){ //se la parola è stata indovinata  
       for (i=0;i<6;i++){
        system("cls");
        banner_fireworks_1();
        printf("L'omino ti ringrazia per non averlo ucciso\n");  
        Sleep(200);
        system("cls");
        banner_fireworks_2();
        printf("L'omino ti ringrazia per non averlo ucciso\n");
        Sleep(200); 
       }
       printf("Premi un tasto per tornare al menu");
       getch(); 
      } 
     }while(errore<7 && parola_indovinata!=0);
    }
    menu='0';
    break;
   case '2': //visualizzazione delle regole
    banner_regole();
    getch();
    menu='0';
    break;
   case '3': //uscita
    system("cls");
    for (i=0;i<5;i++){
     printf("Grazie di aver utilizzato il programma\n\n");
     sleep(1);
    } 
    menu='1';
    break;
   default:
    menu='0';
    break;
  }
 }while(menu=='0'); 
 system("PAUSE");
 return 0;
}
void banner_menu_home (void){
 system("cls");
 printf("1. Play game\n");
 printf("2. How to play\n");
 printf("3. Esci\n");
}
void banner_menu_play (void){
 system("cls");
 printf("1. Play with a friend\n");
 printf("2. Play without a friend\n");
 printf("3. Bach to menu"); 
}
void banner_time (void) {
    time_t t;
    time(&t);
 printf("%s", ctime(&t));
}
void banner_regole (void){
 system("cls");
 printf("REGOLE\n\n");
 printf("|L'impiccato \x82 un gioco di carta e matita per due giocatori.\n");
 printf("|Uno dei giocatori sceglie segretamente una parola, l'altro deve indovinarla.\n");
 printf("|Il giocatore che sceglie la parola disegna una riga tratteggiata,\n");
 printf("|con un tratto per ogni lettera della parola.\n");
 printf("|L'altro tenta di indovinare la parola dichiarando una lettera a ogni turno.\n");
 printf("|Se la lettera compare nella parola, il giocatore che ha scelto la parola\n");
 printf("|trascrive la lettera su tutti i trattini corrispondenti.\n");
 printf("|Se la lettera non \x82 presente, il giocatore che ha scelto la parola traccia una linea del diagramma dell'impiccato.\n");
 printf("|Il gioco termina quando la parola viene indovinata, o viene completato il diagramma dell'impiccato.\n\n");
 printf("Premi un tasto per tornare al menu");
}
void errore_0 (void){
 printf(" ____________________    \n");
 printf("| .__________________|   \n");
 printf("| | / /                  \n");
 printf("| |/ /                   \n");
 printf("| | /                    \n");
 printf("| |/                     \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |?????????????????????|\n");
 printf("| |???????????????????| |\n");
 printf("| |                   | |\n");
 printf(": :                   : :\n");
 printf(". .                   . .\n");
}
void errore_1 (void){
 printf(" ___________.._______    \n");
 printf("| .__________))______|   \n");
 printf("| | / /      ||          \n");
 printf("| |/ /       ||          \n");
 printf("| | /        ||          \n");
 printf("| |/         ||          \n");
 printf("| |          ||          \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |?????????????????????|\n");
 printf("| |???????????????????| |\n");
 printf("| |                   | |\n");
 printf(": :                   : :\n");
 printf(". .                   . .\n");
}
void errore_2 (void){
 printf(" ___________.._______    \n");
 printf("| .__________))______|   \n");
 printf("| | / /      ||          \n");
 printf("| |/ /       ||          \n");
 printf("| | /        ||.-''.     \n");
 printf("| |/         |/  _  \x5c    \n");
 printf("| |          ||  `/,|    \n");
 printf("| |          (\\`_.'     \n");
 printf("| |         .-`--'.      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |?????????????????????|\n");
 printf("| |???????????????????| |\n");
 printf("| |                   | |\n");
 printf(": :                   : :\n");
 printf(". .                   . .\n");
}
void errore_3 (void){
 printf(" ___________.._______    \n");
 printf("| .__________))______|   \n");
 printf("| | / /      ||          \n");
 printf("| |/ /       ||          \n");
 printf("| | /        ||.-''.     \n");
 printf("| |/         |/  _  \x5c     \n");
 printf("| |          ||  `/,|    \n");
 printf("| |          (\\`_.'     \n");
 printf("| |         .-`--'.      \n");
 printf("| |         Y     Y      \n");
 printf("| |          |   |       \n");
 printf("| |          |   |       \n");
 printf("| |          | _ |       \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |?????????????????????|\n");
 printf("| |???????????????????| |\n");
 printf("| |                   | |\n");
 printf(": :                   : :\n");
 printf(". .                   . .\n");
}
void errore_4 (void){
 printf(" ___________.._______    \n");
 printf("| .__________))______|   \n");
 printf("| | / /      ||          \n");
 printf("| |/ /       ||          \n");
 printf("| | /        ||.-''.     \n");
 printf("| |/         |/  _  \x5c     \n");
 printf("| |          ||  `/,|    \n");
 printf("| |          (\\`_.'     \n");
 printf("| |         .-`--'.      \n");
 printf("| |        /Y     Y      \n");
 printf("| |       // |   |       \n");
 printf("| |      //  |   |       \n");
 printf("| |     ')   | _ |       \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |?????????????????????|\n");
 printf("| |???????????????????| |\n");
 printf("| |                   | |\n");
 printf(": :                   : :\n");
 printf(". .                   . .\n"); 
}
void errore_5 (void){
 printf(" ___________.._______    \n");
 printf("| .__________))______|   \n");
 printf("| | / /      ||          \n");
 printf("| |/ /       ||          \n");
 printf("| | /        ||.-''.     \n");
 printf("| |/         |/  _  \x5c     \n");
 printf("| |          ||  `/,|    \n");
 printf("| |          (\\`_.'     \n");
 printf("| |         .-`--'.      \n");
 printf("| |        /Y     Y\x5c     \n");
 printf("| |       // |   | \\    \n");
 printf("| |      //  |   |  \\   \n");
 printf("| |     ')   | _ |   (`  \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |                      \n");
 printf("| |?????????????????????|\n");
 printf("| |???????????????????| |\n");
 printf("| |                   | |\n");
 printf(": :                   : :\n");
 printf(". .                   . .\n");
}
void errore_6 (void){
 printf(" ___________.._______    \n");
 printf("| .__________))______|   \n");
 printf("| | / /      ||          \n");
 printf("| |/ /       ||          \n");
 printf("| | /        ||.-''.     \n");
 printf("| |/         |/  _  \x5c     \n");
 printf("| |          ||  `/,|    \n");
 printf("| |          (\\`_.'     \n");
 printf("| |         .-`--'.      \n");
 printf("| |        /Y     Y\x5c     \n");
 printf("| |       // |   | \\    \n");
 printf("| |      //  |   |  \\   \n");
 printf("| |     ')   | _ |   (`  \n");
 printf("| |          ||          \n");
 printf("| |          ||          \n");
 printf("| |          ||          \n");
 printf("| |          ||          \n");
 printf("| |         / |          \n");
 printf("| |???????|_`-'     |???|\n");
 printf("| |???????\x5c \x5c       ??| |\n");
 printf("| |        \x5c \x5c        | |\n");
 printf(": :         \x5c \x5c       : :\n");
 printf(". .          `'       . .\n");
}
void errore_7 (void){
 printf(" ___________.._______    \n");
 printf("| .__________))______|   \n");
 printf("| | / /      ||          \n");
 printf("| |/ /       ||          \n");
 printf("| | /        ||.-''.     \n");
 printf("| |/         |/  _  \x5c     \n");
 printf("| |          ||  `/,|    \n");
 printf("| |          (\\`_.'     \n");
 printf("| |         .-`--'.      \n");
 printf("| |        /Y     Y\x5c     \n");
 printf("| |       // |   | \\    \n");
 printf("| |      //  |   |  \\   \n");
 printf("| |     ')   | _ |   (`  \n");
 printf("| |          || ||       \n");
 printf("| |          || ||       \n");
 printf("| |          || ||       \t\t    _____\n");
 printf("| |          || ||       \t\t  /~/~   ~\x5c\n");
 printf("| |         / | | \x5c      \t\t | |       \x5c\n");
 printf("| |???????|_`-' `-' |???|\t\t \x5c \x5c        \x5c\n");
 printf("| |???????\x5c \x5c       ??| |\t\t  \x5c \x5c        \x5c\n");
 printf("| |        \x5c \x5c        | |\t\t --\x5c \x5c       .\x5c\x27\x27\n");
 printf(": :         \x5c \x5c       : :\t\t--==\x5c \x5c     ,,i!!i,\n");
 printf(". .          `'       . .\t\t\x27\x27\x22\x27\x27\x2c\x2c\x7d\x7b\x2c\x2c\n");
}
void banner_fireworks_1 (void){
 printf("\n                       (     \n");
 printf("      __________       )\x5c    \n");
 printf("     /         /\x5c______\x7b\x2c\x7d   \n");
 printf("     \x5c_________\x5c/            \n\n\n\n"); 
}
void banner_fireworks_2 (void){
 printf("\n                     . : .       \n");
 printf("      __________    '.  :  .'    \n");
 printf("     /         /\x5c__.__'.:.'  .   \n");
 printf("     \x5c_________\x5c/  .  .':'.  .   \n");
 printf("                    .'  :  '.    \n");
 printf("                      ' : '      \n\n");
}