プログラム(Scratchではプロジェクトと呼びます)の実行時にユーザーが入力した値を、プログラムの中で使うプログラミングを行うとき、子供向けプログラミング言語 Scratch(スクラッチ)では[調べる]グループの2つのブロックを利用します。
このブログ記事では、その2つのブロックの使い方を説明します。
【目次】
1.はじめに
2.実行時の入力を促し入力させるブロック:[□と聞いて待つ]ブロック
3.実行時の入力が保持されるブロック:[答え]ブロック
4.プロジェクトの実行時にユーザーが入力した値を使う例
4.1.例1:名前を聞いて挨拶をするプロジェクト
4.2.例2:税込金額を計算するプロジェクト
5.まとめ
6.おまけ
1.はじめに
変化にとんだプログラム(プロジェクト)にする1つの方法として、プログラムの実行中、ユーザーに任意の値を入力させる処理をもつプログラムを作ることがあります。
現在のScratchのバージョンであるScratch2.0のプロジェクトの実行中に、キーボードからの入力をユーザーに促し、その入力内容を得るには、[調べる]グループの2つのブロック([□と聞いて待つ]ブロックと[答え]ブロック)を組み合わせて使います。
さらに、得た入力内容を確実に保存するためには、[データ]グループで作った変数やリストの要素の1つに、代入する必要があります。
2.実行時の入力を促し入力させるブロック:[□と聞いて待つ]ブロック
[調べる]グループの[□と聞いて待つ]ブロックが実行されると、対象となるスプライトから吹き出しが出て、吹き出しに「□」の中の文字列が表示され、さらに、入力欄が表示され、入力欄のカーソルが点滅し、ユーザーがこのカーソルから入力した値がプロジェクトに取り込まれます。
そこで、[調べる]グループの[□と聞いて待つ]ブロックを使うとき、「□」には必要な入力を促す具体的な文言の文字列を入れます。
そうすることで、プロジェクトを実行するユーザーが適当な範囲や種類の文字列を入力してくれるように、導きます。
例えば、[調べる]グループの[□と聞いて待つ]ブロックの「□」に「お名前は?」という文字列を入れて、このブロック1つだけのスクリプトを実行(スクリプトの実行方法の説明はこちら)すると、次のように表示されます。
3.実行時の入力が保持されるブロック:[答え]ブロック
[調べる]グループの[□と聞いて待つ]ブロックで促されて入力された値は、同じ[調べる]グループの[答え]ブロックに自動的に保持されます。
[答え]ブロックは、値ブロックという種類のブロックの1つで、Scratchのシステムが初めから用意している変数の1つです。
[□と聞いて待つ]ブロックが1度以上実行されると、ある時点での最後の[□と聞いて待つ]ブロックの実行の値が、その時点の[答え]ブロックの値です。
[答え]ブロックは変数、すなわち、値を表すものです。
したがって、[答え]ブロックがスクリプトの中で存在できる場所は、値を設定するところ、具体的には、他のブロックの「□」や「〇」となっているところです。
[答え]ブロックは、他のブロックの「□」や「〇」にはめ込んで、その値を使用します。
では、図2-1のスクリプトにブロックを追加して、ユーザーが入力した([答え]ブロックに保持された)名前の文字列を、猫の吹き出しで表示するスクリプトになるように、修正してみます。
具体的には、[□と聞いて待つ]ブロック1つのスクリプトの下に、[見た目]グループの[□と〇秒言う]ブロックを付け、その「□」には[調べる]グループの[答え]ブロックを、「〇」には「2」を入れて、[答え]ブロックの値を2秒間、猫のスプライトから吹き出しで出力するスクリプトになるよう、追加修正します。
例えば、この新しいスクリプトを実行(スクリプトの実行方法の説明はこちら)し、名前として「は」「な」「こ」と入力し、
エンターキーを押すと、[答え]ブロックの値は「はなこ」という文字列になり、猫のスプライトの吹き出しで表示されます。
なお、お気づきのように、[答え]ブロックの値は、[□と聞いて待つ]ブロックが実行される度に、新しく入力された値で上書きされ、変わってしまいます。
そのため、[□と聞いて待つ]ブロックを何度も実行するプロジェクトでは、自分で別に変数やリストをいくつか用意し、[□と聞いて待つ]ブロックの実行直後に、用意した変数やリストの要素に[答え]ブロックの値を代入しておきます。
4.プロジェクトの実行時にユーザーが入力した値を使う例
4.1.例1:名前を聞いて挨拶をするプロジェクト
例1のプロジェクトでは、実行時、ユーザーに名前を入力させ、その名前の入ったあいさつを出力します。
例えば、この新しいプロジェクトを実行し、名前として「は」「な」「こ」と入力し、
エンターキーを押すと、[答え]ブロックの値は「はなこ」という文字列になり、猫のスプライトの吹き出しで「はなこさん、こんにちは。」と表示されます。
4.2.例2:税込金額を計算するプロジェクト
例2のプロジェクトでは、実行時にユーザーに商品名とその定価を入力させ、商品名と税込価格(定価×1.08を計算)を出力します。
[調べる]グループの[□と聞いて待つ]ブロックを1回目に使ったときに入力された(商品名の)値は一時的に[調べる]グループの[答え]ブロックに保持されますが、定価を聞くために2回目に[□と聞いて待つ]ブロックを使ったときに[答え]ブロックの値は新しく入力された(定価の)値と置き換わってしまいます。
そのため、変数「商品名」を[データ]グループで用意して置き、1回目の[□と聞いて待つ]ブロックの直後で、変数「商品名」に[答え]ブロックの値を代入しておきました。
ついでに、変数「金額」を[データ]グループで用意して置き、2回目の[□と聞いて待つ]ブロックの直後で、変数「金額」に[答え]ブロックの値を代入しておきました。
実際問題として、今回は変数「金額」を用意する必要はないのですが([答え]ブロックに最後の入力として保持されているから)、通常は、値と役割をはっきりさせるために、あえて変数を用意し、変数に値を代入して、([答え]ブロックの方ではなく)変数の方を使用することが多いです。
例えば、この新しいプロジェクトを実行し、まず、「商品名は?」と聞かれるので、「本」と入力し、
エンターキーを押すと、裏で[答え]ブロックの値が変数「商品名」に代入されます。
次に、「定価はいくらですか?」と聞かれるので、「1000」と入力し、
エンターキーを押すと、裏で[答え]ブロックの値が変数「金額」に代入されます。
そして、最後の[□と〇秒言う]ブロックの「□」に、文字列の連結を行う[演算]グループの[□と□]ブロックいくつかと、同じ[演算]グループの掛け算を行うブロックと四捨五入を行うブロックを使って、「本は、税込1080円です。」という文字列を作って、吹き出しに5秒間出力します。
5.まとめ
・プロジェクトの実行中に、キーボードからの入力をユーザーに促し、その入力内容を得るには、[調べる]グループの2つのブロック([□と聞いて待つ]ブロックと[答え]ブロック)を組み合わせて使います。
・[□と聞いて待つ]ブロックが実行されると、対象となるスプライトから吹き出しが出て、吹き出しに「□」の中の文字列が表示され、さらに、入力欄が表示され、入力欄のカーソルが点滅し、ユーザーがこのカーソルから入力した値がプロジェクトに取り込まれ、[答え]ブロックの値になります。
・[□と聞いて待つ]ブロックの実行で[答え]ブロックに一旦保持された値を確実に保存するためには、次に[□と聞いて待つ]ブロックが実行される前に、[データ]グループで作った変数やリストの要素の1つに、代入する必要があります。
6.おまけ
・4.1.例1:名前を聞いて挨拶をするプロジェクトは、Scratchコミュニティーサイトの以下のURLで共有しているので、興味のある方は、アクセスしてご覧ください。
https://scratch.mit.edu/projects/147509188/#editor
・4.2.例2:税込金額を計算するプロジェクトは、Scratchコミュニティーサイトの以下のURLで共有しているので、興味のある方は、アクセスしてご覧ください。
https://scratch.mit.edu/projects/147515241/#editor
コメント