
前回は出題する問題と選択肢、答えを設定するリストを作成しました。
今回はその中から1問目のクイズを出題するプログラムを作っていきます。
前回の記事はこちら:①問題と選択肢を用意しよう
4択クイズを作ろう トップ記事はこちら:Scratchで4択クイズを作ろうトップ記事

解説の画像が見づらい時は、画像をクリックして拡大して見てね!
クイズを出題するスプライトを用意する
始めに、問題を出題するスプライトを用意します。
好きなスプライト選びましょう。最初からいる「スクラッチキャット」を使っても大丈夫です!

ここで選ぶのは、問題を読んでくれるスプライトです。
問題を読んでほしいスプライトを自由に選びましょう。

何を選びましたか?
この記事では「Gobo」に問題を読んでもらうことにします。
問題を読むプログラムを作成する
このスプライトに問題を読むプログラムを作っていきます。
選んだスプライトをクリックしましょう。

始めに「問題数」という変数を1つ作ります。この変数には、「今何問目か」という情報を設定します。
変数の中の『変数を作る』をクリックしましょう。

①変数名に「問題数」と入力しましょう。
②「すべてのスプライト用」を選択しましょう。
③「OK」をクリックしましょう。

これで「問題数」という変数が作成されました。
この変数を使って、始めに用意したスプライトに問題を読んでもらいましょう。
最初に「第1問!」のように今の問題数を言ってから問題文を読むようにしていきます。
見た目の中から『こんにちは!と2秒言う』というブロックをドラッグしましょう。

演算の中の『りんごとバナナ』ブロックを2つドラッグしましょう。

「バナナ」に部分に片方の『りんごとバナナ』ブロックをはめ込んで、『りんごとりんごとバナナ』となっている状態にしましょう。

これを「第○問!」となるように、次のように変更しましょう。
- 最初の「りんご」を「第」に変更
- 2つ目の「りんご」の部分に「問題数」の変数をはめ込む
- 最後の「バナナ」を「問!」に変更

これを、『こんにちは!と2秒言う』ブロックの「こんにちは!」の部分にはめこみましょう。

このままだと、「問題数」の変数に何も設定していないので正しく言ってくれません。
なので、「問題数」の変数の設定をします。
変数の中の『変数▼を1ずつ変える』ブロックをドラッグして、『第と「問題数」と問!と2秒言う』ブロックの上にくっつけましょう。
このとき、「変数▼」の部分を「問題数」に変更しましょう。

これで、この処理が実行されるたびに「問題数」変数の中身の数字が1ずつ増えていくので「第1問!」、「第2問!」のように言うようになります。
ただし、「問題数」変数をリセットしていないので、数字がどんどん増えていってしまいます。
これを防ぐために「問題数」変数をリセットする処理を追加します。
このスプライトに書いてもいいのですが、前回の記事で「背景1」にゲーム開始時のリストの設定を作っているので、変数やリストの最初の設定は「背景1」にまとめて書こうと思います。

なんでわざわざ「背景1」に書くの?
面倒くさいからここに書いたらいいじゃん。

同じようなことをする処理をまとめておくと、どこで何をやっているか整理されてわかりやすくなるからです!
<解説>
スプライトが増えたり、プログラムの量が多くなると、少し修正しようと思った時や、後でプログラムを見返したときにどこで何をしているのか探すのが大変になります。また、修正漏れなどのバグが発生する確率も上がってしまいます。
作っているときはどこに何書いているか覚えているかもしれませんが、少し時間が経ってから見てみると、どこで何を書いていたか忘れているということが、よくあります。
似たような処理をまとめておくと、見る場所が明確になるため、探す手間やバグの確率も少なくすることができます。
最初は難しいと思いますが、同じようなことをしている処理をまとめて書けるようになると、きれいなプログラムが作れるようになるので、意識してプログラミングしてみてください。
①「背景1」をクリックしましょう。
②変数の中の『変数▼を0にする』ブロックをドラッグして『緑の旗が押されたとき』ブロックの下にくっつけましょう。
③『変数▼を0にする』ブロックの「変数▼」の部分を「問題数」に変更しましょう。

これで、緑の旗が押されるたびに「問題数」変数がリセットされるようになりました。
次は実際に問題を言う処理を作ります。
①問題を出題スプライトに戻りましょう。
②見た目の中の『こんにちは!と言う』ブロックをドラッグして一番下にくっつけましょう。

変数の中の『リスト▼の1番目』ブロックをドラッグして『こんにちは!と言う』ブロックの「こんにちは!」の部分にはめ込みましょう。
このとき、『リスト▼の1番目』ブロックの「リスト▼」の部分は「問題」に変更しておきましょう。

『問題▼の1番目』の「1」の部分に、「問題数」変数をはめ込みましょう。

これで、問題を読む部分は完成しました。
初期設定後にメッセージを受け取ってから出題する
あとはゲームが開始されたときに動くようにするだけですが、『緑の旗が押されたとき』をくっつけると、正しく動かいことがあります。
なぜかというと、「背景1」のプログラムで『緑の旗が押されたとき』に変数やリストの初期設定をしています。この処理と問題を読む処理が同時に動くと、問題リストに問題文が設定される前に問題を出題することがあるためです。
これをちゃんと動くようにするために、「背景1」の初期設定が終わったらメッセージを送って、このメッセージを受け取って問題を出力するようにします。
「背景1」をクリックして、実装済みのブロックの一番下に、イベントの中の『メッセージ1▼を送る』をくっつけましょう。

『メッセージ1▼を送る』ブロックの「メッセージ1」の部分をクリックして、「新しいメッセージ」をクリックしましょう。

①新しいメッセージ名に「準備完了」を入力しましょう。
②「OK」をクリックしましょう

これで、「準備完了」というメッセージができました。
次は、このメッセージを受け取ったら問題が出題されるようにします。
①問題を出題するスプライトを選択しましょう。
②イベントの中にある『準備完了▼を受け取ったとき』ブロックを一番上にくっつけましょう。

これで、メッセージを受け取って問題を出題するプラグラムは完成です。
動作確認
最後に「緑の旗」をクリックしてちゃんと問題が出題されるか確認してみましょう。

うまく動きましたか?
「第1問!」と言ったあとに、「問題」リストの1問目の問題が読まれていることを確認しましょう。
もし、うまく動かない場合はプログラムを見直してみて、この記事のプログラムとどこが違うのか探してみましょう。
まとめ
お疲れさまでした!
これで1問目のクイズをスプライトが読んでくれるようになりました。
スプライトの位置の調整などは最後にまとめてやりますが、自由に移動させても大丈夫です。
次回は、4択の選択肢を表示させるプログラムを作ります。
今回途中で説明した「同じような処理をまとめる」については、できるようになれば、きれいで見やすいプログラムを作れるようになるので、ぜひ意識しながらプログラミングしてみてください。
次の記事はこちら↓

4択クイズを作ろう トップ記事はこちら↓

おすすめ
Scratchでのプログラミング学習におすすめの書籍です。
コメント