Simulation de plusieurs tirages du jeu de joker (lotto)

Description

Voici donc un programme qui fait plusieurs tirage du jeu de joker et nous affiche les dépenses, les gains et les bénéfices. On doit simplement entrer ce qu'on veut jouer, puis on donne un intervalle entre deux tirages en ms, et le programme fait les tirages aléatoirement et nous affiche nos résultats.
On a donc deux champs à remplir, puis on clique sur "valider" pour lancer le programme, que l'on peut stopper à tout moment grâce au bouton "pause".

Ce qu'on retrouve dans cette source :
- Création de fonction
- Création de procédure
- Gestion d'un timer
- utilisation de la fonction random
- structure conditionnel
- utilisation de la fonction val

Cette source apporte donc les connaissances ci-dessus, et le programme en lui-même démontre qu'il est rare de gagner à un tel jeu.

Source / Exemple :


{=======================================================================
    Fichier : unit1.pas
    Auteur : Stéphane Haimet
    Crée le 05/01/2009
    Modifié le 05/01/2009

    Description : Simulateur de gain au jeu du joker, Simplement pour
    la demonstration du fait qu'on n'est rarement gagnant.
=======================================================================}

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls;

type
  TfJoker = class(TForm)
    GroupBox1: TGroupBox;
    eJeu1: TEdit;
    eJeu2: TEdit;
    eJeu3: TEdit;
    eJeu4: TEdit;
    eJeu5: TEdit;
    eJeu6: TEdit;
    eJeu7: TEdit;
    GroupBox2: TGroupBox;
    eTirage1: TEdit;
    eTirage2: TEdit;
    eTirage3: TEdit;
    eTirage4: TEdit;
    eTirage5: TEdit;
    eTirage6: TEdit;
    eTirage7: TEdit;
    GroupBox3: TGroupBox;
    Label2: TLabel;
    eCorrect: TEdit;
    Label3: TLabel;
    eGains: TEdit;
    GroupBox4: TGroupBox;
    Label6: TLabel;
    eDepenses: TEdit;
    Label7: TLabel;
    eGainTot: TEdit;
    GroupBox5: TGroupBox;
    lBenefice: TLabel;
    GroupBox6: TGroupBox;
    bValider: TBitBtn;
    bPause: TBitBtn;
    bFerer: TBitBtn;
    Label4: TLabel;
    Label5: TLabel;
    Edit2: TEdit;
    eNombre: TEdit;
    eInterval: TEdit;
    Timer1: TTimer;
    procedure tirer();  
    function verifierEntrees():boolean;
    procedure FormCreate(Sender: TObject);
    procedure bValiderClick(Sender: TObject);
    procedure bPauseClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var  
  fJoker: TfJoker;
  var depense: integer;
  var gainTot,benefice: real;

implementation
{$R *.dfm}

//Procédure "tirer()" qui va faire le plus gros du boulot
procedure TfJoker.tirer();
var i: integer;
begin
  depense := depense+1;
  i := 0;

  //TRANSFERT DES NBRES JOUE DANS LES EDITS
  eJeu1.Text := eNombre.Text[1];
  eJeu2.Text := eNombre.Text[2];
  eJeu3.Text := eNombre.Text[3];
  eJeu4.Text := eNombre.Text[4];
  eJeu5.Text := eNombre.Text[5];
  eJeu6.Text := eNombre.Text[6];
  eJeu7.Text := eNombre.Text[7];

  //TIRAGE ALEATOIRE, on tire nos 7 numéros et on les affiche
  randomize;
  eTirage1.text := inttostr(random(9)+1);
  eTirage2.text := inttostr(random(9)+1);
  eTirage3.text := inttostr(random(9)+1);
  eTirage4.text := inttostr(random(9)+1);
  eTirage5.text := inttostr(random(9)+1);
  eTirage6.text := inttostr(random(9)+1);
  eTirage7.text := inttostr(random(9)+1);

  //COMPARAISON : si le premier chiffre est bon, on passe au suivant, ...
  if (eJeu7.Text = eTirage7.Text) then
  begin
   i := i+1;
   if (eJeu6.Text = eTirage6.Text) then
   begin
     i := i+1;
     if (eJeu5.Text = eTirage5.Text) then
     begin
       i := i+1;
       if (eJeu4.Text = eTirage4.Text) then
       begin
         i := i+1;
         if (eJeu3.Text = eTirage3.Text) then
         begin
           i := i+1;
           if (eJeu2.Text = eTirage2.Text) then
           begin
             i := i+1;
             if (eJeu1.Text = eTirage1.Text) then
             begin
               i := i+1;
             end;
           end;
         end;
       end;
     end;
   end;
  end;

  //On note le nombre de chiffre correct
  eCorrect.text := floattostr(i);

  //On regarde le total des gains pour ce tirage :
  case i of
    0 : eGains.Text := '0';
    1 : eGains.Text := '2,50';
    2 : eGains.Text := '10';
    3 : eGains.Text := '50';
    4 : eGains.Text := '500';
    5 : eGains.Text := '5000';
    6 : eGains.Text := '50000';
    7 : eGains.Text := '1000000';
  end;
  //On calcul le total des gains
  gainTot := gainTot+strtofloat(eGains.Text);

  //On affiche les dépenses, et le gain total, on calcul le bénéfice
  eDepenses.text := inttostr(depense);
  eGainTot.text := floattostr(gainTot);
  benefice := gainTot-depense;

  //On affiche le bénéfice en vert si c'est positif, en rouge sinon
  if(benefice >= 0) then
    lBenefice.Font.Color := clGreen
  else
    lBenefice.Font.Color := clRed;

  lBenefice.Caption := '€ ' + floattostr(benefice);

end;

//Fonction qui vérifie nos deux édits au moment où on clique sur "valider"
function TfJoker.verifierEntrees(): boolean;
var x, err, x2, err2 : integer;
begin
  val(eNombre.text,x,err);
  val(eInterval.text,x2,err2);
    
  //Vérification de la longueur de la chaine entrée pour le jeu
  if(length(eNombre.Text) < 7) then
    result := true
  //On regarde si on n'a pas de champs vides
  else if ((eNombre.text = '') OR (eInterval.text = '')) then
    result := true
  //On regarde si eNombre est un entier
  else if (err <> 0) then
    result := true
  //On regarde si eInterval est un entier
  else if (err2 <> 0) then
    result := true       
  else
    result := false;  //pas d'erreur ici
end;

//Quand on clique sur le bouton "pause" on désactive le timer
procedure TfJoker.bPauseClick(Sender: TObject);
begin
  Timer1.Enabled := false;
  bValider.Enabled := true;
end;

//Quand on clique sur le bouton valider
procedure TfJoker.bValiderClick(Sender: TObject);
var erreur : boolean;
begin
  //On regarde si on n'a pas d'erreur grâce à notre fonction
  erreur := verifierEntrees();

  //Si on n'a aucune erreur :
  if(not erreur) then
  begin
  //on desactive le bouton valider, on active le timer, et on défini l'interval
    bValider.Enabled := false;
    Timer1.Enabled := true;
    Timer1.Interval := strtoint(eInterval.Text);
    tirer();
  end
  //Sinon on affiche un message d'erreur
  else
    messagedlg('Erreur dans les champs à remplir', mtWarning, [mbOK], 0);
end;

//A la création de l'application, toutes les variables globales à 0
procedure TfJoker.FormCreate(Sender: TObject);
begin
  depense := 0;
  gainTot := 0;
  benefice := 0;
  Timer1.Enabled := false;
  bValider.Enabled := true;
end;

end.

Conclusion :


Enjoy

Codes Sources

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.