提供: Japanese Scratch-Wiki

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

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

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

使用例

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

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

別のブロックによる表現

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

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

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

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

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

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

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

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

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

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

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

[左向き矢印 v] キーが押されたとき
(最後 v) 番目を [キュー v] から削除する// バックスペース機能

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

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

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

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

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

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

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

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

関連項目