;NewAcademicWordQuiz25 ;copyleft 2022-04-29 sugiura@nagoya-u.jp ; 1) 目的: 学術英単語を何パーセント知っているか確認 ; 2) 特徴: ランダムに出題される ; 3)   : 選択肢もランダムに配置される(ここがミソ) ; 4) 間違えたものを最後に表示 ; 5) 間違えたものをテキストファイルに保存(2022-04-29) #packopt name "New Academic Word Quiz 25" #pack "NAWL.csv" ; New Academic Word ListのHeadword(960語)から、ランダムに25語選び ; 正答率を出す。 ;http://www.newgeneralservicelist.org/nawl-new-academic-word-list/ ; csvファイルから読み込む ;============================================================ upto = 25 ; 出題数を決める ;============================================================ screen 0, 800,600 color 255,204,255: boxf ; 背景をクリーム色に color 0,0,0 font "M S 明朝", 32, 1 pos 200, 200 mes "" mes "Welcome." wait 200 mes "" mes "Now, wait for a moment." mes "" wait 100 mes "The questions are getting ready." notesel text noteload "NAWL.csv" gyosuu = notemax sdim wordlist, 2, notemax repeat gyosuu noteget item, cnt split item, ",", wordlist(0,cnt), wordlist(1,cnt) item="" await 1 loop ; 表紙の画面 gosub *hyoushi font "M S 明朝", 32, 1 wait 200 mes "Set" wait 200 mes "Go!" wait 100 ;------------------出題をランダム順にする----------------------- dim R,length(toi) ; 配列の数を問題数にする dim R,gyosuu randomize ; 乱数を不規則化 repeat gyosuu ; 問題数の数だけ繰り返す x = rnd(cnt+1) ; cntは0から始まるので1を足して乱数の発生をはじめる R(cnt) = R(x) ; 乱数番目の配列の数を繰り返し回数番目の数に代入 R(x) = cnt + 1 ; 繰り返しの回数+1を乱数番目の配列に入れる loop ;-------------------これで配列Rの中には、1からgyosuu個までの数字がランダムに並んでいる *start correct = 0 wrong = 0 result = "" ;-----------------プログラムの本流------------------------ i = 0 *main cls if i = upto : goto *owari ; 問題数の上限に達したら終わり gosub *settei mon = i + 1 ; 問題番号を表示するために1を足す。 mes "第"+mon+"問" ; 問題番号を提示 mes "" mes "" j = R(i) - 1 ; Rの中身は、1から10なので1を引いて配列の番号に対応させる pos 350, 250 color 0,0,0 font "MS 明朝", 32, 16 mes wordlist(1, j) ; 問題文を提示 hidari = wordlist(0, j) if j = 0 { j = 2} ; jが最初の要素番号0だったら、1引けないので、増やしておく migi = wordlist(0, j -1) ; 対訳をずらす i = i + 1 randomize tmp = rnd(2) ; 0からはじめて2つの数字(すなわち、0と1)をランダムに出す if tmp = 0 { ; 0がでたら、正当を左側に配置 h = 200 : m = 450 } else{ ; そうでないばあいは、誤答を左側に配置 m = 200 : h = 450 } objmode 2 ; font命令ちゃん機能せよ ;https://fireflyframer.blog.jp/19061608.html pos h, 350 objsize 190, 34 font "MS 明朝", 28, 16 button goto hidari, *seikai pos m, 350 objsize 190, 34 font "MS 明朝", 28, 16 button goto migi, *matigai stop *seikai pos 380, 450 color 0, 255, 0 mes "正解" correct = correct + 1 wait 100 cls goto *main *matigai pos 380, 450 color 255, 0, 0 mes "間違い" wrong = wrong + 1 notesel result ; 間違えたものの保存 noteadd wordlist(1, j) + ": " + wordlist(0, j) wait 100 cls goto *main ;---------------終了する際に----------------------------- *owari cls color 255, 165, 0: boxf ; 場面の変化を背景の色で伝える。 error = upto - correct error = int(error) wariai = double(wariai) ; 割合を実数(小数も)で correct = double(correct) upto = double(upto) wariai = (correct/upto) * 100 ; 小数点以下も含めて計算 wariai = int(wariai) ; 整数(小数点以下切捨て)に戻す color 0,0,0 font "MS 明朝", 64, 1 pos 250, 100 mes "Finished!" font "MS 明朝", 32, 1 mes "" mes "*正答率は" + wariai + "%でした。" if wariai==100: wait 200 : goto *kanpeki mes "*" + error + "個間違えました。" mes "" font "MS 明朝", 18, 1 mes "間違えたのは以下のものです:" mes "" mesbox result, 380, 160, 6 ; 誤答表示欄 *kanpeki font "MS 明朝", 18, 1 pos 280, 500 objsize 150, 34 button goto "また明日", *owari2 pos 450, 500 objsize 150, 34 button goto "再挑戦!", *start stop *owari2 notesel result notesave "mistakes.txt" ; テキストファイルに保存 wait 100 end ;--------------------------sub------------------------- *hyoushi cls color 255,204,255: boxf ; 背景をクリーム色に color 0,0,0 font "M S 明朝", 32, 1 pos 200, 200 mes "" mes "New Academic Word Quiz 25" mes "" mes "" mes "" font "M S 明朝", 18, 1 mes "based on the following word list:" mes "" mes "Browne, C., Culligan, B. & Phillips, J. (2013)." mes "  The New Academic Word List. Retrieved from" mes "  http://www.newgeneralservicelist.org." mes "" mes "" wait 200 font "M S 明朝", 32, 1 mes "Ready?" return *settei cls color 255, 255, 200: boxf ; 背景をクリーム色に color 0,0,0 font "M S 明朝", 24, 1 pos 200, 100 mes "" mes "正しいほうをクリックしてください" mes "" mes "−−−−−−−−−−−−−−−−−−" mes "" return