スクラッチプログラミング

7-3 感想を言うヒキガエル

質問への感想を言うヒキガエルのプログラムを作成します。といってもヒキガエルはAIではなく、リストにあらかじめ感想を持っていて、それをランダムに選んで答える、というトリックを使います。

ステップ1

  1. スクラッチの画面で新しいプロジェクトを作成し、ネコのスプライトを削除します。プロジェクト名を「感想を言うヒキガエル」にします。
  2. スプライトライブラリからWizard-toadスプライトを読み込みます。

ステップ2

つづいて、感想の文字列をあらかじめ入れておくリストimpressionsを作成します。このリストは練習のため、手作業で作成することにします。

  1. [変数]-[リストを作る]ボタンをクリックして、impressionsという名前の新しいリストを作成します。
  2. リストを手作業で作成するには、まずリストの枠の左下にある[+]をクリックします。するとリストの中に空のテキスト入力が表示されるので、ここに「すばらしい!」と入力します(「」はつけません)
  3. 文字がリストの枠に収まらないので、リストの右下をドラッグして幅を広げます。
  4. [+]をクリックします。すると1つめの下に2つめのボックスが表示されるので、今度は「だめだ」を入力します。
  5. 同じようにして3つめに「まあまあ」、4つめに「ぜんぜんだめ」、5つめに「よしなさい」を入力します。

ステップ3

次は、ヒキガエルのスプライトにコードブロックを設定していきましょう。

  1. ヒキガエルのスプライトのコードエリアに[緑の旗が押されたとき]イベントブロックをドラッグ&ドロップします。
  2. [調べる]-[(あなたの名前は何ですか?)と聞いて待つ]をドラッグ&ドロップします。文字列を「何が聞きたいのだ?」に変更します。
  3. [見た目]-[(こんにちは!)と(2)秒言う]ブロックをドラッグ&ドロップします。
  4. この(こんにちは)の部分には、ヒキガエルの感想として、リストimpressionsの中のどれかを入れたいわけです。ここではひとまずリストimpressionsの1番めの項目を適用することにします。

  5. [変数]-[リストを作る]ボタンの下にある((impressions)の(1)番目)を、(こんにちは)の上にドラッグ&ドロップします。
  6. (こんにちは)は長丸の形をしており、((impressions)の(1)番目)も同じ長丸です。これは(こんにちは)の部分に((impressions)の(1)番目)が正しくはまることを示しています。

プログラムをテストしてみます。ヒキガエルは初め「何が聞きたいのだ?」と聞いてきます。テキスト入力ボックスに何か適当な質問を入れてボタンをクリックすると、ヒキガエルは「すばらしい!」と感想を言います。

ただし、ヒキガエルは何を聞かれても「すばらしい!」と答えます。リストimpressionsの1番めは「すばらしい!」なので、ヒキガエルの答えはいつも同じです。ちなみにコードブロックを((impressions)の(2)番目)に変更すると、ヒキガエルは「だめだ」と言います。

ステップ4

答えがランダム(無作為)になるよう、変化をつけます。プログラムにランダム性を加えるには、コンピュータが作為なく作成する乱数(らんすう)を利用します。

  1. [演算]-((1)から(10)までの乱数)をドラッグし、((impressions)の(1)番目)の(1)の上にドロップします。
  2. ((impressions)の(1)番目)を右の方から(1)に近づけていくと、(1)の円が強調表示されるので、そのタイミングでドロップします。

  3. プログラムを実行し、適当な質問を入力してテストします。感想はリストからランダムに選ばれているように思えますが、ヒキガエルが何も答えない場合もも多くあります。

先へ進む前に、次のブロックの動作をしっかり見ておきましょう。

このブロックは、紫色のブロックの中にオレンジのブロックが含まれ、オレンジのブロックの中に緑のブロックが含まれるという、複雑な構造をしています。
コードブロックは、内側のものから実行されていきます。

まず((1)から(10)までの乱数)ブロックが実行されます。これは1から10までの整数からランダムに1つの数値を選び出します。たとえば5を選んだとします。

すると((1)から(10)までの乱数)の部分が数値の5に置き換わり、(impressionsの( )番め)の( )に入って(impressionsの(5)番め)になります。

リストimpressionsの5番めは「よしなさい」です。この「よしなさい」という文字列が[( )と(2)秒言う]の( )に入ります。

すると[(よしなさい)と(2)秒言う]になるので、これが実行され、ヒキガエルの吹き出しに「よしなさい」という文字が2秒間表示されて消えます。

この複雑な構造は今後もよく出てきます。コードブロックを上から追って、声に出すなり、図に書くなりして、ここでしっかりと理解しておきましょう。


もう少し詳しく言うと、内部に別のブロックを含む複雑なコードブロックを見つけると、スクラッチはその内部に入ります。そしてその内部にさらに別のブロックが含まれていると、そこに入ります。今の場合で言うと((1)から(10)までの乱数)ブロックです。この中には別のブロックはもうないので、スクラッチはこのブロックの演算を行い、10から10までの整数からランダムに1つ整数を選びます。これがたとえば5だったとします。するとこの5はその1つ外側の((impressions)の( )番目)ブロックの( )の中に入り、このブロックは((impressions)の(5)番目)ということになります。スクラッチはここでリストimpressionsの5番めを見にいきます。するとそれは「よしなさい」という文字列だということが分かるので、これを1つ外側の(( )と(2)秒言う)ブロックの( )の中に入れます。するとこのブロックは((よしなさい)と(2)秒言う)となり、吹き出しに「よしなさい」と表示されます。

別の場合、((1)から(10)までの乱数)で3が選ばれたときには、((impressions)の(3)番目)となり、これは「まあまあ」なので、((まあまあ)と(2)秒言う)となって、ヒキガエルは「まあまあ」と2秒言うことになります。

このようにコードの流れ(何が行われているか)を自分の言葉でたどることは重要です。将来間違いなく、みなさんのプログラミングスキルをアップさせます。


ステップ5

ヒキガエルはランダムに感想を言いますが、何も言わないときもよくあります。これは(( )と(2)秒言う)ブロックのセリフの( )に文字列が入れられないからで、つまり答えがない、リストimpressionsにない位置(番め)を選んでいるからです。たとえばランダムに8が選ばれた場合、リストimpressionsには8番めの項目はありません。

これを防ぐのは簡単です。選ぶ範囲をリストの長さに限ればよいのです。そのためには((1)から(5)までの乱数)にして、1から5の中から数値を選ぶようにします。

ステップ6

プログラムを完成させましょう。ステージではリストimpressionsの中身が丸見えになっているので、ヒキガエルは実は何も考えていないことがばれてしまいます。リストimpressionsを消すには、[変数]-[リストを作る]ボタンの下の(impressions)の左にあるチェックボックスをクリックして、チェックを解除します。

または、[緑の旗が押されたとき]のすぐ下に、[リスト(impressions)を隠す]を挿入します。

このプログラムはこのリンクからダウンロードできます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です