HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1030
aoi数字を一定時間表示して消えるように9解決


aoi

リンク

2008/10/30(Thu) 08:57:25|NO.20493

先日、選択反応課題のスクリプトについて質問したaoiです。
今度は、"+"の後に表示される数字を、1秒提示したら自動的に消えて、また"+"が出て次の
数字が表示される・・・それが*TIME2で設定した時間続く、というものにしたいのです。
どのようにすればよいでしょうか。以下はこれまでに作ったスクリプトです。長くて
すみません。

pre
mondaisuu = 1000
sdim R,20,mondaisuu
sdim correct,20,mondaisuu
screen 0,1020,700,0,0,0,1020,700
cls
log = ""
notesel log
seitousuu = 0
randomize
xx=0
repeat mondaisuu
x=rnd(9)
R.xx =str(x)
xx=xx+1
loop
pos 500, 500
button "Start", *ready
stop
*ready
font "MS 明朝", 40 , 1
cls
mouse -1
i=0
gosub *TIME1
*mon01
j = i
gosub *matu
pos 500,300
font "MS ゴシック", 45,
mes R.j
gosub *RTs
osu=""
repeat
stick res
if res&256 {
osu="T"
gosub *RTe
break
}
if res&512 {
osu="F"
gosub *RTe
break
}
await 1: loop
correct=""
if R.j=0: correct="T":else :correct="F"
if correct == osu { ; 真偽値が判断とあっている場合
seitousuu += 1 ; 正答数に1を加える
noteadd R.j+"\t"+correct+"\t○\t"+jikan
; ログに追加記録
}
else { ; 真偽値と判断が違っている場合
noteadd R.j+"\t"+correct+"\t×\t"+jikan; ログに追加記録
}
bsave "kekka", R.j
cls
i=i+1
gosub *TIME2
if i<mondaisuu : goto *mon01
*owari
screen 0,1000,1000
mouse
pos 10,10
font "MS 明朝",32
mes "これで終わりです。"
font "MS 明朝",12
seitouritu = seitousuu*10000/mondaisuu
seisuu = seitouritu/100
syousuu = seitouritu\100
mes log
yy=gettime(0)
mm=gettime(1)
dd=gettime(3)
hh=gettime(4)
mn=gettime(5)
ss=gettime(6)
itu = "log"+yy+mm+dd+"-"+hh+mn+ss+".txt"
bsave itu,log
button "End", *owari2
stop
*owari2
end
*matu
font "MS 明朝", 48,
pos 500,300
mes "+"
wait 100 ; 10ms 単位で停止 100 x 10ms = 1000ms
cls
wait 50
return
*RTs
hajime = 0
ji = 0
hun = 0
byou = 0
miri = 0
ji=gettime(4)
hun=gettime(5)
byou=gettime(6)
miri=gettime(7)
hajime = (hun*60000)+(byou*1000)+miri
return
*RTe
kokomade = 0
jikan = 0
jie = 0
hune = 0
byoue = 0
mirie = 0
jie=gettime(4)
hune=gettime(5)
byoue=gettime(6)
mirie=gettime(7)
kokomade = (hune*60000)+(byoue*1000)+mirie
ji < jie ; kokomade =+ 3600000
jikan = kokomade - hajime
return
*TIME1
start.time = 0
jie=gettime(4)
hune=gettime(5)
byoue=gettime(6)
mirie=gettime(7)
start.time= (hune*60000)+(byoue*1000)+mirie
return
*TIME2
jie=gettime(4)
hune=gettime(5)
byoue=gettime(6)
mirie=gettime(7)
now.time= (hune*60000)+(byoue*1000)+mirie
if now.time-start.time>60*1000: gosub *owari
return
pre



この記事に返信する


f(浮気中)

リンク

2008/10/30(Thu) 11:38:40|NO.20496

出来ているように見えるのだが。

入力待ちの最中に時間切れで終了させたいなら、
メインのループのrepeat-loopの中でtime2呼べば良いんでね。



あまま

リンク

2008/10/30(Thu) 15:59:53|NO.20500

> 入力待ちの最中に時間切れで終了させたいなら、
> メインのループのrepeat-loopの中でtime2呼べば良いんでね。
終了ではなくて入力があってもなくても
1秒経ったら次に行かせたいという意味じゃないですか?

と勝手に解釈して・・・
*TIME2で制限時間の設定が出来ているようなので
1秒待つのもそれと同じことをすればいいと思います。


*mon01
j = i gosub *matu pos 500,300 font "MS ゴシック", 45, mes R.j gosub *RTs // ↓追加 ここから hajime2 = hajime // ↑追加 ここまで osu="" repeat // ↓追加 ここから gosub *RTs if hajime - hajime2 > 1000 :break // ↑追加 ここまで stick res if res&256 { osu="T" gosub *RTe break } if res&512 { osu="F" gosub *RTe break } await 1: loop // 以下省略

↑のように3行追加すればいいと思います。


それと質問とは関係ありませんが
このスクリプトだと開始する時間によっては
(たとえば開始時間が23時59分59.999秒の場合とか)
永遠に終わらないこともありえる気が・・・・



aoi

リンク

2008/10/31(Fri) 00:01:04|NO.20514

ありがとうございます!
提示していただいた3行を加えて数字の提示が思い通りになりました。

のですが、今度はファイルに結果を書き込む際に反応時間(RT)が記録
されなくなってしまいました・・・
*RTのところで不備が出てしまうのでしょうか。



あまま

リンク

2008/10/31(Fri) 00:26:41|NO.20515

失礼。。。
見逃してました。。。

追加した行のせいでhajimeの値を
何度も更新してしまっているので
*RTeの最後のhajimeをhajime2に
書き換えれば大丈夫だと思います。



aoi

リンク

2008/11/2(Sun) 15:43:27|NO.20569

遅くなりましたが、反応時間をちゃんと記録できました。
ありがとうございます!!

もう1つ、教えていただきたいのですが、0(ゼロ)の数字が出たときに
左クリックすれば結果に○と書かれ、0以外の数字が出てきたときに
左クリックすると×、しなければ○と記録されるようにするには、
どうすればよいでしょうか。



あまま

リンク

2008/11/2(Sun) 20:08:12|NO.20577

> もう1つ、教えていただきたいのですが、0(ゼロ)の数字が出たときに
> 左クリックすれば結果に○と書かれ、0以外の数字が出てきたときに
> 左クリックすると×、しなければ○と記録されるようにするには、
> どうすればよいでしょうか。

stickとif文で左クリックと右クリックの
入力情報を取得できているようですし
入力無しの場合も解決できたようですので、
それらに更にif文を入れて表示している数字によって
下記のように条件分けすればできると思いますよ。

左クリックした場合 かつ 表示している数字が0 ○を記録
左クリックした場合 かつ 表示している数字が0じゃない ×を記録
入力されなかった場合 かつ 表示している数字が0じゃない ならば ○を記録



aoi

リンク

2008/11/2(Sun) 23:25:21|NO.20584

ありがとうございます。

> 入力されなかった場合 かつ 表示している数字が0じゃない ならば ○を記録"
"入力されなかった場合"はどのように書けばよいか教えていただけますか。



あり

リンク

2008/11/3(Mon) 00:41:08|NO.20587

>"入力されなかった場合"はどのように書けばよいか教えていただけますか。
stickで使っている変数を表示してみれば分かると思います。
下のスクリプトを起動して、クリックしてみて下さい。

repeat stick k title ""+k ;今kに入っている値 if k!0 :mes k await 66 loop



aoi

リンク

2008/11/3(Mon) 19:52:57|NO.20599

ありがとうございます。
!を使ってなんとかできました。



ONION software Copyright 1997-2023(c) All rights reserved.