FlashLiteでゲームをつくる(2)クイズ

著作権について
サンプルに使用しているシルエットのグラフィックは素材集のデータで、流用禁止。
スクリプトは非営利流用可。営利目的使用はアフィリエイトを含めて要相談。

1.クイズをつくる

基本的なゲームの見本として、クイズゲームを作成する。

クイズには
・こたえを文字で入力
・n択(3択、4択など)
・マルバツ
などがあるが、コンピュータ相手のクイズゲームでは、基本としてはn択が一般的。
文字を自由にいれて、正解不正解の判断できるほどコンピュータは賢くない。
マルバツもn択のバリエーションといえる。

クイズの構造は

1 タイトル(hajime)
2 問題表示(main)
3 キー入力
4 判定(hantei)
5 結果表示
6 問題数カウンタチェック・まだ終わりでないなら2に戻る(15フレーム)
7 全体の結果表示(owari)

このような構造。


タイムラインは機能別にわけておくと修正や再利用が楽。
また、仕事などで複数の人間が編集する可能性がある場合は、ライブラリの名称などにもわかりやすい名前をつけておいた方が、みんなが幸せ。

2.タイトル


最初にタイトル画面が表示される。
この時、変数の初期化もしておく。
FlashLite1.1は、変数を最初に使うときに勝手に初期化してくれるという昔ながらの仕様。
しかし、最初に明示的に書いておかないと混乱が起きるし、今回のように、最後の画面から何度も遊べる仕様の場合、変数が初期化できないと困る

stop();
//
_focusrect=false;
fscommand2("SetQuality","high");
//変数
mct=1; //現在の問題番号
mmax=5; //問題数
score=0; //得点
//データ
q1="問題1の内容"; //問題の内容
a1_1="回答1";    //回答1の内容
a1_2="回答2*";
a1_3="回答3";
a1_4="回答4";
a1=2; //正解の番号

q2="問題2の内容";
a2_1="回答1*";
a2_2="回答2";
a2_3="回答3";
a2_4="回答4";
a2=1;
(以下略)

本当は問題文も考えたかったところだが、それは後々書くとして、初期化のスクリプトはこのようにしてみた。
FlashLite1.1では配列が使えないが、そのかわりevalを使って変数名を作りながら参照できる。
方法は後で。
ちなみに*がついているのが、正解の選択肢。
正解の番号は問題ごとに指定している。

データはスクリプトに直に書くけど、まとめておけばちょっとだけ保守しやすい。

また、スタートボタンを配置して、そこにスクリプトを張っておく。

on (keyPress "0") {
    gotoAndPlay("main");
}

3.問題表示


問題を画面上に表示し、ボタンを用意してユーザーの入力を待つ。
問題表示用のテキストフィールドに問題を代入して問題を表示。

stop();

mondai=""add mct add ">" add eval("q" add mct);
kaitou1="1)" add eval("a" add mct add "_1");
kaitou2="2)" add eval("a" add mct add "_2");
kaitou3="3)" add eval("a" add mct add "_3");
kaitou4="4)" add eval("a" add mct add "_4");

これで、ステージ上のテキストフィールドに問題分と選択肢を表示する。
eval("q" add mct);
としているが、mct(問題番号)が1の時には、変数q1が参照される。

4.キー入力

キー入力のスクリプトは右下にあるボタンに書いてある。

on (keyPress "1") {
    sentaku=1;
    gotoAndPlay("hantei");
}
on (keyPress "2") {
    sentaku=2;
    gotoAndPlay("hantei");
}
on (keyPress "3") {
    sentaku=3;
    gotoAndPlay("hantei");
}
on (keyPress "4") {
    sentaku=4;
    gotoAndPlay("hantei");
}

1つのボタンにすべてを記述できる。
キー入力の結果を変数sentakuに代入して、ラベルhanteiに移動する。

5.判定


キー入力の結果を正解の変数と確認して、正解ならスコアを変更して、”○”を表示。
不正解なら”×”を表示。
このマルバツは1つのムービークリップのフレーム1と2。
”○”なら1フレームを指定、”×”なら2フレームを指定する。

trace("sentaku>" add sentaku);
seikai = eval("a" add mct);
if (sentaku == seikai) {
    score += 10;
    tellTarget("marubatsu"){
        gotoAndStop(1);
    }
} else {
        tellTarget("marubatsu"){
        gotoAndStop(2);
    }
}

6.問題数カウンタチェック

結果の表示を数フレームさせた後、次の動きを判断する。
最終問題ならラベルowariへ移動。
まだ問題が残っているなら、問題表示に戻る。

if (mct == mmax) {
    gotoAndPlay("owari");
} else {
    mct++;
    gotoAndPlay("main");
}

7.全体の結果表示


最終的に得点は何点だったか?という表示。
フレームはstop();で止める。

ボタンを配置し、再度ゲームが遊べるようにしておく。

on (keyPress "0") {
    gotoAndPlay("hajime");
}

以上でクイズゲームの作成は終了。
クイズ系のゲームはスクリプトを少し変更するだけで対応出来る。

動作サンプルをこちら。

FlashLiteサイト[usuaji Games]
■FlashLiteのサンプル quiz_sample1.swf
http://hspcenter.com/i/

※ケータイ用のサイト
例として、問題入りの”動物クイズ(1)”を登録しました。

サンプルのflaファイルのダウンロードはこちら
http://hspcenter.com/i/fla/quiz1.zip