## Goals

In this assignment we will practice the following computer science concepts:

• Calling Actions on Objects

## Computer Science Principles Curriculum

• Big Idea: Creativity: EU 1.2, LO 1.2.3, EK 1.2.3A
• Big Idea: Algorithms: EU 4.1, LO 4.1.1, EK 4.1.1B
• Big Idea: Programming: EU 5.2, LO 5.2.1, EK 5.2.1A, EK 5.2.1B, EK 5.2.1C, EK 5.2.1D, EK 5.2.1E, EK 5.2.1F

## Common Core Standards

• English Language Arts Standards » Science & Technical Subjects: CCSS.ELA-Literacy.RST.9-10.2, CCSS.ELA-Literacy.RST.9-10.3, CCSS.ELA-Literacy.RST.9-10.4, CCSS.ELA-Literacy.RST.9-10.5, CCSS.ELA-Literacy.RST.9-10.7, CCSS.ELA-Literacy.RST.9-10.10, CCSS.ELA-Literacy.RST.11-12.2, CCSS.ELA-Literacy.RST.11-12.3, CCSS.ELA-Literacy.RST.11-12.4, CCSS.ELA-Literacy.RST.11-12.5
• Mathematics Content: High School Geometry » Congruence: CCSS.Math.Content.HSG.CO.12, CCSS.Math.Content.HSG.CO.13
• Mathematics Content: High School Geometry » Modeling with Geometry: CCSS.Math.Content.HSG.MG.1, CCSS.Math.Content.HSG.MG.3
• Standards For Mathmatical Practice: CCSS.Math.Practice.MP1, CCSS.Math.Practice.MP2, CCSS.Math.Practice.MP4, CCSS.Math.Practice.MP5, CCSS.Math.Practice.MP6, CCSS.Math.Practice.MP7, CCSS.Math.Practice.MP8

## Overview

In this assignment, you will write a program that plays a simple race between a tortoise and a hare. You will tell the tortoise and the hare where to run to during the race. Download this zip folder for a template to help you get started.

## Understanding the Provided Template

Open the provided template and navigate to the main.quorum file.

There is an action already defined for you. This action begins on the line that starts with `action Update(number seconds)`. This action updates your game window on each frame of the game.

Here is what the action looks like in its entirety on lines 44 through 47.

``````action Update(number seconds)
hare:Update(seconds)
tortoise:Update(seconds)
end``````

You write your code to move the tortoise and the hare around the race track in the action labeled `action CreateGame`. You can find this action starts on line 18 through line 22.

Here is what the action looks like, on lines 34 through 35.

``````action CreateGame
end``````

## Goal 1: Calling Actions on Objects

Navigate to the CreateGame action on line 18. You write your code here. The first thing you need to do is to set up the background and `Sprite` objects for the race.

Example: Load and add the background `Drawable`.

``````racetrack:Load("racetrack.png")
Add(racetrack)
``````

Activity: Load and add the tortoise and hare `Sprite` objects.

Once you load and add the objects, you can set the initial position. This is done using the `SetInitialPosition` action, passing the starting coordinates. Since the race starts at the bottom left corner, or (0, 0), this should be the initial position.

Example: Set the initial position for the hare `Sprite`.

``````// this line of code tells the hare that its initial position is the coordinate (0, 0)
hare:SetInitialPosition(0, 0)
``````

Activity: Set the initial position for the tortoise.

Once you have set up your `Sprite` objects, give each a speed by using the `SetSpeed` actions. The `SetSpeed` action takes a `number` parameter to set as the speed. The speed of the `Sprite` objects is represented by how many pixels they will move across the screen in a second. This means that if the number you pass is too small, then you may have a hard time noticing the movement. If the value is too large, your image will appear to jump across the screen rather than have a smooth movement. Good values to choose are between 50 and 300.

Example: Set the speed for the hare by calling `SetSpeed(number)`.

``````//This gives your hare an initial speed of 100 pixels per second
hare:SetSpeed(100)
``````

Activity: Set the speed for the tortoise.

Your `Sprite` objects are now ready to begin racing! But they need to be told where to go. The race is to go counter-clockwise starting from the lower left corner to the lower right corner, to the upper right corner, to the upper left corner, and back to the bottom left corner.Tell the `Sprite` objects which coordinates to move to by using a series of `MoveTo(x, y)` commands, passing the x and y coordinates of the screen location they should run to.

Example: Tell the hare and tortoise `Sprite` objects to go to the position (1440, 770).

``````// this line tells the hare to move to the coordinate (1440, 0)
hare:MoveTo(1440, 0)
// this line tells the tortoise to move to the coordinate (1440, 0)
tortoise:MoveTo(1440, 0)
``````

Activity: Write the additional `MoveTo` commands to finish the race.

The `MoveTo` actions take place in the order you give them in your program, so you should give them in the correct order so that the race goes in the proper direction for the tortoise and hare. Make sure that the tortoise and hare do not go off the screen and that they do not cut across the grassy part of the track. They should stick to the rectangular dirt border along the edge of the screen.

You can now compile and run your program. The race should pop up in a separate window. If there are any errors, fix them and try again.

## Next Tutorial

In the next tutorial, we will discuss Assignment 2.5, which describes how work More Movement, Tones and L.E.D. in Quorum..