Défilement [Résolu]

Signaler
Messages postés
87
Date d'inscription
mercredi 1 octobre 2008
Statut
Membre
Dernière intervention
28 avril 2009
-
 Utilisateur anonyme -
Bonsoir à tous et à toutes,

Voilà, j'ai un programme qui me permet d'afficher trois dés selon la valeur de ces derniers.
(3 images reliées à 3 NumLabel dont la valeur est aléatoirement choisie entre 1 et 6)

Mais, seule l'image de la face liée au numéro s'affiche et je voudrais pouvoir faire défiler les image dans un ordre aléatoire pour enfin s'arrêter sur la valeur choisie.

Genre, l'image affiche 1, puis 3, puis 4, puis 6 et hop! le 5, la valeur tirée au hasard!!! (lOl)

J'ai essayé via ces lignes de code mais sans succès^^ (Tourne en rond et plante :p)

       a:=random(6)+1;
       nlDe1.Value:=random(6)+1;
       while nlDe1.Value<>a do
       Des();     => Tant que De1 est différent de 'a' appliquer 'Des()', fonction que j'ai crée qui affecte à chaque valeur l'image correspondante.
       if nlDe1.Value=a
       then Des();   => Si De1 = a alors afficher son Dé.

Bon, c'est tiré par les cheveux :p Mais qui ne tente rien, n'a rien :P

Merci d'avance.
Bonne soirée.
Cordialement,
NivekR

10 réponses

Messages postés
87
Date d'inscription
mercredi 1 octobre 2008
Statut
Membre
Dernière intervention
28 avril 2009

Merci de ta réponse, cela m'a donné une idée et ai réussi^^

L'idée de la liste est bonne mais elle ne me donnait que de petites images :s

J'ai trafficoté le lancé via :

{Lancé n°1}
procedure TJeu1.Lance1Click(Sender: TObject);

begin
Lance1.Enabled:=false;
Lance2.Enabled:=true;
imDe1.Visible:=true;
imDe2.Visible:=true;
imDe3.Visible:=true;
nlDe1.Value:=(random(6)+1);
nlDe2.Value:=(random(6)+1);
nlDe3.Value:=(random(6)+1);
DU:=(Random(6)+1);
DD:=(Random(6)+1);
DT:=(Random(6)+1);
Repeat
    Sleep(10);
    nlDe1.Value:=(random(6)+1);
    nlDe2.Value:=(random(6)+1);
    nlDe3.Value:=(random(6)+1);
    Des();
    imDe1.Refresh;
    imDe2.Refresh;
    imDe3.Refresh;
Until (DU=nlDe1.Value) and (DD=nlDe2.Value) and (DT=nlDe3.Value);
end;
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
Salut
Que contient De() ?
Peut-on avoir plus (tout ?) de code ?
merci
Messages postés
87
Date d'inscription
mercredi 1 octobre 2008
Statut
Membre
Dernière intervention
28 avril 2009

Voici le code d'origine (sans l'essai^^)

unit Jeu_du_421;

interface

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

type
  TJeu1 = class(TForm)
    Lance1: TButton;
    Lance2: TButton;
    Lance3: TButton;
    Score: TButton;
    Aide: TLabel;
    Combinaisons: TLabel;
    Score_J1: TLabel;
    Score_J2: TLabel;
    Points1: TLabel;
    Points2: TLabel;
    imDe1: TImage;
    imDe2: TImage;
    imDe3: TImage;
    Recommencer: TButton;
    Quitter: TButton;
    De1: TCheckBox;
    De2: TCheckBox;
    De3: TCheckBox;
    nlDe1: TNumLabel;
    nlDe2: TNumLabel;
    nlDe3: TNumLabel;
    ScoreJ1: TNumLabel;
    ScoreJ2: TNumLabel;
    Fond: TImage;
    procedure QuitterClick(Sender: TObject);
    procedure AideClick(Sender: TObject);
    procedure CombinaisonsClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RecommencerClick(Sender: TObject);
    procedure imDe1Click(Sender: TObject);
    procedure imDe2Click(Sender: TObject);
    procedure imDe3Click(Sender: TObject);
    procedure Lance1Click(Sender: TObject);
    procedure Lance2Click(Sender: TObject);
    procedure Lance3Click(Sender: TObject);
    procedure ScoreClick(Sender: TObject);
    procedure Des();
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Jeu1: TJeu1;
 
implementation

{$R *.dfm}
{$R DesRes.res}

//Procedures indirectes :
{Ouverture}
procedure TJeu1.FormCreate(Sender: TObject);
begin
Randomize();
ShowMessage('Bienvenue et bonne chance');
ShowMessage('Pour de plus amples informations voyez l''"Aide". Pour les règles, lisez les "Combinaisons".');
end;

{Fermeture}
procedure TJeu1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage('Au revoir et à bientôt!');
end;

//Procédures liées au click sur mot :
{"Aide"}
procedure TJeu1.AideClick(Sender: TObject);
begin
ShowMessage('Voici le déroulement du jeu.');
ShowMessage('1°) Cliquez sur "Lancé n°1".');
ShowMessage('2°) Une fois les dés affichés, cliquez sur ceux que vous voulez garder.');
ShowMessage('3°) Faites de même avec les lancés 2 et 3.');
ShowMessage('4°) Une fois le 3ème lancé effectué, cliquez sur "Score".');
ShowMessage('5°) Votre score et celui de votre adversaire vont s''affichés dans les cases correspondantes.');
end;

{"Combinaisons"}
procedure TJeu1.CombinaisonsClick(Sender: TObject);
begin
ShowMessage('Voici les différentes combinaisons possibles et leur équivalent en points.');
ShowMessage('Le 421 vaut 10 points!');
ShowMessage('Le 111 en vaut 7.');
ShowMessage('Les combinaisons 666 et 611 valent 6 points.');
ShowMessage('Les 555 et 511 vous en donnent 5.');
ShowMessage('Le 444 et le 411 donnent 4 points.');
ShowMessage('Avec 333 et 311 vous aurez 3 points.');
ShowMessage('Avec 222, 211, 123, 234, 345 et 456 vous en aurez 2.');
ShowMessage('Enfin, les autres combinaisons valent 1 point...');
end;

//Procédure créée :
procedure TJeu1.Des();
begin
if nlDe1.Value=1
then imDe1.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_1');
if nlDe1.Value=2
then imDe1.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_2');
if nlDe1.Value=3
then imDe1.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_3');
if nlDe1.Value=4
then imDe1.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_4');
if nlDe1.Value=5
then imDe1.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_5');
if nlDe1.Value=6
then imDe1.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_6');
if nlDe2.Value=1
then imDe2.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_1');
if nlDe2.Value=2
then imDe2.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_2');
if nlDe2.Value=3
then imDe2.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_3');
if nlDe2.Value=4
then imDe2.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_4');
if nlDe2.Value=5
then imDe2.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_5');
if nlDe2.Value=6
then imDe2.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_6');
if nlDe3.Value=1
then imDe3.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_1');
if nlDe3.Value=2
then imDe3.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_2');
if nlDe3.Value=3
then imDe3.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_3');
if nlDe3.Value=4
then imDe3.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_4');
if nlDe3.Value=5
then imDe3.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_5');
if nlDe3.Value=6
then imDe3.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'ID_IMAGE_6');

end;
//Procédures liées aux boutons :
{Recommencer}
procedure TJeu1.RecommencerClick(Sender: TObject);
begin
Lance1.Enabled:=true;
Lance2.Enabled:=false;
Lance3.Enabled:=false;
Score.Enabled:=false;
imDe1.Visible:=false;
imDe2.Visible:=false;
imDe3.Visible:=false;
De1.Checked:=false;
De2.Checked:=false;
De3.Checked:=false;
nlDe1.Value:=6;
nlDe2.Value:=6;
nlDe3.Value:=6;
ScoreJ1.Value:=0;
ScoreJ2.Value:=0;
end;

{Quitter}
procedure TJeu1.QuitterClick(Sender: TObject);
begin
Close;
end;

{Lancé n°1}
procedure TJeu1.Lance1Click(Sender: TObject);
begin
Lance1.Enabled:=false;
Lance2.Enabled:=true;
imDe1.Visible:=true;
imDe2.Visible:=true;
imDe3.Visible:=true;
nlDe1.Value:=(random(6)+1);
nlDe2.Value:=(random(6)+1);
nlDe3.Value:=(random(6)+1);
Des();
end;

{Lancé n°2}
procedure TJeu1.Lance2Click(Sender: TObject);
begin
Lance2.Enabled:=false;
Lance3.Enabled:=true;
if (De1.Checked=true) and (De2.Checked=true) and (De3.Checked=true)
then begin
nlDe1.Enabled:=false;
nlDe2.Enabled:=false;
nlDe3.Enabled:=false;
end
else
if (De1.Checked=false) and (De2.Checked=false) and (De3.Checked=false)
then begin
nlDe1.Value:=(random(6)+1);
nlDe2.Value:=(random(6)+1);
nlDe3.Value:=(random(6)+1);
end
else
if (De1.Checked=true) and (De2.Checked=false) and (De3.Checked=false)
then begin
nlDe1.Enabled:=false;
nlDe2.Value:=(random(6)+1);
nlDe3.Value:=(random(6)+1);
end
else
if (De1.Checked=true) and (De2.Checked=true) and (De3.Checked=false)
then begin
nlDe1.Enabled:=false;
nlDe2.Enabled:=false;
nlDe3.Value:=(random(6)+1);
end
else
if (De1.Checked=true) and (De2.Checked=false) and (De3.Checked=true)
then begin
nlDe1.Enabled:=false;
nlDe2.Value:=(random(6)+1);
nlDe3.Enabled:=false;
end
else
if (De1.Checked=false) and (De2.Checked=true) and (De3.Checked=true)
then begin
nlDe1.Value:=(random(6)+1);
nlDe2.Enabled:=false;
nlDe3.Enabled:=false;
end
else
if (De1.Checked=false) and (De2.Checked=true) and (De3.Checked=false)
then begin
nlDe1.Value:=(random(6)+1);
nlDe2.Enabled:=false;
nlDe3.Value:=(random(6)+1);
end
else
if (De1.Checked=false) and (De2.Checked=false) and (De3.Checked=true)
then begin
nlDe1.Value:=(random(6)+1);
nlDe2.Value:=(random(6)+1);
nlDe3.Enabled:=false;
end;
Des();
end;

{Lancé n°3}
procedure TJeu1.Lance3Click(Sender: TObject);
begin
Lance3.Enabled:=false;
Score.Enabled:=true;
if (De1.Checked=true) and (De2.Checked=true) and (De3.Checked=true)
then begin
nlDe1.Enabled:=false;
nlDe2.Enabled:=false;
nlDe3.Enabled:=false;
end
else
if (De1.Checked=false) and (De2.Checked=false) and (De3.Checked=false)
then begin
nlDe1.Value:=(random(6)+1);
nlDe2.Value:=(random(6)+1);
nlDe3.Value:=(random(6)+1);
end
else
if (De1.Checked=true) and (De2.Checked=false) and (De3.Checked=false)
then begin
nlDe1.Enabled:=false;
nlDe2.Value:=(random(6)+1);
nlDe3.Value:=(random(6)+1);
end
else
if (De1.Checked=true) and (De2.Checked=true) and (De3.Checked=false)
then begin
nlDe1.Enabled:=false;
nlDe2.Enabled:=false;
nlDe3.Value:=(random(6)+1);
end
else
if (De1.Checked=true) and (De2.Checked=false) and (De3.Checked=true)
then begin
nlDe1.Enabled:=false;
nlDe2.Value:=(random(6)+1);
nlDe3.Enabled:=false;
end
else
if (De1.Checked=false) and (De2.Checked=true) and (De3.Checked=true)
then begin
nlDe1.Value:=(random(6)+1);
nlDe2.Enabled:=false;
nlDe3.Enabled:=false;
end
else
if (De1.Checked=false) and (De2.Checked=true) and (De3.Checked=false)
then begin
nlDe1.Value:=(random(6)+1);
nlDe2.Enabled:=false;
nlDe3.Value:=(random(6)+1);
end
else
if (De1.Checked=false) and (De2.Checked=false) and (De3.Checked=true)
then begin
nlDe1.Value:=(random(6)+1);
nlDe2.Value:=(random(6)+1);
nlDe3.Enabled:=false;
end;
Des();
end;

//Choix des dés
{Dé 1}
procedure TJeu1.imDe1Click(Sender: TObject);
begin
if De1.Checked=false
then De1.Checked:=true
else De1.Checked:=false;
end;

{Dé 2}
procedure TJeu1.imDe2Click(Sender: TObject);
begin
if De2.Checked=false
then De2.Checked:=true
else De2.Checked:=false;
end;

{Dé 3}
procedure TJeu1.imDe3Click(Sender: TObject);
begin
if De3.Checked=false
then De3.Checked:=true
else De3.Checked:=false;
end;

{Score}
procedure TJeu1.ScoreClick(Sender: TObject);
var Scor: Array [0..25] of Integer;
begin
Scor[0]:=1;
Scor[1]:=1;
Scor[2]:=1;
Scor[3]:=1;
Scor[4]:=1;
Scor[5]:=1;
Scor[6]:=1;
Scor[7]:=1;
Scor[8]:=1;
Scor[9]:=1;
Scor[10]:=2;
Scor[11]:=2;
Scor[12]:=2;
Scor[13]:=2;
Scor[14]:=2;
Scor[15]:=2;
Scor[16]:=3;
Scor[17]:=3;
Scor[18]:=4;
Scor[19]:=4;
Scor[20]:=5;
Scor[21]:=5;
Scor[22]:=6;
Scor[23]:=6;
Scor[24]:=7;
Scor[25]:=10;

Score.Enabled:=false;
ScoreJ2.Value:=Scor[random(26)];

if ((nlDe1.Value=4) and (nlDe2.Value=2) and (nlDe3.Value=1)) or ((nlDe1.Value=4) and (nlDe2.Value=1) and (nlDe3.Value=2))
or ((nlDe1.Value=2) and (nlDe2.Value=4) and (nlDe3.Value=1)) or ((nlDe1.Value=2) and (nlDe2.Value=1) and (nlDe3.Value=4))
or ((nlDe1.Value=1) and (nlDe2.Value=4) and (nlDe3.Value=2)) or ((nlDe1.Value=1) and (nlDe2.Value=2) and (nlDe3.Value=4))
then ScoreJ1.Value:=10
else
if ((nlDe1.Value=1) and (nlDe2.Value=1) and (nlDe3.Value=1))
then ScoreJ1.Value:=7
else
if ((nlDe1.Value=6) and (nlDe2.Value=6) and (nlDe3.Value=6)) or ((nlDe1.Value=6) and (nlDe2.Value=1) and (nlDe3.Value=1))
or ((nlDe1.Value=1) and (nlDe2.Value=6) and (nlDe3.Value=1)) or ((nlDe1.Value=1) and (nlDe2.Value=1) and (nlDe3.Value=6))
then ScoreJ1.Value:=6
else
if ((nlDe1.Value=5) and (nlDe2.Value=5) and (nlDe3.Value=5)) or ((nlDe1.Value=5) and (nlDe2.Value=1) and (nlDe3.Value=1))
or ((nlDe1.Value=1) and (nlDe2.Value=5) and (nlDe3.Value=1)) or ((nlDe1.Value=1) and (nlDe2.Value=1) and (nlDe3.Value=5))
then ScoreJ1.Value:=5
else
if ((nlDe1.Value=4) and (nlDe2.Value=4) and (nlDe3.Value=4)) or ((nlDe1.Value=4) and (nlDe2.Value=1) and (nlDe3.Value=1))
or ((nlDe1.Value=1) and (nlDe2.Value=4) and (nlDe3.Value=1)) or ((nlDe1.Value=1) and (nlDe2.Value=1) and (nlDe3.Value=4))
then ScoreJ1.Value:=4
else
if ((nlDe1.Value=3) and (nlDe2.Value=3) and (nlDe3.Value=3)) or ((nlDe1.Value=3) and (nlDe2.Value=1) and (nlDe3.Value=1))
or ((nlDe1.Value=1) and (nlDe3.Value=6) and (nlDe3.Value=1)) or ((nlDe1.Value=1) and (nlDe2.Value=1) and (nlDe3.Value=3))
then ScoreJ1.Value:=3
else
if ((nlDe1.Value=2) and (nlDe2.Value=2) and (nlDe3.Value=2)) or ((nlDe1.Value=2) and (nlDe2.Value=1) and (nlDe3.Value=1))
or ((nlDe1.Value=1) and (nlDe2.Value=2) and (nlDe3.Value=1)) or ((nlDe1.Value=1) and (nlDe2.Value=1) and (nlDe3.Value=2))
then ScoreJ1.Value:=2
else
if ((nlDe1.Value=1) and (nlDe2.Value=2) and (nlDe3.Value=3)) or ((nlDe1.Value=1) and (nlDe2.Value=3) and (nlDe3.Value=2))
or ((nlDe1.Value=2) and (nlDe2.Value=3) and (nlDe3.Value=1)) or ((nlDe1.Value=2) and (nlDe2.Value=1) and (nlDe3.Value=3))
or ((nlDe1.Value=3) and (nlDe2.Value=1) and (nlDe3.Value=2)) or ((nlDe1.Value=3) and (nlDe2.Value=2) and (nlDe3.Value=1))
then ScoreJ1.Value:=2
else
if ((nlDe1.Value=2) and (nlDe2.Value=3) and (nlDe3.Value=4)) or ((nlDe1.Value=2) and (nlDe2.Value=4) and (nlDe3.Value=3))
or ((nlDe1.Value=3) and (nlDe2.Value=4) and (nlDe3.Value=2)) or ((nlDe1.Value=3) and (nlDe2.Value=2) and (nlDe3.Value=4))
or ((nlDe1.Value=4) and (nlDe2.Value=3) and (nlDe3.Value=2)) or ((nlDe1.Value=4) and (nlDe2.Value=2) and (nlDe3.Value=3))
then ScoreJ1.Value:=2
else
if ((nlDe1.Value=3) and (nlDe2.Value=4) and (nlDe3.Value=5)) or ((nlDe1.Value=3) and (nlDe2.Value=5) and (nlDe3.Value=4))
or ((nlDe1.Value=4) and (nlDe2.Value=3) and (nlDe3.Value=5)) or ((nlDe1.Value=4) and (nlDe2.Value=5) and (nlDe3.Value=3))
or ((nlDe1.Value=5) and (nlDe2.Value=4) and (nlDe3.Value=3)) or ((nlDe1.Value=5) and (nlDe2.Value=3) and (nlDe3.Value=4))
then ScoreJ1.Value:=2
else
if ((nlDe1.Value=4) and (nlDe2.Value=5) and (nlDe3.Value=6)) or ((nlDe1.Value=4) and (nlDe2.Value=6) and (nlDe3.Value=5))
or ((nlDe1.Value=5) and (nlDe2.Value=4) and (nlDe3.Value=6)) or ((nlDe1.Value=5) and (nlDe2.Value=6) and (nlDe3.Value=4))
or ((nlDe1.Value=6) and (nlDe2.Value=4) and (nlDe3.Value=5)) or ((nlDe1.Value=6) and (nlDe2.Value=5) and (nlDe3.Value=4))
then ScoreJ1.Value:=2
else ScoreJ1.Value:=1;

if ScoreJ1.Value>ScoreJ2.Value
then ShowMessage('Félicitation! Tu as gagné.')
else
if ScoreJ1.Value<ScoreJ2.Value
then ShowMessage('Dommage. Tu as perdu...')
else
if ScoreJ1.Value=ScoreJ2.Value
then ShowMessage('Oooh. Égalité!');
end;

end.

Salut,


Exemple non testé pour un seul Dé :


Sur une form un TEdit, un button, un TImage,un TImageList.

Dans le TImageList mettre les 6 images des 6 faces possibles.


Evenement OnClick du TButton :


procedure TForm1.BitBtn1Click(Sender: TObject);

Var

  Value,IndexBitMap:Byte;

begin

  Value:=Random(6); //Renvoit un nombre aléatoirement compris entre 0 et 5

  Edit1.Text:=IntToStr(Value+1); //Afficher sur un TEdit ce nombre augmenté de 1
  For IndexBitMap:=0 To Value Do //Pour toutes les valeurs comprises entre 0 et Value

    Begin

      Sleep(250);  //Attendre 250 ms

      ImageList1.GetBitmap(IndexBitMap,Image1.Picture.Bitmap); //Renvoyer l'image d'index IndexBitMap dans le bitmap de Image 1

      Image1.Refresh; //Rafraichit Image 1

    End;

//ou à la place
 
//ImageList1.GetBitmap(Value,Image1.Picture.Bitmap); //Afficher l'image correspondant à value dans le TImage
end;

Je suppose que tu souhaites faire comme un jeu de jackpot : Donc les faces s'affichent dans le sens 1 2 3 4 5 6

Sinon si tu veux vraiment un affichage aléatoire

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Value,ValueImage:Byte;
begin
  Value:=Random(6);
  Edit1.Text:=IntToStr(Value+1);
  Repeat
    Sleep(250);
    ValueImage:=Random(6);
    ImageList1.GetBitmap(ValueImage,Image1.Picture.Bitmap);
    Image1.Refresh;
   Until ValueImage=Value;
end;

Salut

Si une TImageList ne convient pas et que tu veux utiliser les ressources, pourquoi ne pas utiliser cette procedure :

Procedure RandomImageToTImage(MyEdit:TEdit;MyImage:TImage);
Var
  Value,ValueImage:Byte;
begin
  Value:=Random(6);
  If Assigned(MyEdit) Then
  MyEdit.Text:=IntToStr(Value+1);
  Repeat
    Sleep(250);
    ValueImage:=Random(6);
    If Assigned(MyImage) Then
      Begin
        MyImage.Picture.Bitmap.Handle:=LoadBitmap(hInstance, Pchar(IntToStr(ValueImage)));
        MyImage.Refresh;
      End;
   Until ValueImage=Value;
end;

Tu appelles la procédure ainsi

procedure TJeu1.Lance1Click(Sender: TObject);
Begin
RandomImageToTImage(Edit1,Image1);
RandomImageToTImage(Edit2,Image2);
RandomImageToTImage(Edit3,Image3);
End;
Messages postés
87
Date d'inscription
mercredi 1 octobre 2008
Statut
Membre
Dernière intervention
28 avril 2009

Je te remercie pour tes réponses^^

Mais, le bidouillage que j'ai fait fonctionne bien et utilise les ressources :)
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
Nivek, peux tu améliorer ton code pour pouvoir lancer un dé 100 faces ?
Tu comprendras ton "erreur" ^^
A bientot

Salut,

Je rejoins les remarques de Julio et f0xi : ton code admet moulte bétises

1)Tes  composants ne sont pas renommés : Si dans 6 mois tu dois retoucher ce code, tu vas passer un temps pas possible à savoir qui est qui et quoi fait quoi.

2)Ton code n'a pas d'indentation : il faut l'aérer pour qu'il soit plus lisible et plus compréhensible.

Le code que je t'ai passé en dernier utilise aussi les ressources. Je crée une seule et unique procédure qui est exactement celle que je t'avais passé sauf que
   1)Elle utilise maintenant les ressources (comme tu le souhaitais)
   2)Elle simplifie ton code : Gain de travail, gain de compréhension, optimisation.

Comme Julio te l'a dit : Si tu as 100 faces ou 10 dés, tu devras refaire tout ton travail (et ca va se chiffrer en heures) alors que ma méthode va te permettre de quasiment rien toucher.

Pour être pédagogique, je t'illustre la chose (car je pense que tu n'as pas saisis ):

Voila grosso modo ce que toi tu fais (ca revient au meme)

procedure TJeu1.Lance1Click(Sender: TObject);
Var
  Value,ValueImage:Byte;
begin
  //Phase 1
  Value:=Random(6);
  If Assigned(MyEdit) Then
  MyEdit.Text:=IntToStr(Value+1);
  Repeat
    Sleep(250);
    ValueImage:=Random(6);
    If Assigned(MyImage) Then
      Begin
        MyImage.Picture.Bitmap.Handle:=LoadBitmap(hInstance, Pchar(IntToStr(ValueImage)));
        MyImage.Refresh;
      End;
   Until ValueImage=Value;

  //Phase 2 : on recopie exactement la meme chose
  Value:=Random(6);

  If Assigned(MyEdit) Then

  MyEdit.Text:=IntToStr(Value+1);

  Repeat

    Sleep(250);

    ValueImage:=Random(6);

    If Assigned(MyImage) Then

      Begin

        MyImage.Picture.Bitmap.Handle:=LoadBitmap(hInstance, Pchar(IntToStr(ValueImage)));

        MyImage.Refresh;

      End;

   Until ValueImage=Value;

  //Phase 3 : on recopie exactement la meme chose
  Value:=Random(6);

  If Assigned(MyEdit) Then

  MyEdit.Text:=IntToStr(Value+1);

  Repeat

    Sleep(250);

    ValueImage:=Random(6);

    If Assigned(MyImage) Then

      Begin

        MyImage.Picture.Bitmap.Handle:=LoadBitmap(hInstance, Pchar(IntToStr(ValueImage)));

        MyImage.Refresh;

      End;

   Until ValueImage=Value;
end;

Solution proposée : plutot que de se taper x fois les 13 lignes de codes ce qui ferait 1300 lignes de codes à copier/coller et modifier pour 100 dés ou 100 faces, on créer une unique procédure que l'on rappelle autant de fois que nécessaire :

Procedure RandomImageToTImage(MyEdit:TEdit;MyImage:TImage);
Var
  Value,ValueImage:Byte;
begin
  Value:=Random(6);
  If Assigned(MyEdit) Then
  MyEdit.Text:=IntToStr(Value+1);
  Repeat
    Sleep(250);
    ValueImage:=Random(6);
    If Assigned(MyImage) Then
      Begin
        MyImage.Picture.Bitmap.Handle:=LoadBitmap(hInstance, Pchar(IntToStr(ValueImage)));
        MyImage.Refresh;
      End;
   Until ValueImage=Value;
end;

On a donc 17 lignes. Si on a toujours 100 dés ou 100 faces :

procedure TJeu1.Lance1Click(Sender: TObject);
Begin
RandomImageToTImage(Edit1,Image1);
RandomImageToTImage(Edit2,Image2);
RandomImageToTImage(Edit3,Image3);
..........
RandomImageToTImage(Edit100,Image100);
End;

Soit 103 lignes donc au total 120 lignes.

Ce que je te propose est donc exactement la meme chose sauf que pour 100 dés tu n'auras pas 1300 lignes mais 120 lignes soit le dizieme . Et encore il y aurai encore on pourrait avoir beaucoup moins que ces 120 lignes en faisant les choses dans les regles de l'art.
Messages postés
87
Date d'inscription
mercredi 1 octobre 2008
Statut
Membre
Dernière intervention
28 avril 2009

J'ai essayé ce que vous m'avez proposé mais les dés ne s'affichent même plus...

J'ai copié et collé le code de la proc et ai remplacé le code de mon Lance1 par :

RandomImageToImage(Edit1, imDe1);
RandomImageToImage(Edit2, imDe2);
RandomImageToImage(Edit3, imDe3);

J'ai bien crée les 3 Edit et imDe# sont les noms de mes images. :(

Salut

Chez moi ca fonctionne très bien : Je pense que le problème vient d'ici

MyImage.Picture.Bitmap.Handle:=LoadBitmap(hInstance, Pchar(IntToStr(ValueImage)));

Cette ligne induit que les noms de tes ressources doivent etre

Image 1 : 0 et non ID_IMAGE_1
Image 2 : 1  et non ID_IMAGE_2
......
Image 6 : 5  et non ID_IMAGE_6

le seul hic dans ce que je t'ai filé c'est que les dés se lancent les uns apres les autres : Désolé j'avais pas réfléchit à cela. Cependant avec un peu d'imagination tu peux très bien utiliser un processus similaire qui soit synchrone : je te laisse chercher par toi même .

Ceci dit f0xi t'a fais un cadeau hier soir : un petit jeu de dés . Regarde le lien dans son dernier message et essaye de comprendre le principe .