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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0723
コマンド以外での文法間違い5未解決


リンク

2018/7/23(Mon) 19:57:01|NO.84844

単純反応時間を計るコマンドで何度か前にも質問し作ったのですが、コマンドから消したところが文法ミスと出ます。
どこがいけないのかみてください。

#uselib "winmm.dll"
#func timeGetTime "timeGetTime"
#func timeBeginPeriod "timeBeginPeriod" int
#func timeEndPeriod "timeEndPeriod" int
timeBeginPeriod 1
randomize;乱数

// 赤丸 コード簡略化のため、あらかじめ背景を灰色に塗り潰しておく
buffer 2,300,300,0 : color 128, 128, 128: boxf
color 255,0,0 : circle 0,0,300,300,1

//縦横600ピクセルの刺激提示用ウィンドウ(ノーマルなもの)を作成
screen 0,600,600,0,0,0

//「スペースを押すと始まります」と提示し、スペース(コード16)を押すと先に進む
mes "スペースを押すと始まります。"
repeat
await 1
stick a
if a=16:break
loop

;保存用ファイル作成
;dataという一時バッファを作成
notesel data
noteadd "試行数,反応時間"
notesave "RTdata.txt"

dim RT, 26; // 反応時間記録用配列変数
//試行開始(25試行。cntは1から)
repeat 25,1
;注視点提示:中央に黒い丸(295,295,305,305の大きさ)を提示する
;cls
await 0; // awaitは前回のウェイトから指定時間待機する命令のため、一旦ここで0ms待機
redraw 0;
color 128, 128, 128: boxf;
color 0, 0, 0: circle 295, 295, 305, 305;
pos 0, 0: mes ""+cnt+"回目"; // 確認用
redraw 1

;待機時間:ランダム
;await rnd(2000)±1000
await 2000 + rnd(2001) - 1000; // 『rnd(2001) - 1000』で -1000〜+1000の範囲になる

// 赤丸を表示
redraw 0
pos 150, 150: gcopy 2, 0, 0, 300, 300
pos 0, 0: mes ""+cnt+"回目"; // 確認用
redraw 1;

rcflag = 1 // 赤丸の表示フラグ
num = cnt // 確認用

; start = timeGetTime() // 開始時間を記録 「ここに間違いとでます」
//開始時間を記録(改)
timeGetTime:start=stat
// 入力待機
repeat
await 1
stick a
if( rcflag == 1 ) {
//時間を再記録
timeGetTime:retime=stat
// 100ms経過したら赤丸を消す
if( 100 <= (retime - start) ) {
rcflag = 0
redraw 0
color 128, 128, 128: boxf
color 0, 0, 0: circle 295, 295, 305, 305;
pos 0, 0: mes ""+num+"回目"; // 確認用
redraw 1
if a=16{
timeGetTime:fin=stat
st=1
}
}
await 1
}
if a=16:break
loop
if st=1:goto *rcmid
timeGetTime:fin=stat
RT(cnt)=fin-start
*rcmid
a=0
; RT(cnt) = timeGetTime() - start // 終了時間(現在の時間)から開始時間を引いた数字が反応時間
loop

timeEndPeriod 1

// 試行終了後の画面表示、及び保存処理
redraw 0
color 255, 255, 255: boxf
color 0, 0, 0: pos 0, 0
mes "試行終了"
nn=1
repeat 25, 1
mes strf("%2d回目 : %4dms", cnt, RT(cnt))
; noteadd str(block)+" "+str(cnt)+""+str(RT)+"
noteadd ""+nn+" "+RT(cnt)
nn++
loop
redraw 1
notesave "RTdata.txt" // 保存処理は最後
stop
timeEndPeriod 1
end



この記事に返信する


あらや

リンク

2018/7/23(Mon) 21:32:02|NO.84847

HSPのバージョンのせいでしょうか?
こちらではエラーになりません。

a = timeGetTime(); // このような関数的文法でもエラーにならない timeGetTime:a = stat; // もちろんこちらも使えます



どちらでも使いやすい方でいいと思いますが、
関数的に書きたいのであれば
#funcを#cfuncにするだけで大丈夫だと思います。

;#func timeGetTime "timeGetTime" // この行を #cfunc timeGetTime "timeGetTime" // こちらに書き換える



リンク

2018/7/23(Mon) 22:22:09|NO.84848

hsp34となってるんですがバージョンのせいなのでしょうか?
 #cfunc timeGetTime "timeGetTime"と書き換えてみたのですがやはりエラーになります。
私のパソコンが原因ということはあるのでしょうか?
一応赤丸のターゲットが出るところまでは出てくるのですが、そこから次の段階でエラーになってしまいます。

コマンドだけを表示するとこうなのですが
#uselib "winmm.dll"
#func timeGetTime "timeGetTime"
#func timeBeginPeriod "timeBeginPeriod" int
#func timeEndPeriod "timeEndPeriod" int
timeBeginPeriod 1
randomize;乱数

buffer 2,300,300,0 : color 128, 128, 128: boxf
color 255,0,0 : circle 0,0,300,300,1

screen 0,600,600,0,0,0

mes "スペースを押すと始まります。"
repeat
await 1
stick a
if a=16:break
loop

notesel data
noteadd "試行数,反応時間"
notesave "RTdata.txt"

dim RT, 26
repeat 25,1
await 0;
redraw 0;
color 128, 128, 128: boxf;
color 0, 0, 0: circle 295, 295, 305, 305;
pos 0, 0: mes ""+cnt+"回目"
redraw 1

await 2000 + rnd(2001) - 1000

        redraw 0
pos 150, 150: gcopy 2, 0, 0, 300, 300
pos 0, 0: mes ""+cnt+"回目"
redraw 1;

rcflag = 1
num = cnt

timeGetTime:start=stat
repeat
await 1
stick a
if( rcflag == 1 ) {
timeGetTime:retime=stat
if( 100 <= (retime - start) ) {
rcflag = 0
redraw 0
color 128, 128, 128: boxf
color 0, 0, 0: circle 295, 295, 305, 305
pos 0, 0: mes ""+num+"回目"
redraw 1
if a=16{
timeGetTime:fin=stat
st=1
}
}
await 1
}
if a=16:break
loop
if st=1:goto *rcmid
timeGetTime:fin=stat
RT(cnt)=fin-start
*rcmid
a=0

loop

timeEndPeriod 1

redraw 0
color 255, 255, 255: boxf
color 0, 0, 0: pos 0, 0
mes "試行終了"
nn=1
repeat 25, 1
mes strf("%2d回目 : %4dms", cnt, RT(cnt))
noteadd ""+nn+" "+RT(cnt)
nn++
loop
redraw 1
notesave "RTdata.txt"
stop
timeEndPeriod 1
end

となります。あらやさんのhspではエラーは起きませんか?
最初は表示されるのですがバージョンに問題があるのでしょうか?



あらや

リンク

2018/7/23(Mon) 23:10:40|NO.84849

HSPの更新履歴に書いてありました。
http://www.onionsoft.net/hsp/v35/doclib/history.txt

以下抜き出し:

/////////////////////////////////////////////////////////////////////////
2016/01/19 3.5 beta3

[hspcmp] #funcで宣言されたDLL関数を、関数としても使用できるように修正
/////////////////////////////////////////////////////////////////////////

とありますので、HSP3.5のbeta3から#funcで宣言された関数はどちらの書き方でも
可能になったようですね。



それ以前のバージョンだと

#func timeGetTime "timeGetTime" // #funcだと timeGetTime:a = stat; // この書き方 #cfunc timeGetTime "timeGetTime" // #cfuncだと a = timeGetTime(); // この書き方

このように固定されるはずです。



リンク

2018/8/2(Thu) 15:35:18|NO.84932

やはり、同じ箇所が文法ミスとでてしまいます、、
バージョンを変えればいいのでしょうか?
一度、学校のPCでやった時はできたのですが、自分のPCだと作動しないということは私のPCに問題があるのでしょうか?
使用しているのはDELL Windows8.1です。



あらや

リンク

2018/8/2(Thu) 19:09:05|NO.84937

>使用しているのはDELL Windows8.1です。
いや、メーカーとOSのバージョンだけわかっても……
それと同じ環境で動作してる人はたくさんいると思いますよ。。。

ハードディスクの故障などPC自体の問題の可能性もありますが、
HSPコンパイラになんらかの問題が生じているように思えます。
一度最新版のzipをダウンロードして、そちらで実行してみてはいかがでしょうか。

zipの方なら不要になったらフォルダごと削除するだけで済みますし
現在インストールしているHSPに干渉しないはずですから。



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