さて今回からはScratchを使って実際につくった自作プログラムを紹介します。
Scratchプログラム(印西市クイズ)
今回の紹介プログラムはScratchで作るクイズプログラムです。完成系がこちら
中身はこちら
ゲームのやり方
画面に映るワンちゃんが僕の住んでいる印西市に関するクイズを出します。 ヒトデ/カニ/タコ が答えの候補を出すので、正解と思われるところにダイバーを向かせてタッチもしくはキーボードの上下左右キーで移動させてください。正解すると次の問題に移ります。不正解の場合は正解するまで問題は続きます。
プログラムの説明
プログラムの説明にはいります。
基本的な考え
さて今回は三択クイズですが、このクイズを実現するためには「問題」と「選択肢3つ」と「答え」の3種類が必要となります。今回、これを変数・配列で表現します。イメージとしてはこうなります。
この図にもあるとおり、変数 i を用意して3種(5つ)の配列の i 番目を同じタイミングで指定してやることで、問題と選択肢、答えが同時扱うことができます。本当は二次元配列を使えれば一気に解決できるのですが、Scratchでは二次元配列が扱えず、(一次元)配列のみなので、このような表現法となります。
なお、配列に問題文や回答を入れるのには手で1つ1つ入力することもできますが、量が多くなると大変です。このようにExcelまたはGoogleのスプレッドシートでCSV形式のファイルを作り1列ずつアップロードすることも可能です。
配列のアイコンを表示させて右クリックして【読み込み】として、読み込みたい列の番号を指定すると一気にデータを読み込むことができます。
今回はプログラムの内容を見てもらうため問題は10問に絞っています。
次に各キャラクターモジュール(Scratchではスプライトという)に問題や選択肢を出してもらう流れなのですが、以下のようになります。
ワンちゃんが問題を出したら、ヒトデ/カニ/タコに問題を出すように【選択肢表示】を送るとして、3つ選択肢を表示させます。そこでダイバーが触れ正解なら【次の問題】を送り、ワンちゃんは次の問題を表示して再び【選択肢表示】を送るとして問題と選択肢のセットが最後まで繰り返されていきます。
ダイバーにも【次の問題】を送っているのは、今回、クイズの答えはダイバーが正解だと思うキャラクターのところにタッチしに行くという形としているため。ダイバーがキャラクターに触れたままの状態で次の問題に移ると、そのまま触れていると判定されてしまうため、一度、元の位置にダイバーを戻すために、この流れをセットしています。
各スプライトの詳細
さて全体的な流れが見えたところで各キャラクターモジュール(スプライト)の説明をしていきます。
ワンちゃん(問題出題)
ワンちゃんのスプライト説明をします。ワンちゃんは問題文を出すのと、問題が全て終わったことを判定してクイズプログラムを終了するという処理を担っています。
まず1つ目がゲームがスタートしたときの1問目を表示させる部分です。ここでは各変数の初期化と1問目を出題し、選択肢を表示する各スプライトへの開始指示である【選択肢表示】メッセージをおくっています。
2つ目が2問目以降の問題文を出す処理と終了時の処理をつかさどる部分です。
処理の詳細は図に表した通りです。細かい部分はクリックして拡大してからみてください。
ヒトデ/カニ/タコ(選択肢表示)
次は三択クイズの選択肢を表示するスプライトについての説明です。基本的にこの3つは同じ処理となりますので1つを提示し、違う箇所を説明することになりますが、各スプライトと選択肢の関係は以下のように定義しています。そのため対応する配列も次のようになります。
スプライト | 担当してる選択肢 | 対応させる配列 |
ヒトデ | 選択肢1 | choice1 [ ] |
カニ | 選択肢2 | choice2 [ ] |
タコ | 選択肢3 | choice3 [ ] |
この前提をもとに処理を説明しますね。
これはヒトデの処理の例ですが、カニとタコも同じとなり違う箇所は、choice[i]を表示するとAnser[i]との比較の部分がカニなら2、タコなら3になるというのが唯一違う箇所になります。
ダイバー(回答者)
最後はダイバーの処理です。ダイバーは回答する人になり基本的にダイバーを動かすための操作だけの処理になります。このプログラムではタブレットの指タッチやマウスでも、キーボードでも操作できるように二通りの操作処理を書いています。それぞれは以下になります。
そして概要のところでも書きましたが、ダイバーが選択肢のスプライトにタッチしたことで回答したことになり、正解なら次の問題に移るため、そのままの位置にダイバーを停止させていたら、次の問題に移るといなやスプライトにタッチした条件が発動してしまうので、一度、ダイバーを元の位置に戻してやる必要があります。それが最後の部分です。
まとめ
さて以上で今回の三択クイズプログラムについての説明がおわりました。
とはいえ、このプログラムでは少し面白味にかけるところがあると思います。
問題をランダムで出す、動く方向によってダイバーの向きをかえる、問題数も多くして点数によって結果を判定するといった形で本格的なクイズプログラムに改造したものも作ってみました。
詳しくはこちら
コメント