Accepting user input in games is a great way to make interactive games,
in which players can name their characters or respond to questions posed by the game.
In Arcade, the ||game:ask for string with text||
block allowed developers
to prompt users with a virtual keyboard to respond to their questions.
In JavaScript, this function is just as easy to use.
game.askForString("")
Concept: Names
Saving user input in variables is useful, as it allows the values the user inputs
into the game to continue to exist - rather than just being ignored.
Example #1: Storing Your Data
- Review the code below
- Identify what type of value is returned by
||game:game.askForString||
- Identify what
"Give me data!"
in the function call does
let userInput: string = game.askForString("Give me data!");
The ||game:game.askForString||
function prompts the user to input a string
with the phrase “Give me data!”, and then the response the user gives is stored
in the variable ||variables:userInput||
as a ||text:string||
.
Student Task #1: Say my Name
- Start with the code from example #1
- Change the prompt to ask the user for their name (
"What is your name?"
)
- After asking for their name, use
||game:game.splash||
to display their name
- Add a short message to the
||game:game.splash||
to appear before
the name ("hello, "
)
- Challenge:
||game:ask||
the user for their favorite color.
Respond with a ||game:game.splash||
that repeats their favorite color back to them
- Review the code below
- Identify how the response from
||game:game.askForString||
is used
- Identify whether the response from the user is available to be used
again after the
||game:game.splash||
game.splash("I like " + game.askForString("What food do you like?"));
In the above example, the response of ||game:game.askForString||
is used without storing the result in a variable.
The result will be used in the ||game:game.splash||
,
but is inaccessible outside of that.
Student Task #2: Asking Another Quick Question
- Start with the code from example #2
- Add another line containing a
||game:game.splash||
- In the new
||game:game.splash||
, ask the user what
they had for lunch with ||game:game.askForString||
,
to ||game:splash||
it on the screen
Example #3: Give Me a Word
- Review the code below
- Identify how the prompt used relates to how the value is logged using
console.log
let animal: string = game.askForString("Give me an animal!");
console.log("Mary had a little " + animal);
Student Task #3: Ad Libbing
- Create a short story that is at least 5 sentences long
- In each sentence, pick out one or two words that are important to the story
- Remove those words from the sentence, and replace them with the part of speech
that relates to it (noun, adjective, and so on)
- After you have chosen words for every sentence, use
||game:game.askForString||
to prompt the user to give you words to replace the original with, and store each in a variable
- After asking for all the words, create a string for each sentence with the words replaced
- Use
console.log
to print each sentence in order
Here’s one example sentence to show each step:
Step 1: Making a sentence
My friend Bob told me their room was clean.
Step 2: Choosing words
“Bob” and “clean” are both important words to the story
Step 3: Replace the words
My friend NAME told me their room was ADJECTIVE.
Step 4: Prompting the user
let name1: string = game.askForString("Give me a Name");
let adjective1: string = game.askForString("Give me an Adjective");
Step 5: Creating a sentence
let name1: string = game.askForString("Give me a Name");
let adjective1: string = game.askForString("Give me an Adjective");
let sentence1: string = "My friend " + name1
+ " told me their room was " + adjective1 + ".";
Step 6: Output to the Console
let name1: string = game.askForString("Give me a Name");
let adjective1: string = game.askForString("Give me an Adjective");
let sentence1: string = "My friend " + name1
+ " told me their room was " + adjective1 + ".";
console.log(sentence1);
What did we learn?
- Explain how accepting user input can make your games more interesting and interactive.
- What does storing the value in a variable do that using it directly in a
||game:game.splash||
not allow?
Before moving on to the next lesson, it is recommended that you check out the
selected problems for this section to
review the material and practice the concepts introduced in this section.
Case Study
Ask for a Name
Ask the user for their name with ||game:game.askForString||
,
so that the game can use their name to personalize messages to them in the future.
Solution
namespace SpriteKind {
export const Asteroid = SpriteKind.create();
}
namespace asteroids {
sprites.onCreated(SpriteKind.Asteroid, function (sprite: Sprite) {
sprite.setFlag(SpriteFlag.AutoDestroy, true);
setPosition(sprite, 10);
setMotion(sprite);
});
game.onUpdateInterval(1500, function () {
sprites.create(sprites.space.spaceAsteroid0, SpriteKind.Asteroid);
});
function setMotion(asteroid: Sprite) {
asteroid.vx = randint(-8, 8);
asteroid.vy = randint(35, 20);
}
function setPosition(sprite: Sprite, edge: number) {
sprite.x = randint(edge, screen.width - edge);
sprite.y = 0;
}
}
let intro: string = "Hello! This is my Space Game!";
game.splash(intro);
let name: string = game.askForString("What is your name?");
let x: number = 80;
let y: number = 100;