(Also available in WeScheme)
Students discover that inequalities have an important application in video games: keeping game characters on the screen! Students apply their understanding to edit code so that it will keep Sam the Butterfly safely in view.
Lesson Goals 
Students will be able to:

StudentFacing Lesson Goals 

Materials 

Preparation 

 coordinate

a number or set of numbers describing an object’s location
 expression

a computation written in the rules of some language (such as arithmetic, code, or a Circle of Evaluation)
🔗Introducing Sam 15 minutes
Overview
Students are introduced to Sam the Butterfly, a simple activity in which they must write 1step inequalities to detect when Sam has gone too far in one dimension.
Launch
Have students open the
Sam The Butterfly starter file (Pyret) and click "Save A Copy."
Have students turn to the Introducing Sam, click Run and use the arrow keys to investigate the program with their partner.

What is something you noticed about this program? As Sam moves, the coordinates are displayed at the top of the screen; the coordinates are all in the 1st quadrant; etc.

What do you see when Sam is at (0,0)? Why is that? You only see part of Sam’s wing. Sam’s position is based on the center of Sam’s image.

How far can Sam go to the left and stay on the screen? Up to, but not beyond, an x of 40.

How could we write this as an expression? Appropriate responses are x > 50, or (for students who notice that Sam only moves in increments of 10) x ≥ 40.
Every time Sam moves, we want to check and see if Sam is safe.
To further support students, consider asking what three functions are defined in their starter files. Then, ask students what each function should do, when working properly.

What should our leftchecking function do? Check to see if x is greater than 50

What should our rightchecking function do? Check to see if x is less than 690

What should
onscreen?
do? Answers may vary. Let students drive the discussion, and don’t give away the answer!
Investigate
Direct students to complete Left and Right with their partners. Once finished, they can fix the corresponding functions in their Sam the Butterfly file, and test them out.
Students will notice that fixing issafeleft
keeps Sam from disappearing off the left side, but fixing issaferight
doesn’t seem to keep Sam from disappearing off the right side! When students encounter this, encourage them to look through the code to try and figure out why.
"False" doesn’t mean "Wrong"! A lot of students  especially confident ones  may struggle to come up with an example where
This misconception comes from confusing a statement that is "false" with a program that is "wrong". In the second example, above, the result of Pyret includes some functionality that makes this more explicit, and can help resolve the misconception:
By writing the answer first ( 
Emphasize to students that they cannot trust the behavior of a complex system! After looking closely at examples and observing that they all pass, students should suspect that the bug is elsewhere.
Synthesize

Does
issafeleft
work correctly? How do you know? 
Does
issaferight
work correctly? How do you know?
🔗Protecting Sam on Both Sides 30 minutes
Overview
Students solve a word problem involving compound inequalities, using and
to compose the simpler Boundarychecking functions from the previous lesson.
Launch
Recruit three student volunteers to roleplay the functions issafeleft
, issaferight
, and isonscreen
. Give them 1 minute to read the contract and code, as written in the program.
Ask the volunteers what their name, Domain and Range are. Explain that you, the facilitator, will be providing a coordinate input. The functions issafeleft
and issaferight
will respond with either "true" or "false".
The function isonscreen
, however, will call the safeleft
function! So the student roleplaying isonscreen
should turn to safeleft
and give the input to them.
For example:

Facilitator: "isonscreen 70"

isonscreen (turns to issafeleft): "issafeleft 70"

issafeleft: "true"

isonscreen (turns back to facilitator): "true"

Facilitator: "isonscreen 100"

isonscreen (turns to issafeleft): "issafeleft 100"

issafeleft: "false"

isonscreen (turns back to facilitator): "false"

Facilitator: "isonscreen 900"

isonscreen (turns to issafeleft): "issafeleft 900"

issafeleft: "true"

isonscreen (turns back to facilitator): "true"
Hopefully your students will notice that issaferight
did not participate in this roleplay scenario at all!

What is the problem with
isonscreen
? It’s only talking toissafeleft
, it’s not checking withissaferight

How can
isonscreen
check with both? It needs to talk toissafeleft
ANDissaferight
.
Investigate
Have students complete Word Problem: isonscreen. When this function is entered into the editor, students should now see that Sam is protected on both sides of the screen.
Extension Option
What if we wanted to keep Sam safe on the top and bottom edges of the screen as well? What additional functions would we need? What functions would need to change? We recommend that students tackling this challenge define a new function 
Synthesize
Bring back the three new student volunteers to roleplay those functions, with the onscreen function now working properly. Make sure students provide correct answers, testing both true
and false
conditions using coordinates where Sam is onscreen and offscreen.

How did it feel when you saw Sam hit both walls?

Are there multiple solutions for
isonscreen
? 
Is this TopDown or BottomUp design?
🔗Boundary Detection in the Game 10 minutes
Overview
Students identify common patterns between twodimensional Boundary detection and detecting whether a player is onscreen. They apply the same problemsolving and narrow mathematical concept from the previous lesson to a more general problem.
Launch
Have students open their inprogress game file and press Run. Invite them to analyze the movement of the danger and the target

How are the
TARGET
andDANGER
behaving right now? They move across the screen. 
What do we want to change? We want them to come back after they leave one side of the screen.

What happens to an image’s xcoordinate when it moves off the screen? An image is entirely offscreen if its xcoordinate is less than 50 and greater than 690.

How can we make the computer understand when an image has moved off the screen? We can teach the computer to compare the image’s coordinates to a boundary on the number line, just like we did with Sam the Butterfly!
Investigate
Have students apply what they learned from Sam the Butterly to fix the issafeleft
, issaferight
, and isonscreen
functions in their own code.
Since the screen dimensions for their game are 640x480, just like Sam, they can use their code from Sam as a starting point.
Common Misconceptions

Students will need to test their code with their images to see if the boundaries are correct for them. Students with large images may need to use slightly wider boundaries, or vice versa for small images. In some cases, students may have to go back and rescale their images if they are too large or too small for the game.

Students may be surprised that the same code that "traps Sam" also "resets the
DANGER
andTARGET
". It’s critical to explain that these functions do neither of those things! All they do is test if a coordinate is within a certain range on the xaxis. There is other code (hidden in the teachpack) that determines what to do if the coordinate is offscreen. The ability to reuse function is one of the most powerful features of mathematics  and programming!
Synthesize

The same code that "trapped" Sam also "resets" the
DANGER
and theTARGET
. What is actually going on?
🔗Additional Exercises
These materials were developed partly through support of the National Science Foundation, (awards 1042210, 1535276, 1648684, and 1738598). Bootstrap by the Bootstrap Community is licensed under a Creative Commons 4.0 Unported License. This license does not grant permission to run training or professional development. Offering training or professional development with materials substantially derived from Bootstrap must be approved in writing by a Bootstrap Director. Permissions beyond the scope of this license, such as to run training, may be available by contacting contact@BootstrapWorld.org.