Grilles de loto version dev c++ 4

Contenu du snippet

Ce programme vous permet de tirer des numeros manuellement ou automatiquement, et de vérifier si vous avez gagné en comparant vos grilles et les résultats de la FRANCAISE DES JEUX LOTO.

Source / Exemple :


//  PROGRAMME EN C SOUS DOS DEV C++ 4
//  ecrit le 07-06-2002 par cmarsc  
//  GRILLES DE LOTO

 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.c>
#include <ctype.h>
#include <time.h>
#include <dos.h>

#define ENTER                13    // touches du clavier ENTREE
#define ESC                  27    // ESC
#define F1                   59    // Fonction F1
#define F2                   60    // Fonction F2
#define F3                   61    // Fonction F3
#define F4                   62    // Fonction F4
#define LEFT                 75    // fleche gauche
#define RIGHT                77    // fleche droite
#define UP                   72    // fleche monter
#define DOWN                 80    // fleche descendre

// temps d'attente entre les grilles en millisecondes 1000  = 1 seconde
#define VITESSE_TIRAGE      395    
#define VITESSE              50    // ralentir l'affichage

#define NBRE_LIGNES          17
#define COL_MENU             20
#define LIGNE_MENU            6

#define NBRE_NUMEROS_TIRES    6
#define NBRE_GRILLES		  8
#define NBRE_GAGNANT          3
#define NUMERO_MAX           50

#define COUL_ECRAN           155
#define COUL_FOND            63 
#define COUL_BOULES		     31
#define COUL_CURSEUR	     110
#define	COUL_INVITE          154
#define COUL_COMPL           78 
#define COUL_BAR_PROGRESSE   238

static int numero_tire[NBRE_NUMEROS_TIRES];
static int mes_numeros_tires[NBRE_GRILLES][NBRE_NUMEROS_TIRES];
static int trouves[NBRE_GRILLES][NBRE_NUMEROS_TIRES+2];

static int numero_deja_tire[NUMERO_MAX];

int c_mon_choix(void);
void effacer_ecran(void);
void effet_effacer(char *menu[],int col, int ligne);

void color(int couleur);
void menu_principal (int col, int ligne);
void afficher_menu(char *menu[],int col, int ligne, int effet, int couleur);

void tirer_6_numeros(int type_tirage,int grille_numero);
int trier( const void *nombre1, const void *nombre2);

void afficher_grille(int col,int ligne,int grille_numero,int effet);
void afficher_numero_dans_grille(int col,int ligne,int grille_numero);

void afficher_mes_numeros(void);

int AFFICHER_RESULTATS_LOTO(int curs_y, int coul_curs,int box);
void entree_clavier_RESULTATS_LOTO(void);

int verifier_concordances(int numero_du_tirage);
void afficher_aide(int col, int ligne);

enum reponse {NON, OUI};
enum mon_choix {TIRER = 1, CONSULTER = 3, TIRAGES_FD_JEUX, NUMEROS_TROUVES};
char *tirage[] = {NULL,"Premier" , "Deuxieme"};

static int mon_choix_principal = 0;
static int NUMERO_DU_TIRAGE_LOTO = 0;

// initialiser le tableau avec les resultats de la FRANCAISE DES JEUX
struct RESULTATS_LOTO_FD_JEUX {    // FD_JEUX = francaise des jeux

	int   num_tirage;
	char  date_tirage[11];
	int   premier_2eme_tirage;

			union BOULES_SORTIES {   // 6 boules + complementaire
				  int  numero[NBRE_NUMEROS_TIRES + 1];
			} BOULES;

	char  numero_joker[7];

} RESULTATS_LOTO [] = {
//³ Nø ³Date tirage ³1/2³ B1 ³ B2 ³ B3 ³ B4 ³ B5 ³ B6 ³comp³ NøJoker ³

{ 27, "03-04-2002",  1, 15, 38, 29, 18,  43,   6,  36, ""},
{ 27, "03-04-2002",  2, 36, 24, 33, 38,  15,   7,  25, "3655671"},
{ 28, "06-04-2002",  1, 16, 25, 19,  9,   4,   2,  34, ""},
{ 28, "06-04-2002",  2, 15, 10,  2,  8,  13,  28,  25, "4308966"},
{ 29, "10-04-2002",  1,  4, 13, 12, 47,  35,  42,  21, ""},
{ 29, "10-04-2002",  2, 27,  9, 36, 22,  46,  23,  20, "4186603"},
{ 30, "13-04-2002",  1, 12, 24, 30,  1,  38,  11,   2, ""},
{ 30, "13-04-2002",  2, 34, 15,  8, 18,  22,  33,  23, "0620308"},
{ 31, "17-04-2002",  1, 15, 31, 11,  7,  27,  44,  28, ""},
{ 31, "17-04-2002",  2, 15, 27,  6, 33,  26,  24,  23, "2114795"},
{ 32, "20-04-2002",  1, 46, 34, 11, 20,  16,   5,  39, ""},
{ 32, "20-04-2002",  2, 33,  3, 20, 41,  11,   6,  25, "0253876"},
{ 33, "24-04-2002",  1, 36, 25, 10, 26,  41,  16,  39, ""},
{ 33, "24-04-2002",  2, 44, 13, 32, 16,  49,  33,  23, "2478121"},
{ 34, "27-04-2002",  1, 12, 44, 24, 37,  20,  11,  10, ""},
{ 34, "27-04-2002",  2, 12, 29,  2, 16,   4,  48,  33, "3926446"},
{ 35, "01-05-2002",  1, 12, 38, 17, 16,  18,  14,   5, ""},
{ 35, "01-05-2002",  2, 11, 39,  4, 34,  16,   3,  46, "5933436"},
{ 36, "04-05-2002",  1, 22, 13, 38,  7,  46,  34,  19, ""},
{ 36, "04-05-2002",  2, 39, 31, 15,  5,  34,   6,  20, "7728862"},
{ 37, "08-05-2002",  1, 35, 10, 31, 23,   6,  33,  14, ""},
{ 37, "08-05-2002",  2,  8, 42, 44, 32,  22,  27,  41, "1948780"},
{ 38, "11-05-2002",  1, 23, 38, 44, 48,  47,   9,  40, ""},
{ 38, "11-05-2002",  2, 14, 22, 35, 46,  23,  45,  12, "6215850"},
{ 39, "15-05-2002",  1, 32, 18, 39, 22,  30,   1,  12, ""},
{ 39, "15-05-2002",  2, 47, 36, 45, 22,  39,  42,   3, "9573339"},
{ 40, "18-05-2002",  1, 11, 48, 30, 13,  31,  37,  32, ""},
{ 40, "18-05-2002",  2, 25, 34,  1, 46,   6,  24,  41, "2813674"},      
{ 41, "22-05-2002",  1, 34, 19, 42, 49,  46,  28,  41, ""},
{ 41, "22-05-2002",  2, 39, 31,  9, 36,  22,  43,  46, "2187988"},
{ 42, "25-05-2002",  1,  6,  8, 32, 27,  29,  24,  18, ""},
{ 42, "25-05-2002",  2, 38, 31,  5,  4,  20,  33,  34, "9639100"},
{ 43, "29-05-2002",  1, 21,  5, 39, 32,  38,  36,  22, ""},
{ 43, "29-05-2002",  2,  5, 10,  8,  9,  11,  20,  39, "1361775"},
{ 44, "01-06-2002",  1, 38,  1, 28,  8,  19,   4,  45, ""},
{ 44, "01-06-2002",  2, 46,  5, 40,  1,  47,  27,  33, "4192113"},
{ 45, "05-06-2002",  1, 32, 12,  8, 34,  28,  30,  36, ""},
{ 45, "05-06-2002",  2, 34, 12, 20,  8,  13,   9,  15, "2160503"},

{ 46, "08-06-2002",  1, 34, 42, 49,  1,  19,   6,   7, ""},
{ 46, "08-06-2002",  2, 35, 13, 26, 11,   5,  15,   8, "5218755"},
{ 47, "12-06-2002",  1, 29, 36,  1,  2,  35,  41,  48, ""},
{ 47, "12-06-2002",  2, 35, 21, 37, 27,  43,  30,  42, "9447659"},
{ 48, "15-06-2002",  1, 21, 30, 34,  2,  42,  45,  15, ""},
{ 48, "15-06-2002",  2, 40, 42, 45, 33,  28,  23,  21, "2625949"},
{ 49, "19-06-2002",  1, 32, 34,  2,  7,  29,  13,  41, ""},
{ 49, "19-06-2002",  2, 14, 36, 13, 27,  17,   8,  19, "7697848"},
{ 50, "22-06-2002",  1, 37, 13,  7, 31,  35,   3,   9, ""},
{ 50, "22-06-2002",  2, 25,  2, 10, 26,  23,  44,  47, "3299826"},
{ 51, "26-06-2002",  1,  3,  9, 37, 19,  10,  32,  12, ""},
{ 51, "26-06-2002",  2, 38, 25, 12, 20,  43,  26,  34, "9725177"},
{ 52, "29-06-2002",  1, 34, 38, 39, 45,   9,  42,  15, ""},
{ 52, "29-06-2002",  2, 25,  2, 44, 12,  13,  10,  35, "9085115"},
{ 53, "03-07-2002",  1, 33, 31, 19,  9,   1,  39,   2, ""},
{ 53, "03-07-2002",  2, 40, 22, 32, 13,  19,  37,  11, "3826789"},
{ 54, "06-07-2002",  1, 15,  9, 17, 34,  27,  22,   7, ""},
{ 54, "06-07-2002",  2, 10, 29, 22,  2,  35,  41,  48, "8401726"},
{ 55, "10-07-2002",  1,  7, 38,  8, 11,  26,  22,  37, ""},
{ 55, "10-07-2002",  2,  2, 34, 16, 40,   8,  10,  15, "9981090"},
{ 56, "13-07-2002",  1, 25,  4, 41,  2,  22,  48,  15, ""},
{ 56, "13-07-2002",  2 ,13, 46, 29, 43,  45,  17,  49, "1733531"},
{ 57, "17-07-2002",  1,  7,  3, 28, 22,  44,  23,  16, ""},
{ 57, "17-07-2002",  2, 12,  7, 23, 25,  32,  47,  49, "9040735"},
{ 58, "20-07-2002",  1, 12, 48, 20, 25,  10,   2,  11, ""},
{ 58, "20-07-2002",  2,  9, 13, 47, 38,  16,  12,  10, "2422204"},
{ 59, "24-07-2002",  1, 24,  7, 49, 19,  21,  46,  11, ""},
{ 59, "24-07-2002",  2, 19, 33,  6, 18,  16,   4,  48, "0225225"},
{ 60, "27-07-2002",  1, 29, 33, 19, 46,  44,  21,  11, ""},
{ 60, "27-07-2002",  2, 42, 45, 47,  9,  18,  20,  28, "8925914"},
{ 61, "31-07-2002",  1, 17,  6, 39, 11,  16,  46,  22, ""},
{ 61, "31-07-2002",  2, 38, 45, 31, 42,  21,  41,  44, "6300290"},
};                                                 

int main(void) {

	menu_principal(COL_MENU ,LIGNE_MENU);
	// entrer au clavier du choix principal
	c_mon_choix();

return EXIT_SUCCESS;
}

void effacer_ecran(void) {
	int i1;

   // supprimer le curseur clignotant
	_setcursortype(_NOCURSOR);
	color(COUL_ECRAN); 

    for (i1 = 1; i1 < 25; i1++) {
       gotoxy (1, 25); cprintf("%80c\n",'\0');
    }    
}

void color(int couleur) {

	textcolor (couleur);

} // fin de la fonction color

void afficher_menu(char *menu[],int col, int ligne, int effet, int couleur) {

	 int i1, i2;
  if (effet == OUI) {

	 for (i2 = 0; i2 <= strlen(menu[1]) ; ++i2) {

		for (i1 = 0; menu[i1] != NULL; ++i1) {

		   if (i2) {
			  color(BLACK); // dessiner l'ombre
			  gotoxy (col+i2,1+ligne +i1);
			  cprintf("%2c",219);
		   }

		   color(couleur);
		   gotoxy(col,ligne + i1);
		   cprintf( "%1s", strlen(menu[i1]) + menu[i1] -i2);

		} // fin for (i1)

		 sleep(3);

	 } // fin for (i2)

  } else {
		// afficher menu sans effet
		for (i1 = 0; menu[i1] != NULL; ++i1) {

		   color(BLACK); // dessiner l'ombre
          
		   gotoxy (col+strlen(menu[i1]),1+ligne +i1);
		   cprintf("%2c",'\0');
           
          if (i1 ==20) {
		   gotoxy (col+1,1+ligne +i1);
		   cprintf("%27c",'\0');            
          }

		   color(COUL_FOND);
		   gotoxy(col,ligne + i1 );
		   cprintf( "%s", menu[i1]);
		}

  } // fin if effet == OUI
return ;

} // fin de la fonction afficher_menu

void menu_principal(int col, int ligne) {

	char *menu[] = {
	  "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿",
	  "³ 1) Tirer les numeros automatiquement..³",
	  "³ 2) Tirer les numeros manuellement.....³",
	  "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´",
	  "³ 3) Consulter mes numeros..............³",
	  "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´",
	  "³ 4) Tirages de la FRANCAISE DES JEUX...³",
	  "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´",
	  "³ 5) Quitter le programme...............³",
	  "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ",
	  NULL,
	};

	 effacer_ecran();

	 color(COUL_FOND);
	 afficher_menu(menu, col, ligne + 1,OUI,COUL_FOND);

	 // tester si la fonction est active
	if (!mes_numeros_tires[0][0]) color(55);

     // texte en gris non actif
	 gotoxy (col+1,1+ligne + 4);
	 cprintf("%0.39s",menu[4]+1);

	color(27);
	gotoxy (col+10,ligne );
	cprintf(" Faites votre choix ");

return ;
};   //fin de la fonction menu_principal

int c_mon_choix(void) {

	char mon_choix;
	int i1;

	// emplacement de la grille en colonne
	int position_grille_x;

	// emplacement de la grille en ligne
	int position_grille_y;
	mon_choix = '0';
	while (mon_choix != 27) {

		mon_choix = getch();

		switch(mon_choix) {

		case '1':   // tirage automatique ou manuel
		case '2':

			effacer_ecran();
			mon_choix_principal = TIRER;

			for (i1 = 0; i1 < NBRE_GRILLES; i1++) {

					 // tirage automatique      tirage manuel
   (mon_choix == '1') ? tirer_6_numeros(1,i1) : tirer_6_numeros(2,i1);

			position_grille_x = 52;  // colonne
			position_grille_y = 2;   // ligne

        	afficher_grille(position_grille_x,position_grille_y,i1,OUI);
			
			if (mon_choix == '1') sleep(VITESSE_TIRAGE); 

			} // fin de for

			menu_principal(COL_MENU ,LIGNE_MENU);
		
		break;

		case '3':
			mon_choix_principal = CONSULTER;
			afficher_mes_numeros();
		break;

		case '4':

			 mon_choix_principal = TIRAGES_FD_JEUX;
			 effacer_ecran();
			 entree_clavier_RESULTATS_LOTO();
		break;
                 
		case '5':     // quitter le programme
		case ESC:
        if (mon_choix) return EXIT_SUCCESS;
		break;
 
		default:
		break;
		} // fin de switch()
  
	} // fin de while()

return EXIT_SUCCESS;
}    //fin de la fonction c_mon_choix

void tirer_6_numeros(int type_tirage,int grille_numero){

	int i0, i1,i3, numero_ok, col,ligne;
	int numero_tire1,SELECTIONNER_A;
	char votre_choix,votre_choix2,nombre[2];
	time_t t;

	i1 = i3 = 0;
	numero_ok  = 0;
	numero_tire1 = 0;
	col = 17;  ligne = 9;

	// selectionner les 6 premiers sortis au moins 40 fois
	SELECTIONNER_A = 40;

	srand((unsigned) time(&t));

	color (COUL_ECRAN);
	gotoxy(col,ligne+4); cprintf("%31c",'\0');
    

for (i1 = 0;i1 <= NUMERO_MAX; i1++) {

	// initialiser a zero
	if (i1 <= NBRE_NUMEROS_TIRES) {
		numero_tire[i1] = 0;
		trouves[grille_numero][i1] = 0;
		mes_numeros_tires[grille_numero][i1] = 0;
	}
	numero_deja_tire[i1] = 0;
}

	gotoxy(col ,ligne);

if (type_tirage == 1)  // tirage automatique
	cprintf(" Selection des numeros en cours ");
else 
	cprintf("%7cENTREZ LES NUMEROS%6c",'\0','\0');

	color (COUL_FOND);

for (i1 = 0; i1 <= ligne+2; i1++) {
           
	color (COUL_ECRAN);
	gotoxy(col,24-i1); cprintf("%31c",'\0');
	color (COUL_FOND);

	gotoxy(col,21-i1); cprintf("ÚÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄ¿");
	gotoxy(col,22-i1); cprintf("³%4c³%4c³%4c³%4c³%4c³%4c³",
							   '\0','\0','\0','\0','\0','\0');
	gotoxy(col,23-i1); cprintf("ÀÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÙ");

    sleep(10);
}

while (numero_ok < NBRE_NUMEROS_TIRES ) {

	if (type_tirage == 1) {  // tirage automatique

tirer_un_autre_numero:
		 
		// tirer les numeros pseudo aleatoirement
		numero_tire1 = rand() % (NUMERO_MAX);

		// tester si numero valide sinon en tirer un autre
		if (!numero_tire1 || (numero_tire1 > NUMERO_MAX)) {
			 goto tirer_un_autre_numero;
		}

		// compter le nombre de fois que le numero sort
		numero_deja_tire[ numero_tire1 ]++;

		if ( numero_deja_tire[ numero_tire1 ] == SELECTIONNER_A) {

			numero_tire[numero_ok]	= numero_tire1;
			color (COUL_BAR_PROGRESSE);

			gotoxy(col+(numero_ok*30) / NBRE_NUMEROS_TIRES,ligne+4);
			cprintf("ÛÛÛÛÛÛ");  // barre de progression

			++numero_ok;
		}

		i1++;
		if (! (i1 % 6) ) i3 = 0;

		i3 += 5;            // se placer dans la bonne case
		color (COUL_FOND);
		gotoxy(col-3 +i3 ,ligne+2);    cprintf("%2d", numero_tire1);

		for (i0 = 0; i0 <30; i0++) {
			gotoxy(1,1); cprintf("");
		}

	} else {              // debut tirage manuel

	i3 += 5;              // se placer dans la bonne case
votre_choix2 = '0';
numero_deja_tape:
	_setcursortype(_NORMALCURSOR);
	color (COUL_FOND);
	gotoxy(col-3+i3,ligne+2);

	votre_choix = getch();
	if (isdigit(votre_choix)) cprintf("%2c",votre_choix);

	// annuler la tache puis retourner au menu principal
	if (votre_choix == ESC || votre_choix2 == ESC) return;

	votre_choix2 = getch();

	sprintf(nombre,"%c%c",votre_choix,votre_choix2);
	nombre[2] = '\0';

	numero_tire1 = atoi(nombre);  // convertir char en entier

// Verifier si le nombre est valide (de 1 a 49)
if (numero_tire1 <= 0 || numero_tire1 > NUMERO_MAX-1) {
erreur1:
	color (78);  nombre[2] = '\0';
   gotoxy(col,ligne+4); cprintf("ERREUR : ENTREZ UN AUTRE NUMERO");

   do {
   } while(!kbhit());

	color (COUL_ECRAN);
	gotoxy(col,ligne+4); cprintf("%31c",'\0');
goto numero_deja_tape;
}
	// compter le nombre de fois que le numero sort
	numero_deja_tire[ numero_tire1 ]++ ;

	// Verifier si le nombre tape l'est deja
	if (numero_deja_tire[ numero_tire1 ] > 1 ) goto erreur1;

	numero_tire[numero_ok] = numero_tire1;
	gotoxy(col-3+i3,ligne+2);
	cprintf("%2d",numero_tire[numero_ok]);

	++numero_ok;          // compter les numeros arreter a 6

	}
}

	  // quicksort algorithme de tri dans stdlib.h
	 qsort((void *)numero_tire,
	 NBRE_NUMEROS_TIRES, sizeof(numero_tire[0]), trier);

	 // copier les numeros tires tries
	 for (i1 = 0 ; i1 < NBRE_NUMEROS_TIRES; ++i1) {
		mes_numeros_tires[grille_numero][i1] = numero_tire[i1];
	 }

	 for (i1 = 0 , i3 = 5; i1 < NBRE_NUMEROS_TIRES; ++i1,i3 += 5) {

		gotoxy(col-3+i3 ,ligne+2);
		cprintf("%2d",numero_tire[i1]);
	 }

return ;
}  // fin de la fonction tirer_6_numeros

int trier( const void *nombre1, const void *nombre2)
{
   return( strcmp(nombre1,nombre2) );
} // fin de la fonction trier

void afficher_grille(int col,int ligne, int grille_numero,int effet){

static char *menu[] = {
		"ÚÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄ¿",
		"³....³ 10 ³ 20 ³ 30 ³ 40 ³",
		"ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
		"³ 01 ³ 11 ³ 21 ³ 31 ³ 41 ³",
		"ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
		"³ 02 ³ 12 ³ 22 ³ 32 ³ 42 ³",
		"ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
		"³ 03 ³ 13 ³ 23 ³ 33 ³ 43 ³",
		"ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
		"³ 04 ³ 14 ³ 24 ³ 34 ³ 44 ³",
		"ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
		"³ 05 ³ 15 ³ 25 ³ 35 ³ 45 ³",
		"ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
		"³ 06 ³ 16 ³ 26 ³ 36 ³ 46 ³",
		"ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
		"³ 07 ³ 17 ³ 27 ³ 37 ³ 47 ³",
		"ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
		"³ 08 ³ 18 ³ 28 ³ 38 ³ 48 ³",
		"ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
		"³ 09 ³ 19 ³ 29 ³ 39 ³ 49 ³",
		"ÀÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÙ",
		NULL,
	};
	color(COUL_FOND);

	if (effet == OUI) {
		 effet_effacer(menu, col, ligne);

		 color(COUL_FOND);
		 afficher_menu(menu, col, ligne,OUI,COUL_FOND);

	} else {

		 afficher_menu(menu, col, ligne,NON,COUL_FOND);

	} // fin effet == OUI

	 color (COUL_INVITE);

	 gotoxy (col+9,ligne-1);
	 cprintf("Grille %-3d",1 + grille_numero);

	 afficher_numero_dans_grille(col+1,ligne,grille_numero);
return ;
};   // fin de la fonction afficher_grille

void afficher_mes_numeros(void){

static char *tableau[4] = {
"ÚÄÄÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÄÄÄ¿",
"³Grille³ B1 ³ B2 ³ B3 ³ B4 ³ B5 ³ B6 ³Trouves³",
"ÃÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄÄ´",
"ÀÄÄÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÄÄÄÙ"
};

	static int i1, i2, i3, col, ligne, numero1, numero2;
	static int MAX_MENU, curseur_y,curseur_x;
	char votre_choix, votre_choix2,nombre[2];

	col = 2;   ligne = 1;
	MAX_MENU = NBRE_GRILLES;

	effacer_ecran();

	color (COUL_INVITE);
	gotoxy (col+15,ligne);
	cprintf("Mes numeros tires");

   gotoxy (2, 25);
   cprintf("F1 Aide  ESC Menu  F2 MES NUMEROS  F3 TROUVES " //
		 " F4 RESULTATS DES TIRAGES");
debut_tableau_mes_numeros:
	color (COUL_FOND);

	   // dessiner le haut du TABLEAU
		for (i2 = 0; i2 <=2; ++i2) {
			gotoxy (col,1+ligne+i2);     cprintf("%s",tableau[i2]);
		}

debut_afficher_mes_numeros:
	 // afficher mes 6 numeros
	 for (i1 = 0; i1 < NBRE_GRILLES; ++i1) {

		// dessiner le trait de separation
		gotoxy (col,5+ligne+(i1 *2));    cprintf("%s",tableau[2]);

		// afficher le numero de la grille
		gotoxy (col, 4+ligne + (i1*2));  cprintf("³%3d%3c³",1+i1,'\0');

		for (i2 = 0, i3 = 0; i2 < NBRE_NUMEROS_TIRES; ++i2,i3 += 5) {

		   gotoxy (col+8+i3,  4 +ligne + (i1*2));
		   cprintf("%3d%1c³", mes_numeros_tires[i1][i2],'\0');
		}

		// afficher le nombre de numeros gagnants (Trouves)
		gotoxy (col+8+i3, 4+ligne + (i1*2));

		if (trouves[i1][7]) {
			// retirer 1 pour ne pas compter le complementaire
			cprintf("%2d +%2c%c³",trouves[i1][6]-1,'C','\0');
		} else {
			cprintf("%2d%5c³",trouves[i1][6],'\0');
		}

		if (trouves[i1][6] >= NBRE_GAGNANT) {
		   // mettre en evidence si au moins 3 numeros gagnants
		   color (95); // couleur magenta
		   gotoxy (col+8+i3, 4+ligne + (i1*2));

		   if (trouves[i1][7]) {
			  trouves[i1][6]--; // ne pas compter le complementaire     
     
              if (trouves[i1][6] < NBRE_GAGNANT) color (COUL_FOND);
              
			  cprintf("%2d +%2c%c",trouves[i1][6],'C','\0');
		   } else {
			  cprintf("%2d%5c",trouves[i1][6],'\0');
		   }

		// } else {

		} // fin de if (trouves[i1][6] >= NBRE_GAGNANT)

	   color (COUL_FOND);    

	 } // fin de for (i1)
		   // FERMER LE BAS DU TABLEAU
		   gotoxy (col, 3 + ligne+(i1*2));     cprintf("%s",tableau[3]);

	color (COUL_INVITE);

	// afficher les resultats du LOTO DE LA FD_JEUX
	i1 = NUMERO_DU_TIRAGE_LOTO ;
	gotoxy (2,24);
	cprintf("%s Tirage du LOTO nø %d du %s:",

		 tirage[RESULTATS_LOTO[i1].premier_2eme_tirage],
		 RESULTATS_LOTO[i1].num_tirage,
		 RESULTATS_LOTO[i1].date_tirage);

	 // afficher les 6 boules + le complementaire
	 for (i2 = 0, i3 = 0; i2 <= NBRE_NUMEROS_TIRES; ++i2,i3 += 5) {
		gotoxy (46+i3, 24);

		// couleur du numero complementaire
		if (i2 == NBRE_NUMEROS_TIRES) color (COUL_COMPL);

		cprintf(" %2d ", RESULTATS_LOTO[i1].BOULES.numero[i2]);
	 }

	 color (COUL_BOULES);
	 // Placer les numeros TROUVES dans le cadre
	 for (i1 = 0; i1 < NBRE_GRILLES; ++i1) {

		for (i2 = 0, i3 = 0; i2 <= NBRE_NUMEROS_TIRES; ++i2,i3 += 5) {

		 if (i2 < NBRE_NUMEROS_TIRES) {

		   gotoxy (10+i3, 4 + ligne + (i1*2));
		   numero1 = trouves[i1][i2];
		   numero2 = RESULTATS_LOTO[NUMERO_DU_TIRAGE_LOTO].BOULES.numero[6];

		   if (numero1) {

			 // mettre en couleur differente le complementaire
			  if (numero1 == numero2) {
				 color (COUL_COMPL);
			  } else {
				 color (COUL_BOULES);
			  }

				cprintf(" %2d ", trouves[i1][i2]);
		   } // fin de if (numero1)

		 } // fin de if (i2 < NBRE_NUMEROS_TIRES)
		
       } // fin de for (i2)
  
	 } // fin de for (i1)

   votre_choix = '0';
   while (votre_choix != ESC) {

	   if (curseur_y < 0)          curseur_y = MAX_MENU-1;
	   if (curseur_y >= MAX_MENU)  curseur_y = 0;

	   if (curseur_x < 0)  curseur_x = NBRE_NUMEROS_TIRES-1;
	   if (curseur_x >= NBRE_NUMEROS_TIRES)  curseur_x = 0;

	   afficher_grille(52,2,curseur_y,NON);

	   color (COUL_CURSEUR);

	   // clignoter si le numero est gagnant
	   if (trouves[curseur_y][curseur_x]) color (206);

	   // deplacements sur boules
	   gotoxy (col+8+(curseur_x*5),  4 +ligne + (curseur_y*2));
	   cprintf("%3d%1c", mes_numeros_tires[curseur_y][curseur_x],'\0');

	   votre_choix = getch();

	   if (isdigit(votre_choix)) { // tester si c'est un chiffre

			color (COUL_FOND);
			gotoxy (col+8+(curseur_x*5), 4 +ligne + (curseur_y*2));
			cprintf("%3c ",votre_choix);
			votre_choix2 = getch();

			sprintf(nombre,"%c%c",votre_choix,votre_choix2);
			numero1 = atoi(nombre);
			nombre[2] = '\0';

				if (numero1 > 0 && numero1 < NUMERO_MAX)
				   mes_numeros_tires[curseur_y][curseur_x] = numero1;

			goto debut_afficher_mes_numeros;

	   } // if isdigit(votre_choix)

	   if (votre_choix != ESC && votre_choix != F1) {

 	   color (COUL_FOND); 
     
   	     if (trouves[curseur_y][curseur_x]) {
          // retablir la couleur du numero
           if (mes_numeros_tires[curseur_y][curseur_x] ==
               RESULTATS_LOTO[NUMERO_DU_TIRAGE_LOTO].BOULES.numero[6])
               color (COUL_COMPL);
            else
               color (COUL_BOULES);
         } 
        // deplacements sur boules
	   gotoxy (col+8+(curseur_x*5), 4 +ligne + (curseur_y*2));
	   cprintf("%3d%1c", mes_numeros_tires[curseur_y][curseur_x],'\0');

	   }

	   switch(votre_choix) {

	   case UP:           // monter avec la fleche
		   --curseur_y;
	   break;

	   case DOWN:         // descendre avec la fleche
		   ++curseur_y;
	   break;
	   case LEFT:         // aller vers la gauche
		   --curseur_x;
	   break;

	   case RIGHT:        // aller vers la droite
		   ++curseur_x;
	   break;
	   case F1:  afficher_aide(5,5);    
       goto debut_tableau_mes_numeros;
        break;
	   case F2:  mon_choix_principal = CONSULTER; break;
	   case F3:  mon_choix_principal = NUMEROS_TROUVES;   break;

	   case F4:
			 effacer_ecran();
			 mon_choix_principal = TIRAGES_FD_JEUX;
			 entree_clavier_RESULTATS_LOTO();
			 if (votre_choix)  return ;
	   break;

	   case ESC:
			menu_principal (COL_MENU ,LIGNE_MENU);
			if (votre_choix)  return ;
			break;

	   default:
	   break;

	   } // switch(votre_choix)

   } // while (votre_choix != ESC)

return ;
}  // fin de la fonction afficher_mes_numeros

int AFFICHER_RESULTATS_LOTO(int curs_y, int coul_curs,int box) {
static char *tableau[4] = {
   "ÚÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄÂÄÄÄÄ¿",
   "³Date tirage³ B1 ³ B2 ³ B3 ³ B4 ³ B5 ³ B6 ³comp³",
   "ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´",
   "ÀÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÁÄÄÄÄÙ"
};
	static int MAX_MENU;   // nbre maximum de lignes dans le menu
	int i1, i2, i3, i5, col,ligne;
	col = 2;   ligne = 2;
MAX_MENU = sizeof RESULTATS_LOTO / sizeof(struct RESULTATS_LOTO_FD_JEUX)-1;

	 if (box == OUI) {
			 color (COUL_INVITE);
			 gotoxy (col + 10,1);
			 cprintf("Resultats des tirages du LOTO");

			 gotoxy (20,25);
			 cprintf("ESC Menu  ENTREE pour lancer l'EXECUTION");

			 color(COUL_FOND);

		   // dessiner le le haut du TABLEAU
			for (i2 = 0; i2 <=2; ++i2) {
				gotoxy (col,ligne+i2);   cprintf("%s",tableau[i2]);
			}
	 } // fin if (box == OUI)

	   i1 = curs_y;
	   i5 = (curs_y % (NBRE_LIGNES));

	color (coul_curs);
	gotoxy (col,3+ligne + i5);
if (i1 <= MAX_MENU) {

	cprintf("³%s ³", RESULTATS_LOTO[i1].date_tirage);

	 // afficher les 6 boules + le complementaire
	 for (i2 = 0, i3 = 0; i2 <= NBRE_NUMEROS_TIRES; ++i2,i3 += 5) {
		gotoxy (col+13+i3,3 + ligne + i5);
		cprintf(" %2d ³", RESULTATS_LOTO[i1].BOULES.numero[i2]);
	 }
	color (COUL_INVITE);

	gotoxy (col, 4 + ligne + NBRE_LIGNES);

	cprintf("Tirage N%3d %13s tirage", RESULTATS_LOTO[i1].num_tirage,
			 tirage[RESULTATS_LOTO[i1].premier_2eme_tirage]);

	// afficher le JOKER
   if (RESULTATS_LOTO[i1].premier_2eme_tirage == 2)
	   cprintf(" N Joker %0.7s", RESULTATS_LOTO[i1].numero_joker);
   else
	   cprintf("%16c",'\0');

} else {
	// lignes vides
	cprintf("³%11c³%4c³%4c³%4c³%4c³%4c³%4c³%4c³",
	'\0','\0','\0','\0','\0','\0','\0','\0');

} // fin if ( i1 < MAX_MENU)

	 if (box == OUI) {  // FERMER LE BAS DU TABLEAU
		color (coul_curs);
		gotoxy (col,3+ligne+NBRE_LIGNES);   cprintf("%s",tableau[3]);
	 }

return MAX_MENU;

}  // fin de la fonction AFFICHER_RESULTATS_LOTO

void entree_clavier_RESULTATS_LOTO(void) {

   char votre_choix;
   static int curs_y = 0;
   static int dep = 0;
   int i1, PAGE_SUIVANTE;
   int MAX_MENU;     // nbre maximum de lignes dans le menu
   PAGE_SUIVANTE = OUI;

   MAX_MENU = AFFICHER_RESULTATS_LOTO(dep,COUL_FOND,OUI);

   votre_choix = '0';
   while (votre_choix != ESC) {

	   if (curs_y < 0)           curs_y = 0;
	   if (curs_y >=  MAX_MENU)  curs_y = MAX_MENU;

	   if (PAGE_SUIVANTE == OUI) {

		  for (i1 = 0; i1 < NBRE_LIGNES; ++i1) {
			 AFFICHER_RESULTATS_LOTO(i1+dep,COUL_FOND,NON);
		  }
		  PAGE_SUIVANTE = NON;

	   } // fin if (PAGE_SUIVANTE)

	   AFFICHER_RESULTATS_LOTO(curs_y,COUL_BOULES,NON);

	   afficher_grille (52,2,curs_y,NON);

	   votre_choix = getch();

	   if (votre_choix != ENTER) {

	   AFFICHER_RESULTATS_LOTO(curs_y,COUL_FOND,NON);

       }

	   switch(votre_choix) {

	   case UP:          // monter avec la fleche
		   --curs_y;
		   if ( (curs_y % NBRE_LIGNES) == NBRE_LIGNES-1) {
				dep = curs_y - (NBRE_LIGNES-1);
				PAGE_SUIVANTE = OUI;
			}
	   break;
	   case DOWN:        // descendre avec la fleche
		   ++curs_y;
		   if ( (curs_y % NBRE_LIGNES) == 0 ) {
			   dep = curs_y;
			   PAGE_SUIVANTE = OUI;
			}

	   break;
	   case ENTER:
			if (!mes_numeros_tires[0][0]) {
			   // si le tableau est sans numeros
			   color(27);
			   gotoxy(2,1);
			   cprintf("VOUS DEVEZ TIRER LES NUMEROS AU PREALABLE");

			   do {
			   } while (!kbhit());
			   menu_principal (COL_MENU ,LIGNE_MENU);

			} else {
			mon_choix_principal = NUMEROS_TROUVES;

			NUMERO_DU_TIRAGE_LOTO = curs_y;
			verifier_concordances (NUMERO_DU_TIRAGE_LOTO);
			}
			if (votre_choix)  return ;
			break;
	   case ESC:
			// retourner menu principal
			menu_principal (COL_MENU ,LIGNE_MENU);
			if (votre_choix)  return ;
			break;

	   default:
	   break;

	   } // switch()

   }  // fin while (votre_choix != ESC)
return ;
} // fin de la fonction entree_clavier_RESULTATS_LOTO

void afficher_numero_dans_grille(int col,int ligne, int grille_numero) {

	int i1 , i2 , i3, i4,numero1;
	i2 = 0; i4 = 0;

	color (COUL_BOULES);

	for (i1 = 0; i1 < NUMERO_MAX; ++i1,  i2 = ( !(i1 % 10 ) ) ? i2 += 5 : i2 )  {

		// calculer la position du numero dans la grille
		 gotoxy (col + i2 ,1 + ligne + ( (i1 % 10) * 2) );

		if (i1) {    // N'afficher que les nombres positifs

			for (i3 = 0; i3 <= NBRE_NUMEROS_TIRES; ++i3) {

			switch(mon_choix_principal) {

			case TIRER:
			case CONSULTER:

			   // afficher mes 6 numeros tires
			   if (i3 < NBRE_NUMEROS_TIRES) {
				  numero1 = mes_numeros_tires[grille_numero][i3];
			   } else {
				  numero1 = 0;
			   }

			break;

			case TIRAGES_FD_JEUX:

			   numero1 = RESULTATS_LOTO[grille_numero].BOULES.numero[i3];

		  // mettre le NUMERO COMPLEMENTAIRE en evidence
	  if (numero1 == RESULTATS_LOTO[grille_numero].BOULES.numero[6] ) {

		color (COUL_COMPL);

	  } else {

	   color (COUL_BOULES);

	  }  // fin de if en evidence
			break;

			case NUMEROS_TROUVES:
			   if (i3 < NBRE_NUMEROS_TIRES) {
				  numero1 = trouves[grille_numero][i3];
			   } else {
				  numero1 = 0;
			   }

			break;

			default:
			break;
			} // fin de switch()

				 if (i1 == numero1) {
					// compter le nombre de numero afficher en couleur
					++i4;
					cprintf("%1c%2d%1c",'\0',numero1,'\0');
				 }

			} // fin de for (i3)

			if (i4 == NBRE_NUMEROS_TIRES + 1) return;  // fin de tache

		} // fin  N'afficher que les nombres positifs

	} // fin de for (i1)

	return ;
} 	//fin de la fonction afficher_numero_dans_grille

int verifier_concordances(int numero_du_tirage) {

	int trouvees;
	int i0, i1 , i2 , i3, numero1, numero2;

	 // initialiser a zero
	for (i1 = 0; i1 < NBRE_GRILLES; ++i1) {
		for (i2 = 0; i2 <= NBRE_NUMEROS_TIRES+1; ++i2) {
		   trouves[i1][i2] = 0;
		}
	 }

for (i0 = 0; i0 < NBRE_GRILLES; ++i0) {  // grille numero

	trouvees = 0;
	trouves[i0][7] = NON;    // complementaire

	for (i1 = 0; i1 <= NBRE_NUMEROS_TIRES; ++i1) {

		for (i3 = 0; i3 < NBRE_NUMEROS_TIRES; ++i3) {

		   numero1 = mes_numeros_tires[i0][i3];
		   numero2 = RESULTATS_LOTO[numero_du_tirage].BOULES.numero[i1];

		   // rechercher les concordances
		   if (numero1 == numero2) {
     
	// detecter le numero complementaire 
	if (numero1 == (RESULTATS_LOTO[numero_du_tirage].BOULES.numero[6])) {
		trouves[i0][7] = OUI;
	}                     

			  trouvees++;
			  trouves[i0][i3] = numero1;

		 } // fin if (numero1 == numero2)

		// nbre numeros gagnants
		trouves[i0][6] = trouvees;

		} // fin de for (i3)

	} // fin de for (i1)

}  // fin de for (i0)

	 afficher_mes_numeros();

return trouvees;
} // fin de la fonction verifier_concordances

void afficher_aide(int col, int ligne) {

	char clavier;
    int i1;

char *menu[] = {
   "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿",
   "³ F2 Affiche mes numeros tires dans la grille........................³",
   "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´",
   "³ F3 Affiche les numeros gagnants en couleur dans le tableau et dans.³",
   "³ la grille, le nombre est inscrit dans la colonne du TABLEAU Trouves³",
   "³ avec un C si le numero Complementaire est present dans mes numeros.³",
   "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´",
   "³ F4 Affiche le tableau avec les numeros des differents tirages de la³",
   "³ FRANCAISE DES JEUX : RESULTATS OFFICIELS DU LOTO...................³",
   "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´",
   "³ ................Appuyez sur ESC pour revenir.......................³",
   "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ",
   NULL,
};

   afficher_menu(menu, col, ligne,OUI,159);

   do {   // appuyer sur ESC
	  clavier = getch();
   } while (clavier != ESC);

    color (COUL_ECRAN);
    for (i1 = ligne; i1 <= 17; i1++) {
       gotoxy (48, i1); cprintf("%4c",'\0');
    } // effacer cadre de l'aide

return ;
}

void effet_effacer(char *menu[],int col, int ligne) {

	 int i1, i2;
	 color(COUL_ECRAN);

	 for (i2 = 0; i2 <= strlen(menu[1]) ; ++i2) {

		for (i1 = 0; i1 <= 21; ++i1) {
		   gotoxy((col+strlen(menu[0]))-1 - i2,ligne + i1 );
		   cprintf( "%3c", '\0');
		}
		sleep(1);
	 }

return ;
} // fin de la fonction effet_effacer

Conclusion :


// PROGRAMME EN C SOUS DOS DEV C++ 4
// ecrit le 07-06-2002 par cmarsc
// GRILLES DE LOTO

SI VOUS TROUVEZ DES BOGUES

A voir également

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.