#include #include #include /*** roulette by Daniele Raffo 20.10.1997 ***/ void chiedip(char *casella, int *pcase); int nero(int nu); int dispari(int nu); int passe(int nu); main() { char scelta; char tasto=' '; /* (valore fittizio) */ int i, flag; int num; int p[36]; /* contiene le puntate sui 36 numeri */ int pross, pnero, ppari, pdisp, pmanq, ppass; /* altre puntate */ int soldi=0, puntata, vincita; /* soldi totali, puntata manche e vincita */ int nu; /* numero uscito */ printf("\n\n\n\ ROULETTE by Daniele Raffo 20.10.1997 v3\n"); printf(" per l'esame di Algoritmi e Strutture Dati\n\n\n"); printf(" Inizialmente sei alla pari con i soldi. Tenta la fortuna!\n\n"); srand(33333); /* inizializza il generatore di numeri casuali */ do { /* azzera le puntate prima di una manche */ for (i=0;i<=36;i++) p[i]=0; pross=pnero=ppari=pdisp=ppass=pmanq=0; /* fase 1: puntate sul tavolo verde */ do { printf("\n\n\n U - punta su un numero\n"); printf(" R - punta sul Rosso\n"); printf(" N - punta sul Nero\n"); printf(" P - punta su Pari\n"); printf(" D - punta su Dispari\n"); printf(" M - punta su Manque (1-18)\n"); printf(" S - punta su Passe (19-36)\n"); printf(" X - finisci di puntare\n\n"); printf(" Che cosa scegli? "); scanf("%s1",&scelta); flag=0; switch(toupper(scelta)) { case 'U': do { printf("\nSu quale numero desideri puntare? "); scanf("%d",&num); } while (num<1 || num>36); printf("\nQuanto punti sul %d uscente? ",num); scanf("%d",&p[num-1]); p[num-1]=abs(p[num-1]); /* trap error */ break; case 'R': chiedip("Rosso",&pross); break; case 'N': chiedip("Nero",&pnero); break; case 'P': chiedip("Pari",&ppari); break; case 'D': chiedip("Dispari",&pdisp); break; case 'M': chiedip("Manque",&pmanq); break; case 'S': chiedip("Passe",&ppass); break; case 'X': flag=1; break; } /* mostra tutte le puntate di questa giocata */ printf("\n\n\nSul tavolo verde ci sono:\n"); puntata=pross+pnero+ppari+pdisp+pmanq+ppass; for (i=0;i<=35;i++) puntata+=p[i]; if (puntata==0) printf(" nessuna puntata."); else { for (i=0;i<=35;i++) if (p[i]) printf(" %d dollari sul %d uscente\n",p[i],i+1); if (pross) printf(" %d dollari sul Rosso\n",pross); if (pnero) printf(" %d dollari sul Nero\n",pnero); if (ppari) printf(" %d dollari su Pari\n",ppari); if (pdisp) printf(" %d dollari su Dispari\n",pdisp); if (pmanq) printf(" %d dollari su Manque\n",pmanq); if (ppass) printf(" %d dollari su Passe\n",ppass); printf("per un totale di %d dollari.\n",puntata); } } while (flag==0); /* fase 2: uscita del numero e calcolo delle vincite */ /* fa uscire il numero */ printf("\n\n\n Rien ne va plus... "); nu=(int)(37*(rand()/(float)RAND_MAX)); /* genera un numero tra 0 e 37 */ if (nu==0) printf("ZERO!\n\nVince il banco."); if (nu==37) printf("DOPPIO ZERO!\n\nIl banco vince tutto."); if ((nu>=1)&&(nu<=36)) { /* il numero uscito e' tra 1 e 36, possibile vincente */ /* scrive il numero uscito con le sue proprieta' */ printf("%d ",nu); if (nero(nu)) printf("nero, "); else printf("rosso, "); if (dispari(nu)) printf("dispari, "); else printf("pari, "); if (passe(nu)) printf("passe."); else printf("manque."); /* calcola le eventuali vincite */ vincita=p[nu-1]*36; if (nero(nu)) vincita+=pnero*2; else vincita+=pross*2; if (dispari(nu)) vincita+=pdisp*2; else vincita+=ppari*2; if (passe(nu)) vincita+=ppass*2; else vincita+=pmanq*2; } /* fase 3: accredito delle vincite e riepilogo */ vincita-=puntata; printf("\n\nIn questa manche "); if (vincita<0) printf("hai perso %d dollari.",-vincita); else printf("la tua vincita e' %d dollari.",vincita); soldi+=vincita; if (soldi==0) printf("\n\nSei in pareggio."); else if (soldi<0) printf("\n\nSei sotto di %d dollari.",-soldi); else printf("\n\nHai vinto in totale %d dollari.",soldi); printf("\n\nDesideri giocare ancora? "); scanf("%s1",&tasto); printf("\n\n"); } while (tasto!='n'); } /* end of main */ void chiedip(char *casella, int *pcase) /* chiede la puntata per una determinata casella */ { printf("\nQuanto punti sul %s? ",casella); scanf("%d",pcase); *pcase=abs(*pcase); /* trap error */ return; } /* queste funzioni definiscono le proprieta' dei numeri della roulette */ int nero(int nu) /* restituisce 1 se nero, 0 se rosso */ { int nero[36]={0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0}; return nero[nu-1]; } int dispari(int nu) /* restituisce 1 se dispari, 0 se pari */ { return (nu%2); } int passe(int nu) /* restituisce 1 se passe (da 19 a 36), 0 se manque (da 1 a 18) */ { return (nu>=19); }