Eng:Ask () and Wait (block)

The Ask and Wait block is a Sensing block and a Stack block. The block will make an input box (with the specified text above it) show at the bottom of the screen. Scratchers can input text into it and submit it, and the input is stored then in the Answer block. The Answer block automatically updates to most recent input.

This block and the answer block appear obsolete in versions of Scratch under 1.4, because they were only introduced in 1.4.

Example Uses
As this block allows users to input any text they want, it is widely used when a user must communicate with the project.

Some common uses for the Ask and Wait block:
 * Chatbots receiving information from the user

ask [What's your name?] and wait say (join [Hello, ] (join (answer) [.]))


 * Setting preferences coordinates, color, and so on

ask [Color?] and wait set [color v] effect to (answer)


 * Receiving input asking the user to give a command

ask [Move how many steps?] and wait move (answer) steps

Sensing Method
This block can be somewhat replicated with the following code:

say (question) delete (all v) of [answer v] set [count v] to [0] repeat until < and > if  then change [count v] by (1) insert [A] at (count) of [answer v] end if  then change [count v] by (1) insert [B] at (count) of [answer v] end if  then change [count v] by (1) insert [C] at (count) of [answer v] end if  then change [count v] by (1) insert [D] at (count) of [answer v] end if  then change [count v] by (1) insert [E] at (count) of [answer v] end if  then change [count v] by (1) insert [F] at (count) of [answer v] end if  then change [count v] by (1) insert [G] at (count) of [answer v] end if  then change [count v] by (1) insert [H] at (count) of [answer v] end if  then change [count v] by (1) insert [I] at (count) of [answer v] end if  then change [count v] by (1) insert [j] at (count) of [answer v] end if  then change [count v] by (1) insert [K] at (count) of [answer v] end if  then change [count v] by (1) insert [L] at (count) of [answer v] end if  then change [count v] by (1) insert [M] at (count) of [answer v] end if  then change [count v] by (1) insert [N] at (count) of [answer v] end if <key [o v] pressed?> then change [count v] by (1) insert [O] at (count) of [answer v] end if <key [p v] pressed?> then change [count v] by (1) insert [P] at (count) of [answer v] end if <key [q v] pressed?> then change [count v] by (1) insert [Q] at (count) of [answer v] end if <key [r v] pressed?> then change [count v] by (1) insert [R] at (count) of [answer v] end if <key [s v] pressed?> then change [count v] by (1) insert [S] at (count) of [answer v] end if <key [t v] pressed?> then change [count v] by (1) insert [T] at (count) of [answer v] end if <key [u v] pressed?> then change [count v] by (1) insert [U] at (count) of [answer v] end if <key [v v] pressed?> then change [count v] by (1) insert [V] at (count) of [answer v] end if <key [w v] pressed?> then change [count v] by (1) insert [W] at (count) of [answer v] end if <key [x v] pressed?> then change [count v] by (1) insert [X] at (count) of [answer v] end if <key [y v] pressed?> then change [count v] by (1) insert [Y] at (count) of [answer v] end if <key [z v] pressed?> then change [count v] by (1) insert [Z] at (count) of [answer v] end if <key [0 v] pressed?> then change [count v] by (1) insert [0] at (count) of [answer v] end if <key [1 v] pressed?> then change [count v] by (1) insert [1] at (count) of [answer v] end if <key [2 v] pressed?> then change [count v] by (1) insert [2] at (count) of [answer v] end if <key [3 v] pressed?> then change [count v] by (1) insert [3] at (count) of [answer v] end if <key [4 v] pressed?> then change [count v] by (1) insert [4] at (count) of [answer v] end if <key [5 v] pressed?> then change [count v] by (1) insert [5] at (count) of [answer v] end if <key [6 v] pressed?> then change [count v] by (1) insert [6] at (count) of [answer v] end if <key [7 v] pressed?> then change [count v] by (1) insert [7] at (count) of [answer v] end if <key [8 v] pressed?> then change [count v] by (1) insert [8] at (count) of [answer v] end if <key [9 v] pressed?> then change [count v] by (1) insert [9] at (count) of [answer v] end if <key [right arrow v] pressed?> then change [count v] by (1) end if <key [left arrow v] pressed?> then change [count v] by (-1) end if <key [space v] pressed?> then change [count v] by (1) insert [] at (count) of [answer v] end wait (0.001) secs end say []

The list "answer" will replace the answer block.

Hat Block Method
Text input can be retrieved in correct order and speed by using this method. when [a v] key pressed add [a] to [queue v]

when [b v] key pressed add [b] to [queue v]

when [c v] key pressed add [c] to [queue v]

//and so forth for each key

when [left arrow v] key pressed delete (last v) of [queue v] // backspace function

when gf clicked delete (all v) of [queue v] wait until <key [right arrow v] pressed?> // this will confirm the user is done inputting set [clump v] to [] // blank set [n v] to [1] repeat (length of [queue v]) // compile list into a single string set [clump v] to (join (clump) (item (n) of [queue v]) change [n v] by (1) end

(clump) // will be the answer

Cancellation
To cancel the text box that appears once this block is activated; one must use the Stop All block. The project can be continued as normal by using a When [Timer v] >  block.

An example of when one might want to cancel the text box is if an answer is not received in a certain amount of time, or if a cancel button is pressed.

A common method of cancellation:

when green flag clicked set [variable v] to [0]

set [variable v] to [1] reset timer stop [all v] // As soon as this block is activated the text box will disappear, so place this where the text box should disappear when [timer v] > (0.1) if <(variable) = [0]> then stop [this script v] end ... // Continue here as normal An example of this can be found here.