!!!forward digit span test !ChangeLog * 2023-11-08 10桁以上にも対応 !プログラム *実行ファイル {{ref DigitSpanTest10c.exe}} *ソースコード {{ref DST10c.hsp}} {{pre ; DST10c ; forward digit span test ; copyleft 2022-06-09 sugiura@nagoya-u.jp ; 2022-06-10 ; 2023-11-08 /* 数字一文字一秒 4桁から順に増やして確認 数字列提示後、キー入力 2回続けてできたら、一つ増やす 2回続けて間違えたら終わり 結果は、日時のついたテキストファイルに保存される。 2023-11-08 10桁以上にも対応。同じ数字が続けて表示されてもわかるように修正。 */ notesel kiroku *hajime cls randomize ; これで「ほんとうに」ランダムに mes "copyleft 2023-11-08 sugiura@nagoya-u.jp" pos 100, 50 font "MS ゴシック", 32 mes "Digit Span Test" mes "" keta=4 ; 4から1ずつ増やす。 kazu=keta correctcheck=0 ; 合っていた数の記録 incorrect=0 ; 2回間違えたらアウトの記録 pos 100, 200 mes "数字を何桁記憶できるでしょうか?" mes "How many digits can you remember?" mes "" pos 300, 300 button goto "OK", *kakunin stop *kakunin cls pos 300, 300 button goto "Start", *shuffle stop *shuffle cls seikai = "" ; 文字列配列初期化 pos 250, 200 mes "数字を順に覚えてね" mes "Remember the numbers" pos 580, 420 ; 右下の方に止めるボタン ;button goto "Quit", *owari wait 200 /* ; 0から9の数字をシャッフルしRという配列に順に並べる repeat 10 x = rnd(cnt+1) ; rndは、0から()内の数字の前までの間で整数の乱数発生。()内の数字は含まれない R(cnt) = R(x) ; R(x) = cnt ; await 1 loop */ randomize; 10c repeat kazu ; 指定した桁数の数を表示 cls pos 300, 200 font "MS ゴシック", 32 rkazu = rnd(10) ; 10c mes "__" ; 連続して同じ数字が出てもわかるように(10c) wait 10 ; 0.1秒ごとに(10c) pos 300, 200 mes rkazu ; 10c ;mes R(cnt) ; 0〜9のランダムになった数字をkazu個分だけ順に表示 ;seikai = seikai + R(cnt) ; 文字列を順に記録 seikai = seikai + rkazu ; 10c wait 100 ; 1秒ごとに pos 300, 200 mes "__" ; 10c wait 10 ; 0.1秒ごとに(10c) loop wait 10 goto *kaitou *kaitou cls kotae="" pos 250, 200 font "MS ゴシック", 32 mes "回答欄 (Type in)" objmode 2 ; 回答欄内の文字の大きさ変更 input kotae, 200, 34 objmode 0 mes "" button "check", *check objsel 0 ; input欄内にキャレット表示(10bで追加) repeat ; ボタンでなくEnterキーで次へ stick enter if enter==32 : goto *check await 1 loop stop *check cls if kotae == seikai{ ; 合っていたら font "MS ゴシック", 32 pos 250, 200 mes "Correct!" correctcheck= correctcheck + 1 ;mes correctcheck wait 200 if correctcheck > 1 { ; 2回目合ったら次へ kazu = kazu + 1 ; 桁数を増やす correctcheck=0 ; チェックの初期化 incorrect=0 ; 間違えた方も初期化(10bで追加) } goto *shuffle } ; あってなかったら pos 250, 200 mes "Wrong ..." incorrectcheck = incorrectcheck + 1 if incorrectcheck==2 { mes "" mes "This is the end." wait 150 if kazu != keta{ kazu = kazu - 1 } goto *owari } wait 200 goto *shuffle *owari cls ; フィードバック英語でも(10c) font "MS ゴシック", 32 pos 150, 200 if kazu==4{ ; 最低限の場合の例外処理(10bで追加) mes "あなたの記憶容量は4桁以下です。\n Less than 4 digits" } else { mes "" + kazu + " 桁があなたの記憶容量です。\n Your memory size" } noteadd "" + kazu ; ファイル名に日時を付ける (10c) nen =gettime(0) tuki=gettime(1) niti=gettime(3) ji =gettime(4) fun =gettime(5) nengetujifun = "YMDTHM" + nen + "-" + tuki + "-" + niti + "T" + ji + "_" + fun noteadd nengetujifun notesave nengetujifun + ".txt" wait 300 end }}