Introduction

This game is a two player game where you race a parrot and a lioness across the desert. Each player has to press a key as fast as they can to move their animal, the first one to reach the edge of the screen wins.

screenshot

STEP 1: Create the scene and add the sprites

Activity Checklist

scratch2

  1. Select the Stage, and add the Nature/desert backdrop.
    ticking off the boxes below:
  2. Add a new sprite, select the Lioness sprite that you will find in the Animals folder.
  3. Add another sprite, select the Parrot sprite that you will find in the Animals folder. Shrink it so that it is roughly the same size as the lioness sprite.

STEP 2: Make the lioness and the parrot move

We want the sprite to move when you press a key.

Activity Checklist

  1. First select the lion sprite and set it to move (4) steps when you press the ‘L’ key.

when [l v] key pressed
    move (4) steps

  1. Next, select the parrot sprite and set it to move (4) steps when you press the ‘A’ key.

when [a v] key pressed
    move (4) steps

Test Your Project

Click the green flag
Do your lioness and parrot move across the screen when you press the ‘A’ and ‘L’ keys?

Save your project

STEP 3: Starting the race

We need to have a way to start the race and to know who has won. First we create a start button.

Activity Checklist

  1. Add a new sprite from a file. Choose the button3 sprite which is inside “Things”.
  2. Edit the costume of the button sprite, add the text ‘start’ to it and click OK. Move the sprite to the middle of the stage.
  3. Now add a script that shows the sprite when the project is run:

    when FLAG clicked
    show

  1. Now we want the button to count down from 3 and then say go and then hide when it is clicked. Add another script like this one:

when this sprite clicked
    say [3] for (1) secs
    say [2] for (1) secs
    say [2] for (1) secs
    say [GO!] for (1) secs
    hide

Test Your Project

Click on the green flag.

When you press the start button does it countdown to the start of the race before disappearing?

Save your project

We only want the racers to move after the race has started and we want to know when the race has finished so we need a variable to hold that information.

  1. Add a variable for all sprites called racing. Untick the box next to it so it does not show on the stage.
  2. Now set racing to be 0 when the project is first started. Change your when flag clicked script from before to look like this:

when FLAG clicked
    show
    set [racing v] to (0)

  1. Next, set the racing variable to be 1 when the starting countdown has finished.
  2. Now we need to stop the lion and the parrot from moving unless the racing variable is set to be 1. Click on the parrot sprite. Add a control block to the script that only allows the parrot to move if racing = 1.


    when [a v] key pressed
    if <(racing) = [1]>
        move (4) steps

  1. Now do the same for the lion sprite.

Test Your Project

Click on the green flag.

Does the lioness or the parrot move only after the countdown has finished?

We want to know who wins the race and reset it when it has finished so you can
race again.

Save your project

STEP 4: Finishing the race

Activity Checklist

  1. Add a block to the parrot’s script that sets the racing variable to be 0 when the sprite touches the edge of the screen.

when [a v] key pressed
if <(racing) = [1]>
    move (4) steps
    if <touching [edge v]?>
    set (racing) to [0]

  1. Now we want the parrot to let us know if it wins the race. Record a new sound for the Parrot sprite that will be played when the parrot wins. Click sounds and then record the sound of the parrot winning the race!
  2. Now add blocks that play the sound you recorded and makes the parrot say it has won:

    when [a v] key pressed
    if <(racing) = [1]>
        move (4) steps
        if <touching [edge v]?>
            set (racing) to [0]
            play sound [recording1 v]
            say [The Parrot Wins! v] for (3) secs

  1. Now repeat these steps for the lioness.

Test Your Project

Click on the green flag.

Can you press the start button and race by pressing the ‘A’ and ‘L’ keys?
Do the sprites make their winning sound and say they’ve won when they reach the end of the race?

Save your project

STEP 5: Resetting the game

After the race is finished we need to tell the other sprites we have won and reset the game so we can play again.

We need the winning sprite to broadcast that it has won.

Activity Checklist

  1. Click on the Parrot sprite.
    Add a block that broadcasts a “finished” message after the sprite says it has won.

when [a v] key pressed
if <(racing) = [1]>
    move (4) steps
    if <touching [edge v]?>
        set (racing) to [0]
        play sound [recording1 v]
        say [The Parrot Wins! v] for (3) secs
        broadcast [finished v]

  1. Now we need to add a new script that listens for the finished broadcast and moves the parrot back to the start. What happens if you change the value that x is set to?

when I receive [finished v]
    set x to (-170)

  1. Now add the same script for the lioness. Test different x values to make sure the lion and the parrot line up at the start.
  2. We also want to put the lion and the parrot in the same position when the project is run, so add another script to each that moves them to the start when we click the flag.

when FLAG clicked
    set x to (-170)

  1. Now click on the button sprite and add a script that shows it when it receives the finished message.

Test Your Project

Click on the green flag.

Can you race against a friend, one of you moving the parrot by pressing ‘A’ and the other moving the Lion by pressing ‘L’?

Save your project

Challenge 1: Add a booster

  • Try to add a booster that you can use once each race that moves the parrot or the lion 30 steps in 1 go.
  • Add a new costume with fire coming out behind for each sprite and make it appear when the boost is pressed.
  • Create another sound that the sprite will make when the boost is pressed.

when [p v] key pressed
if <<(racing) = [1]> and <(boosted) = [0]>>
    switch to costume [parrot-boost v]
    set [boosted v] to [1]     
    move (4) steps
    if <touching [edge v]?>
         set (racing) to [0]
        play sound [recording1 v]
        say [The Parrot Wins! v] for (3) secs
        broadcast [finished v]

Test Your Project

Save your project

Challenge 2: Use custom blocks to simplify your script

The code to check if the race has finished is now used in two places for each sprite: when the sprite is moving normally and when it’s moving with the booster. We can simplify our script using a custom block which is a chunk of code that gets used in more than one place. It’s a bit like making up our own Scratch code block!

  1. Choose the Parrot’s script.
  2. Select the More Blocks palette and then click the Make a Block button.
  3. Give the custom block a name by typing “finished” into the pink box. Then click OK.
  4. You’ll now see a define finished block appear in the scripts window. Drag it to a clear area.
  5. Detach the iftouching edge?then block and drag it to the define finished block.

define finished
 if <touching [edge v]?>
     set (racing) to [0]
     play sound [recording1 v]
     say [The Parrot Wins! v] for (3) secs
     broadcast [finished v]

when [q v] key pressed 
if <<(racing) = [1]> and <(boosted) = [0]>>
    switch to costume [parrot-boost v]
    set [boosted v] to [1]     
    move (4) steps
finished

Can you drag the finished block from the palette and use it like any other code item?

Delete the other iftouching edge? block from your script and replace it with another finished custom block.

Does this make your code easier to read? Can you create a similar custom block for the lioness sprite?

Test Your Project

Save your project

Well done you’ve finished, now you can enjoy the game!