SdCクイズ+/仕様書

 『SdCクイズ+』の仕様書です。ウェブスペースに設置するときに参照してください。また、『SdCクイズ+/設置手順』も併せてお読み下さい。

※SdCタイピング+と酷似した仕様です。

目次

  1. 設定ファイル記述
    1. DATA
    2. STAGE
    3. EVENT
    4. LOAD
    5. DISCARD
    6. //
  2. ソース記述
    1. LOADLIST
    2. MENU
    3. MENUPICTURE
    4. CORRECTPICTURE
    5. WRONGPICTURE
    6. TITLE
    7. COLOR
    8. REQUEST
    9. TEST

設定ファイル記述

 設定ファイルはテキストファイルとして編集します。行ごとに“命令”を書いていく、スクリプトのようなものと考えて差し支えありませんが、記述方式は HTML/XHTML と似たものを採用しています。(そして、『SdCタイピング+』の仕様に酷似しています。)
 なお、設定ファイルについては自由に公開して構いません。配布する場合は、拡張子を ".sqp" に統一しておくことをお薦めします。

 本プログラムが認識する命令、制御ワードは、以下の6通りです。また、各種パラメータ(属性名 param と属性値 value の組)が重要な役割を果たします。これらを組み合わせて設定ファイルを書き込んでいきます。

DATA
クイズを蓄積します。問題文と選択肢(正解、誤答……)のセットをタブ文字で区切って記述します。
STAGE
蓄積されたデータからクイズを出題します。パラメータによって時間制限などを設定できます。
EVENT
パラメータで指定したメッセージや画像を出力したりします。ゲームに効果を入れるときに使います。
LOAD
別の設定ファイルを読み込み、その内容を該当箇所に挿入します。
DISCARD
蓄積されている問題文を破棄します。ジャンルを切り替えるときなどに使います。
//
コメントで、プログラムからは無視されます。設定ファイルにメモをつけるためのものです。

 制御ワードは各行の先頭に記述します。後続の文字を入れる前に半角スペースを挿入しましょう。(なお、制御ワードおよび属性名は大文字・小文字を区別しません。)そして、1つの制御ワードに関する記述が終わったら、必ず改行を入れて下さい。
 プログラムは設定ファイルを順に読み込んで実行すると考えてよいです。以下、各制御ワードの機能と記述方法について説明していきます。

DATA

 クイズを蓄積します。(蓄積するだけであって、クイズがはじまるわけではありません。)

問題文 [Tab] 正解選択肢 [Tab] 誤答選択肢1 [Tab] 誤答選択肢2 ... ...

 上記のように、1題のクイズを1行で記述します。左側から順に、問題文・各選択肢を、タブ文字 [Tab] で区切って指定していきます。("[Tab]" と入力するわけではありませんから注意してください。)ただし、正解となる選択肢は先頭(問題文のすぐ右)に記述しなければなりません。
 もちろん、出題時には選択肢はシャッフルされて提示されますので、常に1番が答えになるわけではありませんからご安心ください。その際、解答番号をプログラムが追加しますから、選択肢は単に答えの候補を記述するだけで構いません。(問題文も単に問題だけを記述してください。)

 なお、問題文は画面横幅に対応して自動で折り返されますが、それでも収まりきらない部分はカットされます。選択肢は1行につき1つずつ出力します。(そのため、あまり長文にならない方がよいです。)

※ 行頭に制御ワード+半角スペース "DATA " を書いてもよいのですが、省略できるのです。

STAGE

 蓄積された DATA から、指定された方式で問題を取り出し、出題します。
(なお、蓄積 DATA が存在していて、かつ一度も STAGE が現れずに設定ファイルが終了した場合、プログラムが自動挿入しますので、極端な話、問題文を羅列するだけで設定ファイルは完成します。)

STAGE param1="value1" param2="value2" ......

 上記のように、"STAGE" のあと、パラメータ(属性名と属性値のセット)を半角スペースで区切って指定していきます。属性値は二重引用符 " で囲み、属性名と等号 = で結ぶようにしてください。
 以下、パラメータと値について説明していきます。全部で13個ありますが、各パラメータには既定値が設定されているので、すべて省略可能です。また、好きな順序で指定して構いません。

※すべて省略し "STAGE" だけを指定することもできます。(各項目は規定値になります。)

NUMBER

 出題する問題数を整数で指定します。負の数(例:"-1")を指定すると蓄積されている DATA の数と同じだけ(つまりすべて)出題し、"0" を指定すると、蓄積数の約25%を出題します。大きな数を指定しても、蓄積されている DATA が尽きれば STAGE は終了します。
 はじめの既定値は "0" ですが、直前の指定が既定値になります。

SEQUENCE

 蓄積されている DATA が順序づけられているものかどうかを指定します。"true" だと指定した順に問題文を読み込み、"false" だとランダムな順序で読み込みます。
 はじめの既定値は "false" ですが、直前の指定が既定値になります。

USEONCE

 一度出題した問題を破棄するかどうかを指定します。"true" だと同じ問題は(同じゲームの巡においては)繰り返し出題されません。"false" だと同じ問題が繰り返し選ばれることがあります。
 "false" の場合、使用された問題文は、蓄積 DATA の末尾に再び付け加えられます。(したがって、SEQUENCE="true" であっても、同一の問題文をリピートするわけではありません。)また、USEONCE を "false" にしている場合、NUMBER で DATA 以上の数を指定しても規定回数の出題が為されることになります。
 はじめの既定値は "true" ですが、直前の指定が既定値になります。

WAIT

 クイズとクイズの間隔(一つの問題文を完成させた後、次の問題までの時間)を整数で指定します。負の数(例:"-1")だとキーボード入力などがもう一度あるまで休止します。"0" だと直ちに次の問題に移ります。それ以外は、指定されたミリ秒(たとえば "1000" で一秒)が経過するか、あるいはキーボードからの入力などがあるまで休止します。
 なお、通常は選択後に採点(正解・不正解の表示)がありますが、WAIT="0" の場合は省略されます。(また、あまり短い指定でもほとんど見る時間がありません。)  はじめの既定値は "-1" ですが、直前の指定が既定値になります。

LIFE

 プレイヤーの LIFE を正の整数で指定します。ゼロ以下の整数は無効です。
 アプレット起動時に、自動的に LIFE="60" が割り振られていますが、この LIFE が 0 以下になるとゲームオーバーということになります。
 ただし、LIFE が 0 以下であっても、その後に、LIFE を正の値に指定する STAGE があればコンティニューできます。(EVENT の GAMEOVER の説明も参照してください。)
 既定値はなし(それまでの LIFE を引き継ぎます)で、一度指定してもその値は既定値になりません。

LIFEPLUS

 プレイヤーの LIFE を増減させる値を整数で指定します。正の値で増加、負の値で減少です。
 既定値は "0" で、一度指定してもその値は既定値になりません。

MISS

 クイズに間違えたときに減少させる LIFE の量を整数で指定します。"0" であればミスをしても LIFE は減少しません。負の数(例:"-1")ですと、一度でもミスすれば、直ちに LIFE がゼロになります。
 既定値は "0" ですが、直前の指定が既定値になります。

TIMELIMIT

 時間制限を指定します。秒数を表す整数で指定します。"0" であれば、最初から時間制限をオーバーしていることになります。一方、負の数(例:"-1")であれば、時間制限はなしです。
 負の数でない値を指定する場合、後述の TIMEOUT と組み合わせて意味を持ちます。
 既定値は "-1" ですが、直前の指定が既定値になります。

TIMEOUT

 TIMELIMIT が負でない場合のみ有効です。
 時間制限をオーバーしたときに、一秒ごとに減少させる LIFE の量を整数で指定します。ただし、"0" であれば時間制限を超過したとき、現在選択中の選択肢で強制的に採点します。(選択なしの場合は自動的に不正解です。)"-1" ですと、時間制限をオーバーした途端に、直ちに LIFE がゼロになります。
 既定値は "0" ですが、直前の指定が既定値になります。

RESULT

 中間結果を表示するかどうかを指定します。
 "true" なら、該当 STAGE が終了するか、あるいはゲームオーバーになったところで、タイプ数、ミス数、打鍵成功率、正打鍵分速などの中間結果が表示されます。(そしていったん、中間成績はクリアされます。)"false" なら、成績表示はありません。(該当する STAGE の成績は次の STAGE に引き継がれます。)
 いずれの場合でも、すべての STAGE や EVENT が終わった後に、最終総合結果が表示されます。
 既定値は "true" ですが、直前の指定が既定値になります。

EVENT

※特にこの項目はSdCタイピング+と全く同じです。

 指定されたイベント(メッセージや画像の表示など)を起こします。

EVENT param1="value1" param2="value2" ......

 上記のように、"EVENT" のあと、パラメータ(属性名と属性値のセット)を半角スペースで区切って指定していきます。属性値は二重引用符 " で囲み、属性名と等号 = で結ぶようにしてください。
 以下、パラメータと値について説明していきます。全部で7個ありますが、各パラメータには既定値が設定されているので、すべて省略可能です。また、好きな順序で指定して構いません。

※すべて省略し "EVENT" だけを指定することもできます。(各項目は規定値になります。)

MESSAGE

 画面に文字列を表示します。表示したい文字列を指定してください。
 "\n"(円記号またはバックスラッシュ + n )を挿入しておけばその位置で強制改行します。また、改行記号が一つもない場合に限り、文字列が画面横幅よりも長いときに自動的な折り返しが行われます。
 文字列は基本的にセンタリングされますが、冒頭に "BOTTOM:" を記述すると画面下側に配置されます。画面上側に配置するためには "TOP:" を記述します。さらに、冒頭に "LARGE:" を記述すると、フォントサイズが大きくなります。( "BOTTOM:LARGE:" の順序はどちらでも構いません。)
 既定値は ""(何も表示しない)で、一度指定してもその値は既定値になりません。

WAIT

 待機時間をミリ秒で指定します。"-1" なら、ユーザのキータイプなどがあるまで待ちます。"0" なら直ちに EVENT を終了します。1 以上なら、指定されたミリ秒が経過するか、ユーザのキータイプなどがあるまで待ちます。
 既定値は "-1" ですが、直前の指定が既定値になります。

COLOR

 指定したカラーで画面を一度クリアします。塗りつぶしたい色を #rrggbb の形式で指定してください。
 既定値は“塗りつぶしなし”で、一度指定してもその値は規定値になりませんが、描画された結果は引き継がれます。

PICTURE

 画面に背景画像を表示します。表示したい画像(GIF 形式または JPEG 形式が無難)を、呼び出し元設定ファイルからの相対アドレスで指定します。
 画像がアプレット領域よりも小さい場合はセンタリングし、大きい場合は左上を優先して描画します。また、画像はそれまでの画面に重ねて描画されます。
 既定値は ""(何も表示しない)で、一度指定してもその値は既定値になりませんが、描画された結果は引き継がれます。

※なお、"CORRECTPICTURE"等を指定していないとき、正解(○)表示等は、前項の COLOR を基準にしたグラデーション描画を行います。したがって、PICTURE を指定する際は、それに近い COLOR を指定しておくことを推奨します。

EFFECT

 MESSAGE または COLOR または PICTURE が有効なときのみ意味を持ちます。"true" なら、画面が切り替わるときにエフェクトがあります。"false" なら瞬間的に切り替えます。
 既定値は "true" ですが、直前の指定が既定値になります。

GAMEOVER

 ゲームオーバー時に有効になる EVENT かどうかを指定します。
 通常、LIFE がゼロ以下になってゲームオーバーになると、最終結果を表示するまで、以降の EVENT や STAGE はすべてスキップしますが、GAMEOVER="true" であるはじめの EVENT は表示します。(STAGE の LIFE および次項 EXIT の説明も参照してください。)
 逆に、GAMEOVER="true" の EVENT は LIFE が正のときにはスキップされます。ゲームオーバー時に特別な演出をしたいときに利用してください。
 "false" なら、ゲームオーバー時にはスキップされます。
 既定値は "false" で、一度指定してもその値は規定値になりません。

EXIT

 GAMEOVER="true" のときのみ有効です。
 ゲームオーバー時にその EVENT だけで終了させるかどうかを指定します。
 通常、LIFE がゼロ以下になったとき、ゲームオーバー後に存在するはじめの EVENT GAMEOVER="true" のみが有効になります。しかし、EXIT="false" を指定しておくと、その次の EVENT GAMEOVER="true" も有効になります。(なお、 EXIT="false" の指定は何度でもできます。)
 "true" なら、ゲームオーバー時に読み込まれた場合、その EVENT 以降は GAMEOVER および EXIT の値に関わらずスキップされます。
 既定値は "true" で、一度指定してもその値は規定値になりません。

LOAD

 別の設定ファイルを読み込み、元の設定ファイルの LOAD が記述されていた位置に、その内容を挿入します。

LOAD "FILENAME"

 "LOAD" の後に、半角スペース1つ空けて、設定ファイルを、呼び出し元設定ファイルからの相対アドレスで指定してください。ファイル名は二重引用符 " で囲まなければなりません。

 例えば、問題文だけの設定ファイルを作りたい場合、繰り返し同じ EVENT などを挿入したい場合に利用できるでしょう。

※ 設定ファイルの再帰的な LOAD はしないでください。

DISCARD

 蓄積された問題文をすべて破棄します。(蓄積はゼロになります。)問題のジャンルを完全に入れ替えたいときなどに利用してください。
 なお、ゲームの開始時には自動的に実行されますから、DATA の後にのみ入れれば十分です。

DISCARD

 DISCARD は上記のように単独で作用します。(パラメータの裏設定もあるのですが、まあ必要ないでしょう。)

//

 メモなどを記述するときに指定してください。

// コメント文

ソース記述

 下記のサンプルソースを適切に書き換えます。( [ ] 内および value="" の " " 内が設定対象です。)基本的に半角英数で、正確に記入してください。(コピーしてもよいでしょう。)また、param の name 属性値は大文字を使用します。

<p>
<applet archive="Typing.zip" code="Typing/Typing.class" width="[WIDTH]" height="[HEIGHT]">
<param name="LOAD" value="[LOAD LIST]">
<!-- 以下、省略可能なオプション -->
<param name="MENU" value="[MENU LIST]">
<param name="MENUPICTURE" value="[MENUPICTURE]">
<param name="TITLE" value="[TITLE]">
<param name="CORRECTPICTURE" value="[CORRECTPICTURE]">
<param name="WRONGPICTURE" value="[WRONGPICTURE]">
<param name="COLOR" value="#404040">
<param name="REQUEST" value="false">
<param name="TEST" value="false">
<!-- 以上、省略可能なオプション -->
Java アプレットの実行が有効な環境では [TITLE] をプレイすることができます。
</applet>
</p>
<p><cite>
アプレット配布元:<a href="http://stardustcrown.com/">Stardust Crown</a>(著作:永施 誠)
</cite></p>

※HTML4.01 Transitional または同 Frameset における記述例です。

applet 要素

 もしも、アプレットを設置する HTML 文書と Typing.zip ファイルが異なる階層にあるなら、applet を次のように変更してください。

<applet codebase="[URL]" archive="Typing.zip" code="Typing/Typing.class" width="[WIDTH]" height="[HEIGHT]">

 [URL] は HTML 文書から見た Typing.zip の属する階層の相対アドレスに書き換えます。

WIDTH および HEIGHT

 アプレットのサイズを指定します。全ステージを通して一定ですので、用意した画像や問題文の長さなどに即して決めた方がよいと思われます。

LOAD

 アプレットの動作を決める設定ファイルを、設置 HTML 文書からの相対アドレスで指定します。複数の設定ファイルを ";" (セミコロン)で区切って指定することもできます。
 設定ファイルの数は、10以下で、かつ MENU が画面に収まりきる範囲内でなければなりません。

例:

<param name="LOAD" value="mode1.stp;mode2.stp">

 上記の例では、アプレット起動時に、ユーザが "mode1.stp" によるものか、"mode2.stp" によるものか、いずれかのモードを選択することになります。

オプション

 また、オプション用のパラメータ( param )も用意されています。これらはいずれも省略可能です。

 LOAD で複数の設定ファイルを指定しているときのみ有効です。
 はじめのモード選択で、各設定ファイルに対応するメニュー項目を指定します。説明文などを ";"(セミコロン)で区切ってください。ちなみに、メニュー番号は自動で割り振られるので必要ありません。
 設定ファイルの数に対して多い分は無視され、不足している分は設定ファイル名で補完されます。ただし、後述の MENUPICTURE が有効な場合、補完はありません。(例えば画像でメニュー項目を表示するときなどに利用してください。)
 "BOTTOM:"、"LARGE:" といった指定で位置やフォントサイズを変更できます。仕組みはEVENT の MESSAGEと同じです。
 省略すると "" (指定なし)とみなされます。

 LOAD で複数の設定ファイルを指定しているときのみ有効です。
 はじめのモード選択のときに表示する画像ファイルを、設置 HTML 文書からの相対アドレスで指定します。
 省略すると "" (指定なし)とみなされます。

CORRECTPICTURE

 正解時に描画する画像を指定します。アドレス指定方法は、上記 MENUPICTURE と同じです。
 省略すると、正解時にはプログラムが青(または緑)の“丸(○)”を描画します。

WRONGPICTURE

 誤答時に描画する画像を指定します。アドレス指定方法は、上記 MENUPICTURE と同じです。
 省略すると、誤答時にはプログラムが赤(または紫)の“バツ(×)”を描画します。

TITLE

 ゲームのタイトルを指定します。
 省略すると "SdC QUIZ plus" になります。

COLOR

 初期の背景色を指定します。これは、ウェブなどにおけるカラー指定と同じく "#rrggbb" の形式にしてください。("red" や "blue" などの表記、省略形は認識しません。)
 省略すると "#404040"(ダークグレー)になります。

REQUEST

 アプレット起動時にフォーカスを要求するかどうかを指定します。
 一般に、起動時にはプログラム側にフォーカスがないため、いったんアプレット領域をクリックするなどしないとキータイプを認識してくれません。このパラメータを "true" に設定することで、すぐにキータイプを認識するようになります。
 しかしながら、逆にブラウザのフォーカスは奪われるので、たとえばキーボードで操作していたユーザは戸惑うかもしれません。メリットとデメリットを十分に吟味して設定しましょう。
 省略すると "false" とみなされます。

TEST

 テストモードを指定します。"true" なら全てのクイズが最初から正答選択済みになり、ステージをすぐにクリアできます。(動作検証時に利用してください。)
 省略すると "false" とみなされます。

著作・制作/永施 誠
e-mail; webmaster@stardustcrown.com