[相談内容]
ランダムに01.txtから1行抜いて同じ行で02.txtから抜けないと
訳が合わないと思うのですが、この部分ができるのかどうか。
ファイルは先頭から連続で読み出す操作はしやすいですが、
ランダムな位置にあるものを読み込むのは苦手です。
出題のたびにファイルから問題を読み出そうとすると話が難しくなるので
ここはまず必要なデータをすべて配列に入れるのが良いでしょう。
読みやすさを損なわない程度に極力短くしたサンプルを載せます。
コード: 全て選択
#N88BASIC
' ↓ ここからプログラムが実行されます
Const NUM_QUESTION = 10 '問題数
Dim eng$(NUM_QUESTION) As String
Dim jpn$(NUM_QUESTION) As String
Dim ans$ As String
Dim no As Long
Dim i As Long
Open "01.txt" For Input As #1
i = 0
While Not(Eof(1))
Input #1, eng$(i)
i = i + 1
Wend
Close #1
Open "02.txt" For Input As #1
i = 0
While Not(Eof(1))
Input #1, jpn$(i)
i = i + 1
Wend
Close #1
Randomize
While 1
no = Int(Rnd() * NUM_QUESTION)
Print "問題 ";eng$(no);" を日本語に直すと?"
Input "回答"; ans$
Print "答えは ";jpn$(no);" です"
If ans$=jpn$(no) Then Print "正解です" Else Print "残念、不正解"
Print
Wend
eng$とjpn$には問題と答えが入ります。
それぞれ、配列に一問ずつ入れていきますので、
eng$(x) に対する答えは jpn$(x) になるということです。
問題はNUM_QUESTIONの数だけファイルから読み出すので、
サンプルの場合は10行分用意する必要があります。
11行以上あるとファイルの読み出しエラーになり、
9行以下だと足りない分が空白で出題されることがあります。
また、コンマやタブやスペースは問題と答えに使えません。
サンプルの状態でも一応動くことは動きます。
NUM_QUESTIONを100にして問題を100問分用意すれば
それなりのボリュームのあるテストができます。
ただし、サンプルだけあって多数の足りない点が存在します。
次のようなことに挑戦してみてはどうでしょうか?
・同じ問題が何度も出てきてしまわないようにする
・全部の問題を出題したら終了するようにする
・得点制にしたり、正解率を表示してゲーム的な要素を追加する
・学習状態を保存できるようにして、いつでも再開できるようにする
・レベルの選択ができて、それにあった問題が出るようにする
・問題ファイルの作り方に間違いがあるとき、それがわかるように表示する
・ひとつのファイルで問題と答えを設定できるようにしてみる
・N88BASICスタイルではなくウィンドウを使ったプログラムに改造する