Boules de loto mode graphique turbo c++2

Soyez le premier à donner votre avis sur cette source.

Vue 5 500 fois - Téléchargée 296 fois

Description

le programme tire les 6 boules et les affichent sous forme de boules et de grille

Source / Exemple :


/*  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 */

Conclusion :


/* PROGRAMME EN C SOUS DOS TURBO C++2 BORLAND
ecrit le 03-07-2002 par cmarsc
BOULES DE LOTO MODE GRAPHIQUE */

Codes Sources

A voir également

Ajouter un commentaire Commentaire
Messages postés
157
Date d'inscription
jeudi 17 octobre 2002
Statut
Membre
Dernière intervention
11 septembre 2004

et le zip ?

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.