Soyez le premier à donner votre avis sur cette source.
Vue 5 500 fois - Téléchargée 296 fois
/* PROGRAMME EN C SOUS DOS TURBO C++2 BORLAND ecrit le 03-07-2002 par cmarsc BOULES DE LOTO MODE GRAPHIQUE */ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #include <graphics.h> #include <time.h> #include <dos.h> #define KEY_ENTER 13 /* touche du clavier ENTER */ #define KEY_ESC 27 /* touche du clavier ESC */ #define NBRE_BOULES 6 #define MAX_NUMERO 49 #define NBRE_GRILLES 8 #define VITESSE_BOULES 11 /* 11 millisecondes */ #define COUL_ECRAN BLACK #define COUL_CADRE LIGHTBLUE #define COUL_BOULE RED #define COUL_GRILLE LIGHTBLUE void tirer_les_numeros(void); int trier( const void *nombre1, const void *nombre2); void afficher_les_boules(void); void afficher_grille_numeros(int col,int ligne,int affichage); static int numero_tire[NBRE_BOULES]; static int numero_deja_tire[MAX_NUMERO+1]; /* dessiner la GRILLE OU afficher les NUMEROS dedans */ enum AFFICHAGE { GRILLE, NUMEROS }; int main(void) { int i1,TEMPS_DE_PAUSE; static char mon_choix_de_tirage ,entree_clavier; char saisir_temps[2]; char texte1[50]; int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "c:\\tc\\bgi"); errorcode = graphresult(); if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } /* cadre d'introduction */ setfillstyle(SOLID_FILL,LIGHTCYAN); bar (5,170,632,242 ); setfillstyle(SOLID_FILL,BLUE); bar (7,172,630,240 ); strcpy(texte1,"1 AUTOMATIQUE 2 MANUEL"); settextstyle(SMALL_FONT, HORIZ_DIR, 4); setusercharsize(4,1,4,1); setcolor(LIGHTCYAN); outtextxy(20,180, texte1); setcolor(DARKGRAY); outtextxy(21,181, texte1); do { mon_choix_de_tirage = getch(); if (mon_choix_de_tirage == KEY_ESC) { closegraph(); exit(0); } } while (mon_choix_de_tirage != '1' && mon_choix_de_tirage != '2'); /* saisir le temps de pause en secondes valeur entre 1 et 9 */ if ( mon_choix_de_tirage == '1') { /* TIRAGE AUTOMATIQUE */ /* effacer le texte precedent du cadre bleu */ bar (7,172,630,240 ); strcpy(texte1,"Entrez le temps de pause entre les tirages 1 a 9"); setusercharsize(2,1,4,1); setcolor(LIGHTCYAN); outtextxy(20,180, texte1); setcolor(DARKGRAY); outtextxy(21,180, texte1); do { saisir_temps[0] = getch(); TEMPS_DE_PAUSE = atoi(saisir_temps); } while (TEMPS_DE_PAUSE < 1 && saisir_temps[0] != KEY_ESC); /* valeur par defaut si ESC */ if (TEMPS_DE_PAUSE < 1) TEMPS_DE_PAUSE = 3; } /* fin de if( mon_choix_de...) */ while (!kbhit()) { tirer_les_numeros(); /* quicksort algorithme de tri dans stdlib.h */ qsort((void *)numero_tire, NBRE_BOULES, sizeof(numero_tire[0]), trier); afficher_les_boules(); /* dessiner la grille x = 420 y = 30 */ afficher_grille_numeros(420,30,GRILLE); /* afficher les numeros dans la grille */ afficher_grille_numeros(420,30,NUMEROS); strcpy(texte1 ,"LOTO"); /* afficher le texte LOTO */ for (i1 = 0; i1 < 16;i1++) { setusercharsize(i1,1,10+i1,16-i1); setcolor(LIGHTBLUE); outtextxy( 27,11, texte1); setcolor(LIGHTCYAN); outtextxy( 28,10, texte1); delay(20); if (i1 < 15) { /* effacer les traces du texte */ setfillstyle(SOLID_FILL,COUL_ECRAN); bar (10,10,410,250); } /* fin de (i1 < 15) */ } /* fin de for (i1) */ if ( mon_choix_de_tirage == '1') { /* TIRAGE AUTOMATIQUE */ sleep(TEMPS_DE_PAUSE); } else if (mon_choix_de_tirage == '2') { /* TIRAGE MANUEL */ setcolor(WHITE); setusercharsize(2,1,2,1); outtextxy(20, 5, "ESC Quitter ENTREE suivant"); do { entree_clavier = getch(); if (entree_clavier == KEY_ESC) { closegraph(); exit(0); } } while ( entree_clavier != KEY_ENTER); } /* fin de if (mon_choix_de_tirage ...) */ } /* fin de while (!kbhit) */ setcolor(BLACK); for (i1 = 0; i1 < getmaxy(); i1++) { rectangle (0,getmaxy()-i1,getmaxx(),getmaxy()); delay(1); } closegraph(); return EXIT_SUCCESS; } /* fin de main */ void tirer_les_numeros(void) { int i1; /* initialiser le generateur aleatoire */ srand((unsigned) time(NULL)); tirer_autres_numeros: /* initialiser a zero */ for (i1 = 0; i1 <= MAX_NUMERO; i1++) { if (i1 < NBRE_BOULES) numero_tire[i1] = 0; numero_deja_tire[i1] = 0; } for (i1 = 0; i1 < NBRE_BOULES; i1++) { numero_tire[i1] = (rand () % (MAX_NUMERO))+1; numero_deja_tire[ numero_tire[i1] ]++; /* tester si numero deja tire */ if (numero_deja_tire[ numero_tire[i1] ] > 1) { goto tirer_autres_numeros; } } /* fin de for (i1) */ return ; } /* fin de la fonction tirer_les_numeros */ int trier( const void *nombre1, const void *nombre2) { return( strcmp(nombre1,nombre2) ); } /* fin de la fonction trier */ void afficher_les_boules(void) { int maxx, maxy; int x,i1,i2,i3; char texte[5]; maxx = getmaxx(); /* largeur maxi de l'ecran */ maxy = getmaxy(); /* hauteur maxi de l'ecran */ /* remplir l'ecran d'une couleur */ setfillstyle(SOLID_FILL,COUL_ECRAN); bar (1,1,maxx,maxy); /* dessiner le grand cadre violet pour un effet en relief */ setcolor(COUL_CADRE); for (i1 = 0; i1 < 3; i1++) { rectangle (i1,i1,maxx-i1,maxy-i1); } /* dessiner le grand cadre bleu clair au centre du violet */ setcolor(LIGHTCYAN); rectangle (i1-2,i1-2,maxx-i1+2,maxy-i1+2); /* x = ecarts entre les boules 105 */ for (i1 = x = 0; i1 < NBRE_BOULES; i1++,x += 105) { /* convertir les numeros tires en char */ sprintf(texte,"%02d",numero_tire[i1]); for (i2 = 0; i2 < 41; i2++) { setcolor(LIGHTRED); setfillstyle(SOLID_FILL,LIGHTRED); /* ombre de la boule en rouge */ if (i2 == 40) fillellipse(50 + x,10+((i2+1)*10.4),i2-5,77-i2); setcolor(COUL_BOULE); setfillstyle(SOLID_FILL,COUL_BOULE); /* boule en rouge */ fillellipse(50 + x,10+((i2+1)*10.4),i2-5,73-i2); if (i2 > 5) { /* afficher les numeros */ /* effet progressif du numero */ settextstyle(SMALL_FONT, HORIZ_DIR, (i2/4)); /* effet de relief sur les numeros */ for (i3 = 0; i3 < 2; i3++) { (i3 == 1) ? setcolor(LIGHTCYAN) : setcolor(BLUE); outtextxy( 28 +i3 + x,(10+i3+(i2*10.7))-25, texte); } /* fin for (i3) */ } /* fin if (i2 > 5) */ /* vitesse de descente des boules */ delay(VITESSE_BOULES); /* effacer les traces des boules */ setfillstyle(SOLID_FILL, COUL_ECRAN); if (i2 < 40) bar (10 + x,4,90+x,maxy - 5); } /* fin for (i2) */ } /* fin de for (i1) */ return ; } /* fin de la fonction afficher_les_numeros_boules */ void afficher_grille_numeros(int col,int ligne,int affichage) { int i0,i1, i2,i3; char texte1[15]; static grille_numero = 0; setusercharsize(1,1,1,1); settextstyle(SMALL_FONT, HORIZ_DIR,6); if (affichage == GRILLE) { grille_numero++; grille_numero = (grille_numero > NBRE_GRILLES) ? 1 : grille_numero; /* convertir grille_numero en char */ sprintf(texte1," Grille n%2d",grille_numero); setfillstyle(SOLID_FILL, COUL_GRILLE); setcolor(WHITE); for (i1 = 1; i1 < col; i1++) { bar (5+i1, ligne -25, 120+i1, ligne -5); outtextxy(5+i1,ligne -25, texte1); delay(0.50); } } /* fin de if (affichage == GRILLE) */ /* effacer la bande violete */ setfillstyle(SOLID_FILL, COUL_ECRAN); bar (5, ligne -25, col, ligne -5); for (i1 = 0,i2 = i0 =0; i1 <= MAX_NUMERO; ++i1, i2 = ( !(i1 % 10 ) ) ? i2 +=41 : i2) { /* calculer la position du numero dans la grille */ i0 = (i1 % 10) * 36; /* convertir les numeros en char */ sprintf(texte1,"%2d",i1); if (affichage == GRILLE) { /* dessiner la case du numero en violet */ setfillstyle(SOLID_FILL, COUL_GRILLE); bar (col + i2, ligne + i0, col + 40 +i2, ligne + 35+i0); /* dessiner le cadre en vert clair de la grille */ setcolor(LIGHTCYAN); rectangle (col + i2, ligne + i0, col + 40 +i2, ligne + 35+i0); } else if (affichage == NUMEROS) { /* mettre en evidence les numeros dans la grille */ for (i3 = 0; i3 < NBRE_BOULES; i3++) { if (i1 == numero_tire[i3] ) { /* exterieur du bouton en jaune */ setfillstyle(SOLID_FILL, YELLOW); bar (col + i2+3, ligne + i0+3, col + 40 +i2-3, ligne + 35+i0-3); /* interieur du bouton en rouge */ setfillstyle(SOLID_FILL, RED); bar (col + i2+5, ligne + i0+5, col + 40 +i2-5, ligne + 35+i0-5); } /* fin de (i1 == numero_tire[i3] ) */ } /* fin de for (i3) */ } /* fin de if (action == GRILLE) */ if (i1) { setcolor(WHITE); outtextxy(col + 10 + i2,ligne + 8 + i0, texte1); if (i1 == numero_tire[i1]) { setcolor(YELLOW); rectangle (col + i2, ligne + i0, col + 40 +i2, ligne + 35+i0); } // fin de if (i1 == numero_tire[i1]) } /* fin de if(i1) */ } /* fin de for (i1) */ return ; } /* fin de la fonction afficher_grille_numeros */
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.