◎汎用プロジェクト3・四択クイズ◎ 2004.10.7更新

以前から試してみたいと考えていました関数「LoadTextFile」を、たまたま使えそうな機会があったので、今回のプロジェクトを企画いたしました。
ついでに、「見せかけただけの複数メッセージウィンドウ」にも挑戦。
結果が「四択クイズ」です。
公式掲示板のほうでもクイズに挑戦されている方がいましたので、自分なりに作ってみたかったというのもあります。
なお、このプロジェクトファイルは汎用プロジェクトと銘打ち、ご自由に使用されてかまいません。
基本的な機能しかありませんので、改良の余地は大いにありますが、よろしければご利用ください。
ただし、クイズの内容はそのまま使わないほうがよろしいかと思います……

 LiveMaker用プロジェクトファイル  四択クイズプロジェクト(lzh圧縮) 250KB


※四択クイズ実行画面
実行画面


☆「四択クイズver1.00」概要
○画像サイズは640×480ドットです。
○10問のクイズがランダムに出題され、すべて答えると終了。その後に結果発表があります。
○「問題」は最大24文字×4行で構成します。
○「選択肢」は欄1個につき、最大12文字です。
○「問題」と「選択肢」と「答え」は1問ごとにテキストファイルに収録されます。


それでは、簡単にプロジェクトについてご紹介します。
今回は、改造するときのポイントも混ぜてご説明させていただきます。

○チャートリスト
チャートリスト


○変数リスト
変数リスト

・順番[0-9]……整数型配列変数。順番[n]に「問題」の番号mが代入されます。
・メッセ[0-7]……文字列型配列変数。テキストファイルから読み込んだ内容が入ります。
 メッセ[0] = 問題の1行目
 メッセ[1] = 問題の2行目
 メッセ[2] = 問題の3行目
 メッセ[3] = 問題の4行目
 メッセ[4] = 選択肢の1行目(番号0と1)
 メッセ[5] = 選択肢の2行目(番号2と3)
 メッセ[6] = 答え番号(半角数字)
・問題ファイル名……文字列型変数。出題される「問題」「選択肢」「答え」を収めたテキストファイルの名前を保管しています。
・ジャンル番号……整数型変数。クイズを入れたフォルダの番号です。ジャンルが複数あるとき、フォルダを選別するために使います。
・問題数……整数型変数。何問目かを入れておく変数です。
・正解数……整数型変数。正解数を保存しています。
・数値仮受……整数型変数。使いまわし用の変数です。
・文字仮受……文字列型変数。こちらは文字列専用の使いまわし変数です。
・乱数……整数型変数。関数「Random」の受取専用変数です。
・ループ……整数型変数。繰り返し作業のカウント専用の変数です。


○グラフィックフォルダ内「ジャンル0」フォルダ
「ジャンル0」フォルダ

今回、クイズの「問題」はテキストファイルで作成しました。
他のファイルと区別するため、「ジャンル」というフォルダを作成し、そこに収納しています。
フォルダの場所はどこでもよかったのですが、LiveNovelのメニューバーから呼び出せるので、グラフィックフォルダに入れておきました。
クイズのジャンルを増やしたいとき、問題のレベルを分けるときなどに「ジャンル」フォルダを作成し、半角数字の番号を付けてください。
整数変数「ジャンル番号」にナンバーを代入してあげると、そのフォルダの中の問題を参照してくれます。
また、「問題」はファイル名「問題n.txt」とし、「n」は半角数字でつけてください。
このさい、「問題001.txt」とか「問題01.txt」などの見栄えよくするための桁あわせをされますと、うまく認識してくれないので注意してください。


○テキストファイルの中身
テキストファイルの中身

ご覧のとおり、「メモ帳」で「問題」を作成しています
テキスト形式で保存できるのであれば、お好きなテキストエディタをお使いくださって大丈夫です。
ファイル名は上記に書かれているとおり、「問題n.txt」の形でお願いします。
テキストの上4行が「問題」に表示される文章です。
一行あたり全角24文字までで、「文章のつながりに関わらず」24文字に達した時点で「改行」してください。
もちろん24文字に満たなくても「改行」します。
また、文章が4行に満たない場合は、図の赤マルのように「全角の空白」を入れて「改行」してください。
続く2行が「選択肢」になります。
「選択肢」1つにつき、全角12文字まで使えますが、上のグラフィックの場合、見栄えとして右側の選択肢は1文字あけてから書いています(空白+11文字)。
最後の一行が正解の番号です。
「選択肢」の上段・左を「0」、上段・右を「1」、下段・左を「2」、下段・右を「3」としています。
ここだけは半角数字で記入してください。
「問題」と「選択肢」は、レイアウトの都合上、「全角文字」だけを使うようにしてください。


○チャート-全体フローチャート
全体フローチャート

説明する必要もないほどシンプルです。
大きく4つにわけた処理を、<チャート呼び出し>で呼び出しているだけです。


○チャート-#初期設定
#初期設定

毎度おなじみの変数を配列化する<配列宣言>をして、次にループで配列変数「順番[0-9]」の中にそれぞれ「0〜9」を代入しています。
つまり「順番[0]」には「0」が、「順番[1]」には「1」が入っていることになります。
これは出題される問題数に応じて数値がかわります。
今回は問題が10問出題されるので、このようなループになりました。
問題数と出題数が異なれば、また別の処理が必要になります(たとえば問題数が3000問あり、そのうち50問だけ出題するなど)。
単に作った問題すべてをランダムに出題したいだけであれば、図の「青※印」の条件文を出題数に変えればよいだけです。

下がこのチャートの<配列宣言>部です。

#初期設定-配列宣言

配列宣言をする関数「SetArray」の表記は、上記のように書けばいいようです。
問題を読み込む文字列変数「メッセ」と、「順番」を配列化しています。
一度に出題したい問題数を変更したいときは、「= SetArray(順番,10)」の「10」の数値を変えてください。


○チャート-#シャッフル
#シャッフル

「2004.01.22更新 神経衰弱:基本セット」でも説明いたしました「スワップ式シャッフル」で、出題される順番を決めています。
「問題」は、順番[0]に入っている数値の問題から出題されていきます。
たとえば「順番[0]=5」とした場合、「問題5.txt」の問題が表示されるのです。
順番[0]の問題が終わると、次は順番[1]、その次は順番[2]……というように、順番[n]の「n」が0から9まで繰り返されます。
この順番[n]の内容(「問題m.txt」の出題される順番)を、このチャートで行っているのです。

#シャッフル

「乱数」を0〜9の間の数値で取得して、順番[ループ]と順番[乱数]の中身を交換しています。
一度に交換できないので、「数値仮受」変数で一時的に順番[ループ]側の数値を預かっています。
これを出題する問題の数だけ繰り返しています。
出題数を変更したいときは、「青※印」の条件分の数字を出題数に書き換えてください。


○チャート-#メイン
#メイン

<初期画像>は、枠を表示して、BGMを鳴らしているだけです。
次に出題数に応じたループをはじめ(<ループ=0>)、順番[ループ]に入っている数値の問題ファイルを検索しています。

問題ファイル名検索

上4つの「問題ファイル名 = ××」は、その名のとおり「問題ファイル名」を作成しています。
「ジャンル番号」でフォルダを指定し、「問題m.txt」の「m」の部分を「順番[ループ]」で指定しています。
そして5行目の「=LoadTextFile(メッセ、問題ファイル名)」です。
これが今回一番のキーポイントで、テキストファイルの内容(問題m.txt)を変数(メッセ[n])に取り込むことができるのです。
テキストファイルの内容を、「改行」ごとに文字列型配列変数で取り込めるので、今回は1行24文字という区切りで改行し、メッセ[0]〜メッセ[6]に入れています。
数十パターンにも及ぶようなランダムなメッセージを表示するには、これがあるとかなり便利です。
「Pure☆Colors神経衰弱」でもランダムメッセージを表示していますが、そのときはこの関数を知らなかったので使用していませんでした。
知っていれば、もう少し楽ができたかな、と思っていたりします。

次に<問題表示>です。
問題表示

一目瞭然です。
青で囲まれたところが、一画面分の表示サイズになっており、[変数内容表示]で「メッセ[0]〜[5]」を表示しています。
「メッセ[6]」は答えなので表示はしません。
今回、メッセージボックスは「全画面の無色表示」にしてあります。
新規に「クイズ用」のメッセージボックスを作っていますので、インポートされる際は入れ忘れのないようにしてください。
本当に見せかけだけですが、あたかもメッセージボックスが二つあるように錯覚できます。

問題を表示しましたら、次は答えの選択です。
<画像選択>で選択肢欄に合うような4つのボックスを作り、最近恒例の「選択番号」を得ます。
取得した「選択番号」と、答えである「メッセ[6]」を比較するのですが、変数「メッセ」は文字列型なので、一度、数値に戻しておきました。

答え合わせ

関数「StrToIntDef」がそれで、整数型変数「数値仮受」に、数値となった「メッセ[6]」を代入しています。
そして「選択番号」と「数値仮受」を比較し、同じであれば<正解>へ、違うときは<不正解>へ飛ぶようになっています。

あとはこれを出題数分だけ繰り返すように変数「ループ」を加算し、出題数を越えたら<終了>へ行くようにしています。
改造する場合は、ここも出題数に応じて「青※印」の条件を書き換えておいてください。


次の「チャート-#エンドメッセ」は、ただ結果発表をしているだけなので説明は省略いたします。

と、いったところで一連の流れは説明いたしました。
実用化するにはちょこちょこといじらないとダメでしょうが、興味がありましたらがんばってみてください。
うまく説明しきれていない部分もあると思いますので、疑問・質問はお気軽にどうぞ。
それでは今回もご覧いただき、ありがとうございました。



    ホームへ戻る