cs_alaga
Messages postés17Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention28 octobre 2008
-
24 oct. 2008 à 16:03
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
28 oct. 2008 à 17:06
Bonjour !
J'aurais besoin d'un peu d'aide ... J'ai élaboré un code pour ma thèse en psycho (les participants doivent résoudre des problèmes) et j'ai besoin d'y ajouter une seconde tâche. J'aimerai qu'une image (un grand A en fait) apparaisse dans la fenêtre aléatoirement dans le temps et qu'elle disparaisse après l'appui sur une touche. en plus, il faudrait que je puisse récupérer le temps entre l'apparition de l'image et l'appui sur la touche.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 27 oct. 2008 à 12:33
En fait, je voudrait que la frequence d'apparition soit aléatoire ...
random(11) génère aléatoirement des nombres >= 0 et < 11
autrement dit entre 0 et 10
tab : array of integer
randomFrom(tab) renvoie un numéro aléatoire pris dans tab
et un appel à randomize en entrée permet de générer des séries aléatoires.
Tu n'ai pas obligé d'utiliser le temps..tu peux te servir de la fréquence d'apparition de nombres précis dans une boucle:
var
x : integer;
begin Randomize;
Repeat
x: = Random(101)
if (x >=33) and (x <= 66) then ;// Une chance sur 3
Affichage;
Until test de sortie de boucle
end;
Si ça va trop vite, tu peux mettre un sleep(temps en ms) pour ralentir la boucle.
Pour le test de sortie de boucle, c'est à voir :
frappe d'une touche spéciale, compteur etc etc..
Voilà quelques pistes et il y en a certainement beaucoup d'autres..
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 26 oct. 2008 à 12:13
bonjour,
pas très compliqué...
Utilises les fonctions random, randomize pour la partie aléatoire.
(tu colles un label 'A' que tu rends visible ou pas selon une fréquence)
et lorque l'image apparaît tu déclenches un GetTickCount :
Start:=getTickCount; // < ici le top-départ du chrono
et sur détection appui d'une touche :
Tempo.text:=intToStr(getTickCount - Start)+' millisecondes'
cs_alaga
Messages postés17Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention28 octobre 2008 28 oct. 2008 à 11:33
Salut !
D'abord merci pour ton aide mais j'aurais besoin (encore) d'un petit coup de pouce !
En fait, je voudrais que ma lettre apparaisse de temps en temps (et que ce temps soit de manière aléatoire) et que quand on appuie sur échap elle disparaisse. Elle doit réapparaitre après un certain temps (aléatoire aussi) ... Ainsi de suite ...
Voici mon code pour l'instant. Le problème c'est que la lettre réapparaît tout de suite. J'ai essayé avec un timer et comme tu avais noté mais :(
D'avance merci
procedure affichage;
begin
test.lettre.visible:=true ;
Start:=getTickCount;
end;
procedure TTest.Timer1Timer(Sender: TObject);
var x:integer;
begin
randomize;
begin
for x:=0 to 1000 do
test.Timer1.Interval :=random(x);
affichage;
test.labelx.Caption:=IntToStr(x);
end;
end;
procedure TTest.FormKeyDown(Sender: TObject; var Key:word ;
Shift: TShiftState);
begin
if key=VK_ESCAPE then
lettre.Visible:=false;
tps := getTickCount - Start;
tim:=TimeToStr(tps);
test.tpsdt.Text:=tim;
end;
Alaga
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_alaga
Messages postés17Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention28 octobre 2008 28 oct. 2008 à 12:05
Bon, en fait, après quelques essais, ce n'était qu'une question de temps (!). Un intervalle de 1000 est insuffisant (trop rapide). Et aussi, un problème comme d'interférence :
si je ne teste que ma seconde tâche (apparition de la lettre) c'est ok mais si je fais les problèmes en même temps (ce qui est mon but). La lettre ne disparait plus quand j'appuie sur échap.
voici mon nouveau code pour la lette (ce n'est qu'une partie du code complet) :
procedure affichage;
begin
test.lettre.visible:=true ;
Start:=time;
end;
procedure TTest.Timer1Timer(Sender: TObject);
var x:integer;
begin
randomize;
begin
x:=8000;
test.Timer1.Interval :=random(x);
test.labelx.Caption:=IntToStr(Timer1.Interval);
end;
begin
affichage;
end;
end;
procedure TTest.FormKeyDown(Sender: TObject; var Key:word ;
Shift: TShiftState);
begin
if key=VK_ESCAPE then
lettre.Visible:=false;
tps := time - Start;
tim:=TimeToStr(tps);
test.tpsdt.Text:=tim;
test.resultats.Lines.Add(tim);
end;
cs_alaga
Messages postés17Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention28 octobre 2008 28 oct. 2008 à 12:27
Cette fois c'est la bonne ! avec KeyPreview = true ça marche !!
J'ai vu ça sur un forum !
Maintenant, j'ai juste un soucis de mesure du temps. J'ai un Datetime en hrs, min et sec et ce n'est pas assez précis. Je voudrais des millisecondes ....