Space Maze
We show you how to program speed and direction by guiding a rocket through a maze of alien UFOs.
We show you how to program speed and direction by guiding a rocket through a maze of alien UFOs.
What's the difference between velocity and speed? That's the question at the heart of this project. Velocity gives speed and direction. For example, "I traveled west on the Interstate at 73mph" is an example of velocity.
In the Space Maze game in this article, a rocket will have the ability to fly up, down, right, and left at varying speeds. The player must navigate the rocket through a field of UFOs to land on a big head in space. The maze, however, is randomly generated, requiring the player to pick a path carefully from the home base to the head.
Every time the rocket collides with a UFO, the rocket has to start the journey over. The object is to reach the head as quickly as possible, without being attacked by a UFO.
Scratch has a wonderful, but relatively small, library of built-in sprites and backgrounds. For this project, I chose to search the web for "free space sprites" to see what I could find. I found a collection of artwork that includes rockets, UFOs, backgrounds, and a big head. As a bonus, it is available under a creative commons license. Figure 1 shows the game with the list of sprites.
After downloading a ZIP file of the space sprites [1], you'll need to get the files onto your Raspberry Pi, so you can import them into a new project. Alternatively, you can download the Space Maze project, which includes the sprites and code [2]. To add the new sprites, click the Choose sprite from file icon under the Scratch stage. That's the icon with a file folder on top of a star. Navigate your filesystem to find and add the sprites.
To add the background, first click on the Stage from the list of sprites and then click the Backgrounds tab. Use the Import button to browse for and select one of the backgrounds. Figure 2 shows the Backgrounds tab with the Import Background dialog box open.
Of course, you are free to use any sprites you want for the project. When I first created this game, my five-year old wanted to make the default cat navigate through a field of monsters from the fantasy sprites included with Scratch. Our objective was to reach the sun, which is also a Scratch sprite, so this project is adaptable.
To help you determine how fast the rocket should move, you need to know the x velocity, y velocity, and speed. So, the first step in programming the rocket movement is to define those three variables. From the Data palette, click the Make a variable button to create the variables x velocity
, y velocity
, and speed
. Make each For this sprite only, because they will only apply to the rocket.
The x velocity
variable corresponds to the left and right arrow keys, and the y velocity
variable corresponds to the up and down arrow keys.
The speed
variable is a customizable setting that determines how fast the rocket should move with one arrow press. The higher the value assigned to the speed variable, the faster the rocket accelerates.
The snippet in Listing 1 shows how to use variables to calculate the velocity for a left or right arrow click. The key () pressed?
block can be found in the Sensing palette and is evaluated by the if
block.
As an example, assume the value of speed
is 2
. On the basis of the change () by ()
block, one left arrow click would evaluate to -2, which points the rocket left, and one right arrow click would be 2, which points the rocket right. That's not enough to move the sprite, but it's an important starting point because it gives x velocity
a value that will be used in another calculation at the top of the main forever
block of this program (see Listing 2).
The set () to ()
block multiplies the x velocity
value, set by a left or right arrow press, by 0.9 and assigns the new value to x velocity
. Finally, the change x by ()
block moves the rocket according to the value assigned to x velocity
.
Multiplying x velocity
by 0.9 simulates friction, which provides a way to make the rocket slow down and eventually stop unless the player keeps pressing arrow keys. A multiplier of less than one allows the rocket slow down. If you use a multiplier greater than one, the rocket picks up speed every time a new value is calculated in the forever
block loop.
Listings 1 and 2 show how x velocity
changes; the up/down arrow keys will have corresponding y velocity
calculations. The full script to set the rocket's velocity can be seen in Listing 3 and starts when the green flag is clicked.
All the work happens in the forever
block, which runs until the game stops. The set () to ()
blocks and the change
blocks run with each pass through the forever
block, continually evaluating new values for x velocity
and y velocity
. Each of the four arrow keys has its own conditional statement defined by the if key () pressed?
block.
The values calculated for x velocity
and y velocity
from arrow presses are used by the set () to ()
blocks. At the start of the game, x velocity
and y velocity
are set to 0
, which means the rocket will not move until an arrow key is pressed. Speed is set to 2.5.
The starting variable values can be seen in Listing 3. The when I receive ()
block is signaled by the velocity script via the start over
broadcast, and it's critical in setting the starting values for the rocket.
Pages: 4
Price $15.99
(incl. VAT)