簡単なクイズです。全部で10問あり、4つの選択肢から正解を選んで下さい。●しくみ
まだ全体の問題数が少ないので、10問までにしていますが、今後問題数が増えたら100問連続クイズとかやってみたいですね。
クイズの企画をCGIを使って書き加えることができるようにしようと思っています(いずれ)。もし他にありましたらメールで連絡していただくという手もありますね。うん、それがいい。
クイズの問題を加筆修正しやすいように、GetNetTextコマンドを用いて、別ファイルを読み込んでいます。そのファイルは以下の様な書式に統一しておきます。あとは色々な画像処理などを書き加えます。問題文,正解,ダミー1,ダミー2,ダミー3 (例)1+1は,2,200,0,わからない,
そのようにして書き込まれているファイルを一端メモリ内部に読み込みます。それをとりあえずフィールドに格納して、そこから部分の切り出しにかけています。
そこの部分のスクリプトは以下のようになっています。ここでは簡単な解説にとどめておきますが、いずれ「できるがな」の方で作り方を解説する予定です。
--(c)Akira SAno 1997 --個人で使う分には何をしても構いません
--営業目的で使用するときには、佐野宛に許諾を得て下さいね
on yomikomi
--ここで読み込んだテキストをダミーフィールド(画面には見えていないフィールド)
--に格納します。
put NetTextResult() into field "text"
--区切り文字を半角のコンマに設定します。
set the itemDelimiter = ","
--問題を順番に格納していく
put the number of items in field "text" into MondaisuMax
repeat with m=1 to integer(MondaisuMax/5)
--問題を格納
setAt MondaiList, m,item 5*(m-1)+1 of field "text"
--正解を格納
setAt seikaiList ,m,item 5*(m-1)+2 of field "text"
--ダミーの解を用意
setAt FirstDammyList , m , item 5*(m-1)+3 of field "text"
setAt SecondDammyList, m , item 5*(m-1) +4 of field "text"
setAt ThirdDammyList ,m,item 5*(m-1) +5 of field "text"
--出題番号をランダムにするために、問題の出題順番を決めるためのリストを作成
setAt SyutudaiZyunList,m,m
end repeat
--問題の出題順をシャッフルします
--しくみは神経衰弱の時の方法と同様です
repeat with s=1 to 1000
put random(count(SyutudaiZyunList)) into target
put getAt(SyutudaiZyunList,target) into targetNum
deleteAt(SyutudaizyunList,target)
setAt SyutudaizyunList,count(SyutudaiZyunList)+1,targetNum
end repeat
end
on hyouzi
if Mondaisu >10 then
go to "kekka"
else
--問題の表示を行います
put "第" & Mondaisu & "問" into field "DaiNanMon"
put getAt (mondaiList,getAt(syutudaizyunList,mondaisu)) into field "mondai"
put getAt(syutudaizyunList,mondaisu) into Point
--選択肢の表示順番を決めるリストを作ります
set narabeList=[1,2,3,4]
repeat with s=1 to 10
--さきほどと同様にシャッフルします
put random(4) into target
put getAt(narabeList,target) into targetNum
deleteAt(narabeList,target)
setAt narabeList,4,targetNum
end repeat
repeat with n=1 to 4
--このcase文が表示の中心部分になります
case getAt(narabeLIst,n) of :
1:
put getAt(seikaiList,Point) into field string(n)
2:
put getAt(FirstDammyList,Point) into field string(n)
3:
put getAt(SecondDammyList,Point) into field string(n)
4:
put getAt(ThirdDammyList,Point) into field string(n)
end case
end repeat
--正解は何番なのかを格納します
put getOne(narabeList, 1) into seikaiNo
end if
end