#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include<ctime>
#define num_pacchi 20
using namespace std;
int Gioca(char nome[], int pacco);       
int offerta(char nome[], int pacco);                   
int Apertura_Pacco();                             
int Fine();                            
char nome[20];
int pacco,fare_offerta= 0;
                    
int pacchi_rimanenti[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
struct pa
{ 
  int tipo;
  int contenuto_pacco;                 //{Pacchi}
  char *premio;
}p[num_pacchi];
int cambio_finito=0;
int main () {
    
    system("color 34");
    srand(time(NULL));
    int scelta;
p[0].tipo=2;
p[0].contenuto_pacco=-1;
p[0].premio="aaaaaa";
p[1].tipo=2;
p[1].contenuto_pacco=-1;
p[1].premio="bbbbb";
p[2].tipo=2;
p[2].contenuto_pacco=-1;
p[2].premio="ccccc";
p[3].tipo=2;
p[3].contenuto_pacco=-1;
p[3].premio="ddddd";
p[4].tipo=2;
p[4].contenuto_pacco=-1;
p[4].premio="eeeee";
p[5].tipo=1;
p[5].contenuto_pacco=1;
p[5].premio="1 euro";
p[6].tipo=1;
p[6].contenuto_pacco=5;
p[6].premio="5 euro";
p[7].tipo=1;
p[7].contenuto_pacco=10;
p[7].premio="10 euro";
p[8].tipo=1;
p[8].contenuto_pacco=20;
p[8].premio="20 euro";
p[9].tipo=1;
p[9].contenuto_pacco=100;
p[9].premio="100 euro";
p[10].tipo=1;
p[10].contenuto_pacco=500;
p[10].premio="500 euro";
p[11].tipo=1;
p[11].contenuto_pacco=1000;
p[11].premio="1000 euro";
p[12].tipo=1;
p[12].contenuto_pacco=5000;
p[12].premio="5000 euro";
p[13].tipo=1;
p[13].contenuto_pacco=10000;
p[13].premio="10000 euro";
p[14].tipo=1;
p[14].contenuto_pacco=20000;
p[14].premio="20000 euro";
p[15].tipo=1;
p[15].contenuto_pacco=50000;
p[15].premio="50000 euro";
p[16].tipo=1;
p[16].contenuto_pacco=75000;
p[16].premio="75000 euro";
p[17].tipo=1;
p[17].contenuto_pacco=100000;
p[17].premio="100000 euro";
p[18].tipo=1;
p[18].contenuto_pacco=250000;
p[18].premio="250000 euro";
p[19].tipo=1;
p[19].contenuto_pacco=500000;
p[19].premio="500000 euro";
     printf("\t\t****************************************************\n");
   printf("\t\t*                                                  *\n");  
   printf("\t\t*            Benvenuti ad AFFARI TUOI              *\n");
   printf("\t\t*                                                  *\n"); 
   printf("\t\t****************************************************\n\n"); 
    printf( "1 - Gioca\n\n2 - Esci\n\n");
    scanf("%d",&scelta);
    do {
    switch (scelta) {
           case 1:
                system("cls");
                printf( "\n\nInserisci il tuo nome: ");
                scanf("%s",&nome);
                while (pacco < 1 || pacco > 20)
                {
                printf( "\n\nInserisci il numero del pacco che vuoi(1-20): ");
                scanf("%d",&pacco);
                }
                Gioca(nome,pacco);
                
                break;
           case 2:
                exit (1);
                }
           }
           while (scelta < 1 || scelta > 3);
}
int Gioca(char nome[], int pacco) {//fare_offerta++;
    
    Fine();
    
    if ((fare_offerta==3 || fare_offerta==6 || fare_offerta==9 || fare_offerta==12 || fare_offerta==15 || fare_offerta==18))
     {
     offerta(nome, pacco);
     }
   /* if(fare_offerta==19)
    Fine();*/
    int chiama;        //Chiamata Pacco
    system("cls");
    printf( "Pacchi rimasti: ");
    for (int x = 0; x < 20; x++) {          //Mostra Pacchi Rimasti
        if (pacchi_rimanenti[x]!=pacchi_rimanenti[pacco-1] && pacchi_rimanenti[x]!=0) {
        printf("%d ",pacchi_rimanenti[x]);
             }
        else {
             printf( "  ");
             }
        }
        
    for (int y = 0; y < num_pacchi; y++)
     {          
        if(p[y].contenuto_pacco!=0)
       printf("\n%s",p[y].premio); 
       else {
             printf("\n");
             }                  //Mostra Valori Rimasti
         
     }
        printf("\n");
          
        printf( "\n\n\n");
        printf( "Quale pacco vuoi chiamare? ");
        scanf("%d",&chiama);
        if(pacco!=chiama)
        {
        
        
        if (pacchi_rimanenti[chiama-1]!=0) {
        Apertura_Pacco();
        pacchi_rimanenti[chiama-1]=0;
        fare_offerta++;
        
        }
        else
        {
        printf( "\n\n\nHai gia' chiamato quel pacco!!!");
        
        }
        //Gioca(nome,pacco);
        }
        else printf("Non puoi chiamare il tuo pacco...Premi invio per inserire un pacco diverso\n");
        
        
        getchar();
  
        Gioca(nome, pacco);
}
int offerta(char nome[], int pacco) {
    int scelta;
    int tipo_offerta;
    int tot_pacchi_rimasti=0;                  //TOTale PaCchi
    int valore_pacchi_rimasti=0;             //TOTale RiManente
    int off;
    int x;
    tipo_offerta=rand()%2;
     
if (tipo_offerta==0)
       {
    for (x=0; x < 20; x++) {
        if ((p[x].contenuto_pacco!=0) && (p[x].contenuto_pacco==-1)) 
        {
        valore_pacchi_rimasti += (p[x].contenuto_pacco+1);
        tot_pacchi_rimasti++;
        }      
        else if (p[x].contenuto_pacco!=0) 
        {
        
        valore_pacchi_rimasti += p[x].contenuto_pacco;
        tot_pacchi_rimasti++;
        
        }
           
    }
    system("cls");
    off = ((valore_pacchi_rimasti / tot_pacchi_rimasti));
    off=off*0.1;
    printf( "%s , per te l'offerta e': %d ",nome,off);
    for (int y = 0; y < 20; y++) {          //Mostra Valori Rimasti
        if (p[y].contenuto_pacco!=0) {
        printf("\n%s",p[y].premio);
        
             }
        else {
             printf("\n");
             }
        }
    printf("\n");
    printf( "\nAccetti l'offerta? (1)-(SI) - (0)-(NO)\n");
    while (scelta > 1 || scelta < 0)
    scanf("%d",&scelta);
    if (scelta==1) {
                   system("cls");
                   printf( "Hai vinto: %d",off);
                   printf("\n");
                   system("Pause");
                   exit (1);
                   }
}
else 
    {   
        
        int park,nuovo,scelta_cambio;
        //cambio_finito=0;
        if(cambio_finito==0)
        {
        fare_offerta--;
        printf("Vuoi cambiare pacco? 1-Si 0-No");
        
        while (scelta_cambio> 1 || scelta_cambio< 0)
        scanf("%d",&scelta_cambio);
        
        if (scelta_cambio==1)
         {
          printf("\nCon quale pacco vuoi cambiare il tuo?\nNuovo pacco: ");
          scanf("%d",&nuovo);
          park=pacco;
          pacco=nuovo;
          nuovo=park;        
          cambio_finito=1;
          Gioca(nome,pacco);
        }
        else
            {//printf("\nnumero offerte:%d\n",fare_offerta);
             
            
            //fare_offerta--;
            fare_offerta++;
            
            cambio_finito=1;
            
            
            
            }
           // fare_offerta++;
         //cambio_finito=0;   
         }
        // fare_offerta++; 
        
        
        
         
         
         Gioca(nome,pacco);
        
          
        
    }
   
}    
int Apertura_Pacco() {
    
    int PcVal;
    system("cls");
    printf( "Il valore del pacco e': ");
    PcVal = rand() % 20;
    
        while (p[PcVal].contenuto_pacco==0) {
              PcVal = rand() % 20;
              }
              
    printf("%s",p[PcVal].premio);
    p[PcVal].contenuto_pacco=0;
    
getchar();    
}
int Fine() {
    char *TotWn;
    int temp,flag=1;
         //TOTale WiN        Totale Vincita
    if (fare_offerta==19)
    {
    system("cls");
    
    for (int y = 0; y < 20; y++) 
      {                                       //Trova Valore che hai vinto
        if (p[y].contenuto_pacco!=0) 
           if (p[y].contenuto_pacco!=-1)
        TotWn =p[y].premio;
        
        else {
          flag=0;
          temp=y;   
             }
      }
              if(flag)
                   printf( "Hai vinto: %s!!!\n\n",TotWn);
                   
              else 
              printf("hai vinto: %s\n",p[temp].premio);
                   system("Pause");
                   exit (1);
                   }
                   getchar();
} 
il problema sta che quando decido di non cambiare pacco mi fa di nuovo l'offerta mentre me la dovrebbe rifare tra altre 3 chiamate di pacco,perchè la richiesta di acmbio pacco è anch'essa un offerta