Apparation aléatoire d'une image

Résolu
cs_alaga Messages postés 17 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 28 octobre 2008 - 24 oct. 2008 à 16:03
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 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.

D'avance merci beaucoup !!

alaga

9 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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..

cantador
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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'

voilà en gros ce qu'il y a à faire.

cantador
0
cs_alaga Messages postés 17 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 28 octobre 2008
26 oct. 2008 à 19:51
Salut !

merci pour ta réponse mais ça reste un peu flou ...

En fait, je voudrait que la frequence d'apparition soit aléatoire ... Pour le reste je vais essayer ...

Alaga
0
cs_alaga Messages postés 17 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 28 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_alaga Messages postés 17 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 28 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;

Help (encore) !

Merci

alaga
0
cs_alaga Messages postés 17 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 28 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 ....

Merci

Alaga
0
cs_alaga Messages postés 17 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 28 octobre 2008
28 oct. 2008 à 12:43
Avec ça

DecodeTime(Time,Hour, Min, Sec, MSec);
tim:=IntToStr(Msec);

C'est bon

Bon Delphi !

Alaga
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 oct. 2008 à 16:57
parfait !
@+
cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 oct. 2008 à 17:06
juste un truc,
tu peux aussi faire apparaître aléatoirement une lettre de l'alphabet...

cantador
0
Rejoignez-nous