反応時間を計測するプログラムを書いて見ました。
内容としては、
1.画面中心に点の注視点がある。
2.その注視点上に左右どちらか向きの矢印画像がでる。(1000ms)
3.80%の確率で矢印の方向に四角形がでてくる。
4.20%の確率で矢印とは反対方向に四角形がでてくる。
5.四角形がでてきてから、キーボードの矢印キーで回答する。
6.回答時間を計測する。
7.2〜6を繰り返す。
というものなのですが、
配列を使って3.4.番を制御しようとしたところ、うまくいきませんでした。
考えていたものとしては、配列の中の0~99が全て1回づつ出て、同じ数字はもう出ないように
したつもりなのですが、実行してみたところ、数字に被りが出ます。
どこが間違っているのでしょうか??
この中のプログラムとしては、0~99の数字を1回とり、取った数字は1に代わり、その1は取らない
という風にできていると思っています。
PImage img; int basetime; int response; int state = 0; int iti = 0; int time0 = 0; int num =99; int [] ex = new int[num]; int i = 0; int r = 0; int sikoukaisuu = 1; int RT = 0; int pk; int j; int baai; PrintWriter output; String file_name; void setup() { file_name = nf(year(), 4, 0) + nf(month(), 2, 0) + nf(day(), 2, 0) + nf(hour(), 2, 0) + nf(minute(), 2, 0) + nf(second(), 2, 0)+".csv"; output = createWriter(file_name); fullScreen(); background(200); noStroke(); ellipse(width/2, height/2, 10, 10); basetime = millis(); iti = int(random(1000, 2000)); for (i=0; i<50; i++) { ex[i]=0; } r=int(random(0, 99)); } void draw() { basetime = millis() - time0; if (state==0) { if (ex[r]==0) { ex[r] =1; state=1; } if (ex[r]==1) { r=int(random(0, 99)); } } if (state==1) { if (basetime >= iti) { if (r >= 0 && r <= 9) { ResponcePhase0(); if (basetime - iti >= 1000) { rect1(); //baai = 1; } } if (r >= 10 && r <= 49) { ResponcePhase0(); if (basetime - iti >= 1000) { rect0(); //baai = 2; } } if (r >= 50 && r <= 59) { ResponcePhase1(); if (basetime - iti >= 1000) { rect0(); //baai = 3; } } if (r >= 60 && r <= 99) { ResponcePhase1(); if (basetime - iti >= 1000) { rect1(); //baai = 4; } } } } } void ResponcePhase0() { background(200); img = loadImage("yazi.png"); imageMode(CENTER); image(img, width/2, height/2); } void ResponcePhase1() { background(200); img = loadImage("gyakuyazi.png"); imageMode(CENTER); image(img, width/2, height/2); } void rect0() { background(200); rectMode(CENTER); fill(0); rect(width/3, height/2, 50, 50); j = 1; } void rect1() { background(200); rectMode(CENTER); fill(0); rect(2*width/3, height/2, 50, 50); j = 1; } void keyPressed() { if (j == 1) { if ( keyCode == RIGHT ||keyCode == LEFT ) { if (keyCode == RIGHT) { pk = 1; } if (keyCode == LEFT) { pk = 0; } RT = basetime - iti - 1000; output.print(sikoukaisuu); output.print(","); output.print(r); //output.print(baai); output.print(","); output.print(RT); output.print(","); output.print(pk); output.print("\n"); output.flush(); time0 = millis(); background(200); noStroke(); fill(0); ellipse(width/2, height/2, 10, 10); iti = int(random(1000, 2000)); r=int(random(0, 99)); j = 0; sikoukaisuu ++; if (sikoukaisuu == 101) { exit(); } } } }
あなたの回答
tips
プレビュー