////////////////////////////////////////////////////////////////////
// Choice reaction time test
// (c) jcl / oP group 2010
////////////////////////////////////////////////////////////////////
var key_number;
PANEL* panel =
{
digits (260,200,1,"Arial#150b",1,key_number);
flags = OUTLINE;
}
TEXT* text =
{
font = "Arial#30b";
string("Choice reaction time test\nPress number key when number appears\nAny key to start");
pos_x = 10; pos_x = 10;
}
SOUND* beep2 = "beep2.wav";
/////////////////////////////////////////////////////////////////////
function main()
{
screen_size.x = 600;
screen_size.y = 600;
screen_color.blue = 150;
video_window(NULL,NULL,0,"Choice Reaction Time Test");
random_seed(0);
// reaction test loop
while(1)
{
// any key to start
set(text,SHOW);
while (!key_any) wait(1);
reset(text,SHOW);
// start reaction test
var key_time = 0;
var loop;
for (loop = 0; loop < 5; loop++)
{
// wait a random time until number appears
reset(panel,SHOW);
wait(-2 - random(2));
// display a random number between 1 and 5
key_number = 1 + integer(random(5));
snd_play(beep2,100,0);
set(panel,SHOW);
timer();
// wait until key is pressed
while (!key_any) wait(1);
// wrong key -> blink red and repeat
if (key_number != str_to_num(str_for_key(NULL,key_lastpressed)))
{
var i;
for (i=0; i<3; i++) {
vec_set(panel.blue,COLOR_RED);
wait(-0.1);
vec_set(panel.blue,COLOR_WHITE);
wait(-0.1);
}
loop--;
continue;
}
// build average time over 5 loops
key_time += timer()/5;
}
reset(panel,SHOW);
str_printf((text.pstring)[0],
"Average choice reaction time: %.3f seconds\nEsc to quit, other key to restart",
((double)key_time)/1000000.);
// wait until key released
while (key_any) wait(1);
}
}