提供:Japanese Scratch-Wiki

このきじは ひらがなでよめます。ひらがなでよむ
() と聞いて待つ
[あなたの名前は何ですか?] と聞いて待つ
カテゴリ 調べる
タイプ スタック
追加 Scratch 1.4

() と聞いて待つブロック(調べるブロック/スタックブロック)とは、指定した文章とともに、画面の下の方に入力ボックスを表示するブロックである。ユーザーが文字を入力してEnterキーを押す、または、チェックマークをクリックすると、その内容が答えブロックに入る。もう一度、このブロックを使用すると、答えブロックの中身は、後から入力された内容に自動的に書き換わる。

このブロックと答えブロックはScratch 1.4以降で導入されたため、それ以前のバージョンでは使用できない。

使用例

このブロックを使うとユーザーが好きなテキストを入力できるため、ユーザーとのやりとりが必要なプロジェクトでは広く使用されている。 次によくある使用例を示す:

  • チャットボット(おしゃべりロボット) — ユーザーからの情報を受け取る
 [あなたの名前は何ですか?] と聞いて待つ
((答え) と [さんですね。よろしくお願いします。])と言う
  • ユーザーに設定させる — 座標、色など
 [どの色がよいですか?] と聞いて待つ
[色 v] の効果を (答え) にする
  • 入力を受け取る — ユーザーに命令してもらう
[何歩移動しますか?] と聞いて待つ
 (答え) 歩動かす

別のブロックによる表現

詳細は「代用ブロック一覧」を参照

入力する内容がアルファベットの場合、このブロックの動作に近いものが、次のコードで再現できる。

調べるブロックを使う方法

 (質問)と言う
[答え v]のすべてを削除する
[i v] を [0]にする
 <<(マウスのポインター v)に触れた> かつ <マウスが押された>>まで繰り返す
もし <(a v) キーが押された> なら
 [i v] を (1)ずつ変える
[答え v] の (i) 番目に [a] を挿入する
end
もし <(b v) キーが押された> なら
 [i v] を (1)ずつ変える
[答え v] の (i) 番目に [b] を挿入する
end
もし <(c v) キーが押された> なら
 [i v] を (1)ずつ変える
[答え v] の (i) 番目に [c] を挿入する
end
... //実際にはabcde......xyz01234...と全てプログラムを組む
もし <(7 v) キーが押された> なら
 [i v] を (1)ずつ変える
[答え v] の (i) 番目に [7] を挿入する
end
もし <(8 v) キーが押された> なら
 [i v] を (1)ずつ変える
[答え v] の (i) 番目に [8] を挿入する
end
もし <(9 v) キーが押された> なら
 [i v] を (1)ずつ変える
[答え v] の (i) 番目に [9] を挿入する
end
もし <(右向き矢印 v) キーが押された> なら
 [i v] を (1)ずつ変える
end
もし <(左向き矢印 v) キーが押された> なら
[i v] を (-1)ずつ変える
end
もし <(スペース v) キーが押された> なら
 [i v] を (1)ずつ変える
[答え v] の (i) 番目に [ ] を挿入する
end
 (0.001) 秒待つ
end
 [] と言う
Warning
メモ:
このスクリプトは完璧ではない。くわしくは このプロジェクトを参照

ここでは、リスト「答え」が答えブロックの代わりとなっている。

ハットブロックを使う方法

次の方法を使うと、キーが押された順番に入力が取得される(こちらも日本語には対応していない)

[a v] キーが押されたとき
[a] を [答え v]に追加する

[b v] キーが押されたとき
[b] を [答え v]に追加する

[c v] キーが押されたとき
[c] を [答え v]に追加する

//同じように、すべてのキーについて追加する

[左向き矢印 v] キーが押されたとき
[答え v] の [last]番目を削除する// バックスペース機能

@greenFlag が押されたとき::events hat
[答え v]のすべてを削除する
<(右向き矢印 v) キーが押された> まで待つ// この動作でユーザーの入力終了とする
[答え用の変数 v] を []にする //空にする
[i v] を [0]にする
([答え v]の長さ::list) 回繰り返す// リストの内容を1つの文章につなげる
[i v] を (1)ずつ変える
 [答え用の変数 v] を ((答え用の変数) と ([答え v] の (i) 番目::list))にする
end

(答え用の変数) // これが答えになる

入力ボックスをキャンセルする

一度表示した入力ボックスを消す(キャンセルする)もっとも手っ取り早い方法は、[すべてを止める v]ブロックを使用する方法である。キャンセルした後もスクリプトの実行を継続したいときは、[タイマー v] > () のときブロックを使うとよい。

指定した秒数待っても「答え」が入力されない場合、キャンセルボタンが押された場合に入力ボックスをキャンセルするには、次のようにすれば良い。

@greenFlag が押されたとき::events hat
[変数 v] を [0] にする

[変数 v] を [1]にする
タイマーをリセット
[すべてを止める v] // このブロックが実行された瞬間にテキストボックスが消えるので、テキストボックスを消したい場所にこれを置く

[タイマー v] > (0)のとき
もし <(変数) = [0]> なら
[このスクリプトを止める v]
end
... // 通常通り、処理がつづけられる

関連項目

Cookieは私達のサービスを提供するのに役立ちます。このサービスを使用することにより、お客様はCookieの使用に同意するものとします。