Instructions for monsterMash

(produced at 21:44 UTC on 2024-01-30)

This task is part of project02 which is due at 23:00 EST on 2024-02-06.

You have the option to work with a partner on this task if you wish. Working with a partner requires more work to coordinate schedules, but if you work together and make sure that you are both understanding the code you write, you will make progress faster and learn more.

You can download the starter code for this task using this link.

You can submit this task using this link.

Put all of your work for this task into the file monsterMash.py
(which is provided among the starter files)

This task is based on mix-and-match paper cut-out toys, where you can create your own monster or animal by combining different body parts (here's an extra-cool example where each paper piece has a crochet pattern).

Your goal in this task is to write functions that use turtle graphics to draw monster pieces: tails, bodies, and heads. These functions will be combined with each other to draw a mixed-up monster. The results might look something like this image, which combines pieces from orange, green, and yellow monsters:

An image of a fearsome monster with two tails, three different body
segments including wings, fins, and feet, and two
heads.

Notice how multiple tails, heads, and bodies are combined into a single monster, and that the sections roughly match up with each other, although it isn't perfect. The pieces of this monster come from our solution code, as well as from two files that we have provided: greenMonster.py and yellowMonster.py. You are encouraged to use these files as examples to work from when building your own monster pieces, but you must do more than simply copy the code in these files.

Subtask A: Monster Pieces

For this subtask, you will define three functions: monsterTail, monsterBody, and monsterHead. These functions must not take any parameters.

To ensure that the tails, bodies, and heads that your code draws are able to fit together with other monster pieces, each part has to obey certain rules:

In addition to these specific rules, each of your body part functions must do each of these things:

Finally, your monsterBody function must call a custom function that you define, which calls at least one of the drawing functions from the list above. It is completely up to you how to define and use this custom function, but we recommend using it to help you add things like wings or legs to your monster. Such a custom function can be especially useful for capturing and then easily repeating a complex series of drawing commands.

The diagram below shows how the different pieces of the monster are supposed to fit together:

A diagram showing that the turtle starts at the north-west corner of
the body facing east, the tail is drawn to the west (i.e., behind the
turtle) and leaves the turtle in the same position, the body is drawn to
the east and moves the turtle 100 units forward so that it is now on the
north-east corner of the monster, and the head is drawn from that
position and returns the turtle to that position. Note that the tail and
head don't have to connect directly to their starting/ending
positions.

These monster piece examples also show how the different pieces should work independently and fit together.

Subtask B: Monster Mash

Once you are done with your monster piece functions, your next task is to combine them with the pieces of the green and/or yellow monsters to draw a monster with different parts mashed together. Your monsterMash function must not take any parameters and must obey the following rules:

The first example image shown above meets and/or exceeds all of these criteria; this monsterMash example shows the results of code that calls monsterMash.

Extra Requirements

As usual, there are a few rules you must follow throughout:

  1. Each function you define must include a docstring.
  2. You should not waste fruit and you should not waste boxes. "Wasting fruit" means calling a fruitful function but ignoring the result. "Wasting boxes" means storing the result of a non-fruitful function (which will always be None) in a variable (a.k.a., box).
  3. You should not define any functions inside of other functions (this isn't a useful thing to do anyhow).

Testing

The test_monsterMash.py file included in the starter code will call your functions and print out some information about their start and end positions. You need to uncomment sections of this file to add tests as you complete each function.

Examples

Demonstration of the monster pieces

These examples illustrate how the different pieces are drawn individually, as well as how they fit together. Note that for the tail and head, the stamps created before and afterward are in the same place.

In []:
# Create a stamp of the turtle and print the starting position color("black") stamp() print("Start:", pos()) greenTail() # Create a second stamp and print the final position color("black") stamp() print("End:", pos())
Prints
Start: (0.00,0.00) A 18-pensize PaleGreen3 arc from (0, -18) facing West to (-38, -44) facing 250°. A 18-pensize PaleGreen3 arc from (-38, -44) facing 250° to (-101, -61) facing 140°. A 3-pensize PaleGreen3 140° line from (-101, -61) to (-110, -54). Start of filled shape. A 3-pensize PaleGreen3 triangle with side length 32 centered at (-110, -54) with a flat side facing 320°. Filled in shape using PaleGreen3. End: (-0.00,-0.00)
Image Start: (0.00,0.00)
A 18-pensize PaleGreen3 arc from (0, -18) facing West to (-38, -44) facing 250°.
A 18-pensize PaleGreen3 arc from (-38, -44) facing 250° to (-101, -61) facing 140°.
A 3-pensize PaleGreen3 140° line from (-101, -61) to (-110, -54).
Start of filled shape.
A 3-pensize PaleGreen3 triangle with side length 32 centered at (-110, -54) with a flat side facing 320°.
Filled in shape using PaleGreen3.
End: (-0.00,-0.00)
In []:
# move and turn before drawing teleport(-50, -50) lt(90) # Create a stamp of the turtle and print the starting position color("black") stamp() print("Start:", pos()) # draw a body greenBody() # Create a second stamp and print the final position color("black") stamp() print("End:", pos())
Prints
Start: (-50.00,-50.00) Start of filled shape. A PaleGreen4 100 by 50 rectangle centered at (-25, 0) with a vertical long axis. Filled in shape using PaleGreen4. A 7-pensize PaleGreen3 150° line from (-37, 25) to (-80, 50). Start of filled shape. A 7-pensize PaleGreen3 horizontal line from (-80, 50) to (-150, 50). A 7-pensize PaleGreen3 60° line from (-115, -11) to (-80, 50). Filled in shape using PaleGreen. Start of filled shape. A 7-pensize PaleGreen3 60° line from (-80, 50) to (-115, -11). A 7-pensize PaleGreen3 120° line from (-45, -11) to (-80, 50). Filled in shape using PaleGreen. End: (-50.00,50.00)
Image Start: (-50.00,-50.00)
Start of filled shape.
A PaleGreen4 100 by 50 rectangle centered at (-25, 0) with a vertical long axis.
Filled in shape using PaleGreen4.
A 7-pensize PaleGreen3 150° line from (-37, 25) to (-80, 50).
Start of filled shape.
A 7-pensize PaleGreen3 horizontal line from (-80, 50) to (-150, 50).
A 7-pensize PaleGreen3 60° line from (-115, -11) to (-80, 50).
Filled in shape using PaleGreen.
Start of filled shape.
A 7-pensize PaleGreen3 60° line from (-80, 50) to (-115, -11).
A 7-pensize PaleGreen3 120° line from (-45, -11) to (-80, 50).
Filled in shape using PaleGreen.
End: (-50.00,50.00)
In []:
# Create a stamp of the turtle and print the starting position color("black") stamp() print("Start:", pos()) greenHead() # Create a second stamp and print the final position color("black") stamp() print("End:", pos())
Prints
Start: (0.00,0.00) A 18-pensize PaleGreen3 30° line from (0, -18) to (43, 7). Start of filled shape. A 18-pensize PaleGreen3 hexagon with side length 20 centered at (43, 7) with a flat side facing North. Filled in shape using PaleGreen3. A PaleGreen4 dot with radius 5. A 3-pensize PaleGreen4 160° line from (62, -8) to (53, -5). End: (-0.00,-0.00)
Image Start: (0.00,0.00)
A 18-pensize PaleGreen3 30° line from (0, -18) to (43, 7).
Start of filled shape.
A 18-pensize PaleGreen3 hexagon with side length 20 centered at (43, 7) with a flat side facing North.
Filled in shape using PaleGreen3.
A PaleGreen4 dot with radius 5.
A 3-pensize PaleGreen4 160° line from (62, -8) to (53, -5).
End: (-0.00,-0.00)
In []:
# Back up first leap(-100) # Create a stamp of the turtle and print the starting position color("black") stamp() print("Start:", pos()) # Draw a green tail + body, and then a yellow body + head greenTail() greenBody() yellowBody() yellowHead() # Create a second stamp and print the final position color("black") stamp() print("End:", pos())
Prints
Start: (-100.00,0.00) A 18-pensize PaleGreen3 arc from (-100, -18) facing West to (-138, -44) facing 250°. A 18-pensize PaleGreen3 arc from (-138, -44) facing 250° to (-201, -61) facing 140°. A 3-pensize PaleGreen3 140° line from (-201, -61) to (-210, -54). Start of filled shape. A 3-pensize PaleGreen3 triangle with side length 32 centered at (-210, -54) with a flat side facing 320°. Filled in shape using PaleGreen3. Start of filled shape. A PaleGreen4 100 by 50 rectangle centered at (-50, -25) with a horizontal long axis. Filled in shape using PaleGreen4. A 7-pensize PaleGreen3 60° line from (-25, -13) to (0, 30). Start of filled shape. A 7-pensize PaleGreen3 vertical line from (0, 30) to (0, 100). A 7-pensize PaleGreen3 150° line from (-61, 65) to (0, 30). Filled in shape using PaleGreen. Start of filled shape. A 7-pensize PaleGreen3 150° line from (0, 30) to (-61, 65). A 7-pensize PaleGreen3 30° line from (-61, -5) to (0, 30). Filled in shape using PaleGreen. Start of filled shape. A 1-pensize yellow 30° line from (0, 0) to (30, 17). A 1-pensize yellow 150° line from (30, 17) to (70, -6). A 1-pensize yellow 30° line from (70, -6) to (100, 12). A 1-pensize yellow vertical line from (100, 12) to (100, -53). A 1-pensize yellow 30° line from (100, -53) to (70, -71). A 1-pensize yellow 150° line from (70, -71) to (30, -48). A 1-pensize yellow 30° line from (30, -48) to (0, -65). A 1-pensize yellow vertical line from (0, -65) to (0, 0). Filled in shape using yellow. Start of filled shape. A 1-pensize Gold2 10° line from (80, -30) to (55, -34). A 1-pensize Gold2 130° line from (55, -34) to (71, -53). A 1-pensize Gold2 70° line from (71, -53) to (80, -30). Filled in shape using Gold3. A 4-pensize Gold2 10° line from (80, -30) to (55, -34). A 4-pensize Gold2 30° line from (80, -30) to (58, -42). A 4-pensize Gold2 50° line from (80, -30) to (64, -49). A 4-pensize Gold2 70° line from (80, -30) to (71, -53). A 8-pensize Gold2 30° line from (100, -15) to (113, -8). A 8-pensize Gold2 150° line from (113, -8) to (130, -18). A 8-pensize Gold2 30° line from (130, -18) to (143, -10). Start of filled shape. A 1-pensize yellow vertical line from (143, -10) to (143, 10). A 1-pensize yellow 150° line from (143, 10) to (178, -10). A 1-pensize yellow 30° line from (178, -10) to (143, -30). A 1-pensize yellow vertical line from (143, -30) to (143, -10). Filled in shape using yellow. A Gold3 dot with radius 3. End: (100.00,-0.00)
Image Start: (-100.00,0.00)
A 18-pensize PaleGreen3 arc from (-100, -18) facing West to (-138, -44) facing 250°.
A 18-pensize PaleGreen3 arc from (-138, -44) facing 250° to (-201, -61) facing 140°.
A 3-pensize PaleGreen3 140° line from (-201, -61) to (-210, -54).
Start of filled shape.
A 3-pensize PaleGreen3 triangle with side length 32 centered at (-210, -54) with a flat side facing 320°.
Filled in shape using PaleGreen3.
Start of filled shape.
A PaleGreen4 100 by 50 rectangle centered at (-50, -25) with a horizontal long axis.
Filled in shape using PaleGreen4.
A 7-pensize PaleGreen3 60° line from (-25, -13) to (0, 30).
Start of filled shape.
A 7-pensize PaleGreen3 vertical line from (0, 30) to (0, 100).
A 7-pensize PaleGreen3 150° line from (-61, 65) to (0, 30).
Filled in shape using PaleGreen.
Start of filled shape.
A 7-pensize PaleGreen3 150° line from (0, 30) to (-61, 65).
A 7-pensize PaleGreen3 30° line from (-61, -5) to (0, 30).
Filled in shape using PaleGreen.
Start of filled shape.
A 1-pensize yellow 30° line from (0, 0) to (30, 17).
A 1-pensize yellow 150° line from (30, 17) to (70, -6).
A 1-pensize yellow 30° line from (70, -6) to (100, 12).
A 1-pensize yellow vertical line from (100, 12) to (100, -53).
A 1-pensize yellow 30° line from (100, -53) to (70, -71).
A 1-pensize yellow 150° line from (70, -71) to (30, -48).
A 1-pensize yellow 30° line from (30, -48) to (0, -65).
A 1-pensize yellow vertical line from (0, -65) to (0, 0).
Filled in shape using yellow.
Start of filled shape.
A 1-pensize Gold2 10° line from (80, -30) to (55, -34).
A 1-pensize Gold2 130° line from (55, -34) to (71, -53).
A 1-pensize Gold2 70° line from (71, -53) to (80, -30).
Filled in shape using Gold3.
A 4-pensize Gold2 10° line from (80, -30) to (55, -34).
A 4-pensize Gold2 30° line from (80, -30) to (58, -42).
A 4-pensize Gold2 50° line from (80, -30) to (64, -49).
A 4-pensize Gold2 70° line from (80, -30) to (71, -53).
A 8-pensize Gold2 30° line from (100, -15) to (113, -8).
A 8-pensize Gold2 150° line from (113, -8) to (130, -18).
A 8-pensize Gold2 30° line from (130, -18) to (143, -10).
Start of filled shape.
A 1-pensize yellow vertical line from (143, -10) to (143, 10).
A 1-pensize yellow 150° line from (143, 10) to (178, -10).
A 1-pensize yellow 30° line from (178, -10) to (143, -30).
A 1-pensize yellow vertical line from (143, -30) to (143, -10).
Filled in shape using yellow.
A Gold3 dot with radius 3.
End: (100.00,-0.00)

Demonstration of the monsterMash function

This example shows how the monsterMash function could work. You are free to choose a different mix of tails, bodies, and heads as long as you draw at least one tail, two bodies, and one head. This example creates one stamp at the start and one at the end, and prints out the position before and afterwards. Since this version draws 3 bodies, it moves 300 units forward (although it's not perfectly precise, it's within 1 unit of the correct destination, which is fine).

In []:
# Back up first leap(-150) # Create a stamp of the turtle and print the starting position color("black") stamp() print("Start:", pos()) monsterMash() # Create a second stamp and print the final position color("black") stamp() print("End:", pos())
Prints
Start: (-150.00,0.00) Start of filled shape. A 3-pensize DarkOrange2 arc from (-138, 37) facing 120° to (-160, 0) facing East. A 3-pensize DarkOrange2 horizontal line from (-160, 0) to (-150, 0). A 3-pensize DarkOrange2 vertical line from (-150, 0) to (-150, -50). A 3-pensize DarkOrange2 horizontal line from (-150, -50) to (-160, -50). A 3-pensize DarkOrange2 arc from (-160, -50) facing West to (-220, 10) facing North. A 3-pensize DarkOrange2 arc from (-220, 10) facing North to (-172, 58) facing East. A 3-pensize DarkOrange2 arc from (-172, 58) facing East to (-137, 38) facing 300°. Filled in shape using DarkOrange2. A 18-pensize PaleGreen3 arc from (-150, -18) facing West to (-188, -44) facing 250°. A 18-pensize PaleGreen3 arc from (-188, -44) facing 250° to (-251, -61) facing 140°. A 3-pensize PaleGreen3 140° line from (-251, -61) to (-260, -54). Start of filled shape. A 3-pensize PaleGreen3 triangle with side length 32 centered at (-260, -54) with a flat side facing 320°. Filled in shape using PaleGreen3. Start of filled shape. A 1-pensize yellow 30° line from (-150, 0) to (-120, 17). A 1-pensize yellow 150° line from (-120, 17) to (-80, -6). A 1-pensize yellow 30° line from (-80, -6) to (-50, 12). A 1-pensize yellow vertical line from (-50, 12) to (-50, -53). A 1-pensize yellow 30° line from (-50, -53) to (-80, -71). A 1-pensize yellow 150° line from (-80, -71) to (-120, -48). A 1-pensize yellow 30° line from (-120, -48) to (-150, -65). A 1-pensize yellow vertical line from (-150, -65) to (-150, 0). Filled in shape using yellow. Start of filled shape. A 1-pensize Gold2 10° line from (-70, -30) to (-95, -34). A 1-pensize Gold2 130° line from (-95, -34) to (-79, -53). A 1-pensize Gold2 70° line from (-79, -53) to (-70, -30). Filled in shape using Gold3. A 4-pensize Gold2 10° line from (-70, -30) to (-95, -34). A 4-pensize Gold2 30° line from (-70, -30) to (-92, -42). A 4-pensize Gold2 50° line from (-70, -30) to (-86, -49). A 4-pensize Gold2 70° line from (-70, -30) to (-79, -53). Start of filled shape. A 3-pensize DarkOrange4 circle centered at (0, -25) with radius 55.9 Filled in shape using DarkOrange4. A 16-pensize DarkOrange2 80° line from (-25, -50) to (-32, -89). A 16-pensize DarkOrange2 60° line from (-32, -89) to (-42, -107). Start of filled shape. A 16-pensize DarkOrange2 triangle with side length 12 centered at (-42, -107) with a flat side facing 240°. Filled in shape using DarkOrange4. A 16-pensize DarkOrange2 120° line from (25, -50) to (45, -85). A 16-pensize DarkOrange2 100° line from (45, -85) to (48, -104). Start of filled shape. A 16-pensize DarkOrange2 triangle with side length 12 centered at (48, -104) with a flat side facing 280°. Filled in shape using DarkOrange4. Start of filled shape. A PaleGreen4 100 by 50 rectangle centered at (100, -25) with a horizontal long axis. Filled in shape using PaleGreen4. A 7-pensize PaleGreen3 60° line from (125, -13) to (150, 30). Start of filled shape. A 7-pensize PaleGreen3 vertical line from (150, 30) to (150, 100). A 7-pensize PaleGreen3 150° line from (89, 65) to (150, 30). Filled in shape using PaleGreen. Start of filled shape. A 7-pensize PaleGreen3 150° line from (150, 30) to (89, 65). A 7-pensize PaleGreen3 30° line from (89, -5) to (150, 30). Filled in shape using PaleGreen. Start of filled shape. A 3-pensize darkOrange2 30° line from (150, 0) to (193, 25). A 3-pensize darkOrange2 100° line from (193, 25) to (197, 5). A 3-pensize darkOrange2 50° line from (197, 5) to (150, -50). A 3-pensize darkOrange2 vertical line from (150, -50) to (150, 0). Filled in shape using darkOrange2. Start of filled shape. A 3-pensize darkOrange2 ellipse centered at (199, 13) with a 36-unit horizontal major axis and a 30-unit minor axis Filled in shape using darkOrange2. A OrangeRed4 dot with radius 6. A 3-pensize OrangeRed4 arc from (228, -6) facing 170° to (209, 3) facing 140°. A 3-pensize OrangeRed4 arc from (209, 3) facing 320° to (228, -6) facing 350°. A 8-pensize Gold2 20° line from (148, -30) to (162, -24). A 8-pensize Gold2 140° line from (162, -24) to (177, -37). A 8-pensize Gold2 20° line from (177, -37) to (191, -32). Start of filled shape. A 1-pensize yellow 80° line from (191, -32) to (195, -13). A 1-pensize yellow 140° line from (195, -13) to (226, -38). A 1-pensize yellow 20° line from (226, -38) to (188, -52). A 1-pensize yellow 80° line from (188, -52) to (191, -32). Filled in shape using yellow. A Gold3 dot with radius 3. End: (150.49,0.15)
Image Start: (-150.00,0.00)
Start of filled shape.
A 3-pensize DarkOrange2 arc from (-138, 37) facing 120° to (-160, 0) facing East.
A 3-pensize DarkOrange2 horizontal line from (-160, 0) to (-150, 0).
A 3-pensize DarkOrange2 vertical line from (-150, 0) to (-150, -50).
A 3-pensize DarkOrange2 horizontal line from (-150, -50) to (-160, -50).
A 3-pensize DarkOrange2 arc from (-160, -50) facing West to (-220, 10) facing North.
A 3-pensize DarkOrange2 arc from (-220, 10) facing North to (-172, 58) facing East.
A 3-pensize DarkOrange2 arc from (-172, 58) facing East to (-137, 38) facing 300°.
Filled in shape using DarkOrange2.
A 18-pensize PaleGreen3 arc from (-150, -18) facing West to (-188, -44) facing 250°.
A 18-pensize PaleGreen3 arc from (-188, -44) facing 250° to (-251, -61) facing 140°.
A 3-pensize PaleGreen3 140° line from (-251, -61) to (-260, -54).
Start of filled shape.
A 3-pensize PaleGreen3 triangle with side length 32 centered at (-260, -54) with a flat side facing 320°.
Filled in shape using PaleGreen3.
Start of filled shape.
A 1-pensize yellow 30° line from (-150, 0) to (-120, 17).
A 1-pensize yellow 150° line from (-120, 17) to (-80, -6).
A 1-pensize yellow 30° line from (-80, -6) to (-50, 12).
A 1-pensize yellow vertical line from (-50, 12) to (-50, -53).
A 1-pensize yellow 30° line from (-50, -53) to (-80, -71).
A 1-pensize yellow 150° line from (-80, -71) to (-120, -48).
A 1-pensize yellow 30° line from (-120, -48) to (-150, -65).
A 1-pensize yellow vertical line from (-150, -65) to (-150, 0).
Filled in shape using yellow.
Start of filled shape.
A 1-pensize Gold2 10° line from (-70, -30) to (-95, -34).
A 1-pensize Gold2 130° line from (-95, -34) to (-79, -53).
A 1-pensize Gold2 70° line from (-79, -53) to (-70, -30).
Filled in shape using Gold3.
A 4-pensize Gold2 10° line from (-70, -30) to (-95, -34).
A 4-pensize Gold2 30° line from (-70, -30) to (-92, -42).
A 4-pensize Gold2 50° line from (-70, -30) to (-86, -49).
A 4-pensize Gold2 70° line from (-70, -30) to (-79, -53).
Start of filled shape.
A 3-pensize DarkOrange4 circle centered at (0, -25) with radius 55.9
Filled in shape using DarkOrange4.
A 16-pensize DarkOrange2 80° line from (-25, -50) to (-32, -89).
A 16-pensize DarkOrange2 60° line from (-32, -89) to (-42, -107).
Start of filled shape.
A 16-pensize DarkOrange2 triangle with side length 12 centered at (-42, -107) with a flat side facing 240°.
Filled in shape using DarkOrange4.
A 16-pensize DarkOrange2 120° line from (25, -50) to (45, -85).
A 16-pensize DarkOrange2 100° line from (45, -85) to (48, -104).
Start of filled shape.
A 16-pensize DarkOrange2 triangle with side length 12 centered at (48, -104) with a flat side facing 280°.
Filled in shape using DarkOrange4.
Start of filled shape.
A PaleGreen4 100 by 50 rectangle centered at (100, -25) with a horizontal long axis.
Filled in shape using PaleGreen4.
A 7-pensize PaleGreen3 60° line from (125, -13) to (150, 30).
Start of filled shape.
A 7-pensize PaleGreen3 vertical line from (150, 30) to (150, 100).
A 7-pensize PaleGreen3 150° line from (89, 65) to (150, 30).
Filled in shape using PaleGreen.
Start of filled shape.
A 7-pensize PaleGreen3 150° line from (150, 30) to (89, 65).
A 7-pensize PaleGreen3 30° line from (89, -5) to (150, 30).
Filled in shape using PaleGreen.
Start of filled shape.
A 3-pensize darkOrange2 30° line from (150, 0) to (193, 25).
A 3-pensize darkOrange2 100° line from (193, 25) to (197, 5).
A 3-pensize darkOrange2 50° line from (197, 5) to (150, -50).
A 3-pensize darkOrange2 vertical line from (150, -50) to (150, 0).
Filled in shape using darkOrange2.
Start of filled shape.
A 3-pensize darkOrange2 ellipse centered at (199, 13) with a 36-unit horizontal major axis and a 30-unit minor axis
Filled in shape using darkOrange2.
A OrangeRed4 dot with radius 6.
A 3-pensize OrangeRed4 arc from (228, -6) facing 170° to (209, 3) facing 140°.
A 3-pensize OrangeRed4 arc from (209, 3) facing 320° to (228, -6) facing 350°.
A 8-pensize Gold2 20° line from (148, -30) to (162, -24).
A 8-pensize Gold2 140° line from (162, -24) to (177, -37).
A 8-pensize Gold2 20° line from (177, -37) to (191, -32).
Start of filled shape.
A 1-pensize yellow 80° line from (191, -32) to (195, -13).
A 1-pensize yellow 140° line from (195, -13) to (226, -38).
A 1-pensize yellow 20° line from (226, -38) to (188, -52).
A 1-pensize yellow 80° line from (188, -52) to (191, -32).
Filled in shape using yellow.
A Gold3 dot with radius 3.
End: (150.49,0.15)

Rubric

Group goals:
 
unknown All functions are documented
Each function you define must include a non-empty documentation string as the very first thing in the function.
 
unknown Do not define functions inside of other functions
None of your function definitions may be placed inside of other function definitions.
 
unknown Do not ignore the results of any fruitful function calls
According to the "Don't waste fruit" principle, every place you call a fruitful function (built-in or custom) you must store the result in a variable, or that function call must be part of a larger expression that uses its return value.
 
unknown Do not create any variables that you never make use of
According to the "Don't waste boxes" principle, every time you create a variable (using = or by defining a parameter for a function) you must also later use that variable as part of another expression. If you need to create a variable that you won't use, it must have the name _, but you should only do this if absolutely necessary.
 
unknown monsterTail net turtle movement
We will check the position and orientation of the turtle before and after monsterTail is called, as well as whether the pen is down afterwards. Both values should be the same before and afterwards, and the pen must also be down at the end.
 
unknown monsterTail net turtle movement (test 1/2)
We will check the position and orientation of the turtle before and after monsterTail is called, as well as whether the pen is down afterwards. First, however, we'll move the turtle a bit to test whether your function correctly moves relative to its starting location. Both values should be the same before and afterwards, and the pen must also be down at the end.
 
unknown monsterTail net turtle movement (test 2/2)
We will check the position and orientation of the turtle before and after monsterTail is called, as well as whether the pen is down afterwards. First, however, we'll move the turtle a bit to test whether your function correctly moves relative to its starting location. Both values should be the same before and afterwards, and the pen must also be down at the end.
 
unknown monsterBody net turtle movement
We will check the position and orientation of the turtle before and after monsterBody is called, as well as whether the pen is down afterwards. The final angle should match the starting angle, and the final position should be 100 units forward from the initial position. The pen must also be down at the end.
 
unknown monsterBody net turtle movement (test 1/2)
We will check the position and orientation of the turtle before and after monsterBody is called, as well as whether the pen is down afterwards. First, however, we'll move the turtle a bit to test whether your function correctly moves relative to its starting location. The final angle should match the starting angle, and the final position should be 100 units forward from the initial position. The pen must also be down at the end.
 
unknown monsterBody net turtle movement (test 2/2)
We will check the position and orientation of the turtle before and after monsterBody is called, as well as whether the pen is down afterwards. First, however, we'll move the turtle a bit to test whether your function correctly moves relative to its starting location. The final angle should match the starting angle, and the final position should be 100 units forward from the initial position. The pen must also be down at the end.
 
unknown monsterHead net turtle movement
We will check the position and orientation of the turtle before and after monsterHead is called, as well as whether the pen is down afterwards. Both values should be the same before and afterwards, and the pen must also be down at the end.
 
unknown monsterHead net turtle movement (test 1/2)
We will check the position and orientation of the turtle before and after monsterHead is called, as well as whether the pen is down afterwards. First, however, we'll move the turtle a bit to test whether your function correctly moves relative to its starting location. Both values should be the same before and afterwards, and the pen must also be down at the end.
 
unknown monsterHead net turtle movement (test 2/2)
We will check the position and orientation of the turtle before and after monsterHead is called, as well as whether the pen is down afterwards. First, however, we'll move the turtle a bit to test whether your function correctly moves relative to its starting location. Both values should be the same before and afterwards, and the pen must also be down at the end.
 
unknown Define monsterTail with 0 parameters
Use def to define monsterTail with 0 parameters
 
unknown Call pensize
Within the definition of monsterTail with 0 parameters, call pensize or penSize in at least one place.
 
unknown Call pencolor
Within the definition of monsterTail with 0 parameters, call pencolor, color, fillcolor, penColor, or fillColor in at least one place.
 
unknown Do not call setpos
Within the definition of monsterTail with 0 parameters, do not call setpos, setposition, goto, setx, sety, teleport, seth, setheading, realign, reset, setPosition, setX, setY, or setHeading.
 
unknown Use at least two different turtle or turtleBeads drawing functions.
Within the definition of monsterTail with 0 parameters, use at least two different drawing functions from the following list: fd, forward, bk, back, backward, circle, write, begin_fill, end_fill, drawSquare, drawRectangle, drawCircle, drawDot, drawEllipse, drawPolygon, drawText, beginFill, endFill
 
unknown Define monsterBody with 0 parameters
Use def to define monsterBody with 0 parameters
 
unknown Call at least one custom function.
Within the definition of monsterBody with 0 parameters, your code must call a custom function, and that function must use a drawing command.
 
unknown Use at least two different turtle or turtleBeads drawing functions.
Within the call to a custom function within the definition of monsterBody with 0 parameters, use at least two different drawing functions from the following list: fd, forward, bk, back, backward, circle, write, begin_fill, end_fill, drawSquare, drawRectangle, drawCircle, drawDot, drawEllipse, drawPolygon, drawText, beginFill, endFill
 
unknown Define monsterBody with 0 parameters
Use def to define monsterBody with 0 parameters
 
unknown Call pensize
Within the definition of monsterBody with 0 parameters, call pensize or penSize in at least one place.
 
unknown Call pencolor
Within the definition of monsterBody with 0 parameters, call pencolor, color, fillcolor, penColor, or fillColor in at least one place.
 
unknown Do not call setpos
Within the definition of monsterBody with 0 parameters, do not call setpos, setposition, goto, setx, sety, teleport, seth, setheading, realign, reset, setPosition, setX, setY, or setHeading.
 
unknown Use at least two different turtle or turtleBeads drawing functions.
Within the definition of monsterBody with 0 parameters, use at least two different drawing functions from the following list: fd, forward, bk, back, backward, circle, write, begin_fill, end_fill, drawSquare, drawRectangle, drawCircle, drawDot, drawEllipse, drawPolygon, drawText, beginFill, endFill
 
unknown Define monsterHead with 0 parameters
Use def to define monsterHead with 0 parameters
 
unknown Call pensize
Within the definition of monsterHead with 0 parameters, call pensize or penSize in at least one place.
 
unknown Call pencolor
Within the definition of monsterHead with 0 parameters, call pencolor, color, fillcolor, penColor, or fillColor in at least one place.
 
unknown Do not call setpos
Within the definition of monsterHead with 0 parameters, do not call setpos, setposition, goto, setx, sety, teleport, seth, setheading, realign, reset, setPosition, setX, setY, or setHeading.
 
unknown Use at least two different turtle or turtleBeads drawing functions.
Within the definition of monsterHead with 0 parameters, use at least two different drawing functions from the following list: fd, forward, bk, back, backward, circle, write, begin_fill, end_fill, drawSquare, drawRectangle, drawCircle, drawDot, drawEllipse, drawPolygon, drawText, beginFill, endFill
 
unknown Define monsterMash
Use def to define monsterMash
 
unknown Do not call pensize
Within the definition of monsterMash, do not call pensize.
 
unknown Do not call pencolor
Within the definition of monsterMash, do not call pencolor, color, or fillcolor.
 
unknown Use at least one monster tail function.
Within the definition of monsterMash, use at least one of monsterTail, greenTail, or yellowTail.
 
unknown Use at least two different monster body functions.
Within the definition of monsterMash, use at least two of monsterBody, greenBody, or yellowBody.
 
unknown Use at least one monster head function.
Within the definition of monsterMash, use at least one of monsterHead, greenHead, or yellowHead.