子供向けプログラミング言語Scratch(スクラッチ):実行時の値の入力

プログラム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つだけのスクリプト実行スクリプト実行方法の説明はこちら)すると、次のように表示されます。

図2-1.[□を聞いて待つ]ブロック1つのスクリプトの実行例
図2-1.[□を聞いて待つ]ブロック1つのスクリプトの実行例

3.実行時の入力が保持されるブロック:[答え]ブロック

[調べる]グループの[□と聞いて待つ]ブロックで促されて入力された値は、同じ[調べる]グループの[答え]ブロックに自動的に保持されます。

[答え]ブロックは、値ブロックという種類のブロックの1つで、Scratchのシステムが初めから用意している変数の1つです。
[□と聞いて待つ]ブロックが1度以上実行されると、ある時点での最後の[□と聞いて待つ]ブロック実行の値が、その時点の[答え]ブロックの値です。

[答え]ブロック変数、すなわち、値を表すものです。
したがって、[答え]ブロックスクリプトの中で存在できる場所は、値を設定するところ、具体的には、他のブロックの「□」や「〇」となっているところです。
[答え]ブロックは、他のブロックの「□」や「〇」にはめ込んで、その値を使用します。

では、図2-1のスクリプトブロックを追加して、ユーザーが入力した([答え]ブロックに保持された)名前の文字列を、猫の吹き出しで表示するスクリプトになるように、修正してみます。
具体的には、[□と聞いて待つ]ブロック1つのスクリプトの下に、[見た目]グループの[□と〇秒言う]ブロックを付け、その「□」には[調べる]グループの[答え]ブロックを、「〇」には「2」を入れて、[答え]ブロックの値を2秒間、猫のスプライトから吹き出しで出力するスクリプトになるよう、追加修正します。

例えば、この新しいスクリプト実行スクリプト実行方法の説明はこちら)し、名前として「は」「な」「こ」と入力し、

図3-1.[□を聞いて待つ]と[答え]ブロックのスクリプトの実行経過1
図3-1.[□を聞いて待つ]と[答え]ブロックのスクリプトの実行経過1

エンターキーを押すと、[答え]ブロックの値は「はなこ」という文字列になり、猫のスプライトの吹き出しで表示されます。

図3-2.[□を聞いて待つ]と[答え]ブロックのスクリプトの実行経過2
図3-2.[□を聞いて待つ]と[答え]ブロックのスクリプトの実行経過2

なお、お気づきのように、[答え]ブロックの値は、[□と聞いて待つ]ブロック実行される度に、新しく入力された値で上書きされ、変わってしまいます。
そのため、[□と聞いて待つ]ブロックを何度も実行するプロジェクトでは、自分で別に変数やリストをいくつか用意し、[□と聞いて待つ]ブロック実行直後に、用意した変数やリストの要素に[答え]ブロックの値を代入しておきます。

4.プロジェクトの実行時にユーザーが入力した値を使う例

4.1.例1:名前を聞いて挨拶をするプロジェクト

例1のプロジェクトでは、実行時、ユーザーに名前を入力させ、その名前の入ったあいさつを出力します。

例えば、この新しいプロジェクト実行し、名前として「は」「な」「こ」と入力し、

図4-1-1. 名前を聞いて挨拶をするプロジェクトの実行経過1
図4-1-1. 名前を聞いて挨拶をするプロジェクトの実行経過1

エンターキーを押すと、[答え]ブロックの値は「はなこ」という文字列になり、猫のスプライトの吹き出しで「はなこさん、こんにちは。」と表示されます。

図4-1-2. 名前を聞いて挨拶をするプロジェクトの実行経過2
図4-1-2. 名前を聞いて挨拶をするプロジェクトの実行経過2

4.2.例2:税込金額を計算するプロジェクト

例2のプロジェクトでは、実行時にユーザーに商品名とその定価を入力させ、商品名と税込価格(定価×1.08を計算)を出力します。

[調べる]グループの[□と聞いて待つ]ブロックを1回目に使ったときに入力された(商品名の)値は一時的に[調べる]グループの[答え]ブロックに保持されますが、定価を聞くために2回目に[□と聞いて待つ]ブロックを使ったときに[答え]ブロックの値は新しく入力された(定価の)値と置き換わってしまいます。
そのため、変数「商品名」を[データ]グループで用意して置き、1回目の[□と聞いて待つ]ブロックの直後で、変数「商品名」に[答え]ブロックの値を代入しておきました。
ついでに、変数「金額」を[データ]グループで用意して置き、2回目の[□と聞いて待つ]ブロックの直後で、変数「金額」に[答え]ブロックの値を代入しておきました。
実際問題として、今回は変数「金額」を用意する必要はないのですが([答え]ブロックに最後の入力として保持されているから)、通常は、値と役割をはっきりさせるために、あえて変数を用意し、変数に値を代入して、([答え]ブロックの方ではなく)変数の方を使用することが多いです。

例えば、この新しいプロジェクト実行し、まず、「商品名は?」と聞かれるので、「本」と入力し、

図4-2-1. 名前を聞いて挨拶をするプロジェクトの実行経過1
図4-2-1. 名前を聞いて挨拶をするプロジェクトの実行経過1

エンターキーを押すと、裏で[答え]ブロックの値が変数「商品名」に代入されます。
次に、「定価はいくらですか?」と聞かれるので、「1000」と入力し、

図4-2-2. 名前を聞いて挨拶をするプロジェクトの実行経過2
図4-2-2. 名前を聞いて挨拶をするプロジェクトの実行経過2

エンターキーを押すと、裏で[答え]ブロックの値が変数「金額」に代入されます。
そして、最後の[□と〇秒言う]ブロックの「□」に、文字列の連結を行う[演算]グループの[□と□]ブロックいくつかと、同じ[演算]グループの掛け算を行うブロックと四捨五入を行うブロックを使って、「本は、税込1080円です。」という文字列を作って、吹き出しに5秒間出力します。

図4-2-3. 名前を聞いて挨拶をするプロジェクトの実行経過3
図4-2-3. 名前を聞いて挨拶をするプロジェクトの実行経過3

5.まとめ

プロジェクト実行中に、キーボードからの入力をユーザーに促し、その入力内容を得るには、[調べる]グループの2つのブロック([□と聞いて待つ]ブロックと[答え]ブロック)を組み合わせて使います。

・[□と聞いて待つ]ブロック実行されると、対象となるスプライトから吹き出しが出て、吹き出しに「□」の中の文字列が表示され、さらに、入力欄が表示され、入力欄のカーソルが点滅し、ユーザーがこのカーソルから入力した値がプロジェクトに取り込まれ、[答え]ブロックの値になります。

・[□と聞いて待つ]ブロック実行で[答え]ブロックに一旦保持された値を確実に保存するためには、次に[□と聞いて待つ]ブロック実行される前に、[データ]グループで作った変数やリストの要素の1つに、代入する必要があります。

6.おまけ

4.1.例1:名前を聞いて挨拶をするプロジェクト は、Scratchコミュニティーサイトの以下のURLで共有しているので、興味のある方は、アクセスしてご覧ください。
https://scratch.mit.edu/projects/147509188/#editor
また、例1のプロジェクトを以下に埋め込みましたので、実際にここから実行することができます。

4.2.例2:税込金額を計算するプロジェクト は、Scratchコミュニティーサイトの以下のURLで共有しているので、興味のある方は、アクセスしてご覧ください。
https://scratch.mit.edu/projects/147515241/#editor
また、例2のプロジェクトを以下に埋め込みましたので、実際にここから実行することができます。

コメントを残す