[Delphi 6] comment chronométrer une boucle ? + pb compteur (résolu)

comment chronométrer une boucle ? + pb compteur (résolu) [Delphi 6] - Programmation

Marsh Posté le 09-01-2002 à 23:06:19    

toujours dans mon prog pourri pour apprendre, je fais une boucle qui demande le nombre secret (on ne rit pas :ange:  )...
 
g déjà mis un compteur (qui foire un peu, si on quitte dès la première question y compte ca comme trouvé en 2 essais, mais bon :o )...
 
pour pouvoir faire un calcul de score, j'aurais besoin du temps écoulé entre le moment où le joueur rentre dans le boucle et celui où il en sort, pour pouvoir faire un calcul du score genre nb de 1/(coup * temps) *1000 (pour que plus coup*temps augmente, plus le score diminue :D)
 
moin main.pas donne ca :  
 

Code :
  1. unit Main;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls,ExtCtrls, CPU;
  6. type
  7.   TForm1 = class(TForm)
  8.     Button1: TButton;
  9.     Button3: TButton;
  10.     procedure Button1Click(Sender: TObject);
  11.     procedure Button3Click(Sender: TObject);
  12.   private
  13.     { Private declarations }
  14.   public
  15.     { Public declarations }
  16.   end;
  17. var
  18.     Form1: TForm1;
  19.     LimiteTXT, UserEntry, Disp, textfin : string;
  20.     CpuQuery, Compteur : shortint;
  21.     LimiteNum, UserEntryNum, Nb : integer;
  22.     COntinuer : boolean;
  23. implementation
  24. {$R *.dfm}
  25. procedure TForm1.Button1Click(Sender: TObject);
  26.     begin
  27.     LimiteNum := 1 ;
  28.     CpuQuery :=0 ;
  29.     LimiteTXT := '0' ;
  30.     repeat
  31.     InputQuery('Donnez une limite comprise entre 100 et 300', 'Valeur', LimiteTXT);
  32.     LimiteNum := StrToInt(LimiteTXT);
  33.         if LimiteNum < 100 then
  34.         ShowMessage(LimiteTXT + ' est trop petit : entrez un nombre plus grand')
  35.         else if LimiteNum > 300 then
  36.        ShowMessage(LimiteTXT + ' est trop grand : entrez un nombre plus petit');
  37.     CpuQuery := CpuQuery + 1 ;
  38.         if CpuQuery > 3 then
  39.         ShowMessage ('Il vous a fallu ' + IntToStr(CpuQuery) + ' essais pour y arriver');
  40.     until (LimiteNum >= 100) AND (LimiteNum <= 300);
  41.     end;
  42. LE TIMER DEVRAIT COMMENCER ICI
  43. procedure TForm1.Button3Click(Sender: TObject);
  44.     begin
  45.     UserEntry :='0';
  46.     Compteur := 1;
  47.     Nb := Generation(LimiteNum);
  48.     Continuer := True;
  49.         Repeat
  50.         Continuer:=InputQuery('Entrez un nombre', 'Essai n° '+ inttostr(Compteur), UserEntry);
  51.         UserEntryNum :=strToInt(UserEntry);
  52.         Disp := test(UserEntryNum,Nb);
  53.         Compteur := Compteur +1;
  54.         if (Disp = 'Vous avez entré un nombre trop petit') XOR (Disp = 'Vous avez entré un nombre trop grand') then
  55.         ShowMessage(Disp)
  56.         else
  57.         ShowMessage(Disp + ' en ' + IntToStr(Compteur) + ' coups');
  58.         until (UserEntryNum = Nb) OR (Continuer = False) ici faut que je trouve comment tester continuer = false pour que d'une ca sorte de la boucle (c le cas), mais que ca foute le compteur au bon nombre de coups (0 si on quitte de suite, etc...) et que ca affiche le nombre secret qu'il fallait découvrir
  59.     end;

 

[edtdd]--Message édité par Jubijub--[/edtdd]


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 09-01-2002 à 23:06:19   

Reply

Marsh Posté le 10-01-2002 à 09:38:52    

alors:
 

Code :
  1. var
  2.   before: TDateTime;
  3.   createdTime: int64;
  4.   ...
  5. begin
  6.   ...
  7.   before := now; // début du compteur
  8.   ... // ici tu fais tout ce qui doit être chronométré
  9.   createdTime := MilliSecondsBetween(now,before); // fin du compteur
  10.   ...


 
la variable createdTime contient le nombre de millisecondes écoulées
si nécessaire tu peux mettre les deux variables en global.
l'avantage ici c'est qu'y a aucun timer, donc aucune charge supplémentaire pour le système.

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-01-2002 à 09:54:49    

Ou encore une autre solution qui marche dans divers languages (Windows powa :)) :
 

Code :
  1. uses
  2.   Windows,...;
  3. var
  4. time: DWORD;
  5. ...
  6. begin
  7. ...
  8. time := GetTickCount;
  9. ... // ici tu fais tout ce qui doit être chronométré  
  10. time := GetTickCount-time; // fin du compteur  
  11. ...


 
GetTickCount te renvois des millisecondes...


---------------
A+++ Bruce - http://www.bheller.com
Reply

Marsh Posté le 10-01-2002 à 10:23:37    

ha ouais, c'est vrai que c'est encore plus simple...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 11-01-2002 à 14:30:10    

merci à tous les deux...
 :jap:


---------------
Jubi Photos : Flickr - 500px
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed