""" Demonstrates using OBJECTS via Turtle Graphics. Concepts include: -- CONSTRUCT an INSTANCE of a CLASS (we call such instances OBJECTS). -- Make an object ** DO ** something by using a METHOD. -- Reference an object's ** DATA ** by using an INSTANCE VARIABLE. Also: -- ASSIGNING a VALUE to a NAME (aka VARIABLE). Authors: David Mutchler, Vibha Alangar, Dave Fisher, Matt Boutell, Mark Hays, Mohammed Noureddine, Sana Ebrahimi, Sriram Mohan, their colleagues and PUT_YOUR_NAME_HERE. """ ############################################################################### # TODO: 1. # Yes, that means for YOU to DO things per the following instructions: # _ # On Line 14 above, replace PUT_YOUR_NAME_HERE with your OWN name. # _ # BTW, the top block of text above forms a multiple-line comment that is # called a DOC-STRING. It documents what this module does, in a way that # exterior programs can make sense of. It has no other effect on this program. ############################################################################### import rosegraphics as rg ############################################################################### # TODO: 2. # Allow this module to use the rosegraphics.py module by marking the # src # folder in this project as a "Sources Root", as follows: # _ # In the Project window (to the left), right click on the src folder, # then select Mark Directory As ~ Sources Root. # _ # You will see that rosegraphics in the import statement above (line 27) # is no longer marked as an error. You will do this in all projects # that use rosegraphics, so get used to it. :) # _ # Once rosegraphics in the import statement is no longer marked as error, # change this _TODO_ to DONE and ** continue to the next _TODO_ (below). ** ############################################################################### ############################################################################### # TODO: 3. # Run this module. A window will pop up and Turtles will move around. # After the Turtles stop moving, # ** click anywhere in the window to close the window **. # _ # Then look at the code below. Ask for help when you have questions about # what the code is doing, or if you are just curious about any of the code. # Be sure that you understand the notations for: # _ # -- CONSTRUCTING an instance of a CLASS, e.g. # rg.SimpleTurtle() # _ # -- ASSIGNING the resulting OBJECT (instance of a class) a NAME, e.g. # natasha = rg.SimpleTurtle() # _ # -- Applying a METHOD to an object to make the object DO something, e.g. # natasha.forward(100) # _ # -- Accessing an INSTANCE VARIABLE of an object, e.g. # natasha.speed = 10 # boris.speed = natasha.speed # _ # After you are confident that you understand all the code below, # change this _TODO_ to DONE and ** continue to the next _TODO_ (below). ** ############################################################################### # ----------------------------------------------------------------------------- # The next few lines show how to: # - CONSTRUCT (make and initialize) a TurtleWindow object for animation. # The definition of a TurtleWindow is in # the rg (shorthand for rosegraphics) module. # ----------------------------------------------------------------------------- window = rg.TurtleWindow() window.delay(20) # Bigger numbers mean slower animation. # ----------------------------------------------------------------------------- # The next few lines show how to: # - CONSTRUCT (make) a SimpleTurtle object and ASSIGN a NAME to the object. # ----------------------------------------------------------------------------- boris = rg.SimpleTurtle() # ----------------------------------------------------------------------------- # The next few lines show how to: # - Ask the SimpleTurtle object to do things by applying METHODs to it. # The numbers in the parentheses are called ARGUMENTS. # ----------------------------------------------------------------------------- boris.forward(100) boris.left(90) boris.forward(200) # ----------------------------------------------------------------------------- # The next few lines show how to: # - Construct a second SimpleTurtle # (using an optional argument that sets the shape displayed), # set its pen and speed INSTANCE VARIABLES, and ask it to do things. # _ # TIP: to see what other strings you can use for the shape, hover over # the word SimpleTurtle in the first line of code below. Doing so will # pop up some quick documentation about whatever you hover upon -- try it! # ----------------------------------------------------------------------------- natasha = rg.SimpleTurtle("turtle") natasha.pen = rg.Pen("red", 30) # Second argument is the thickness of the Pen natasha.speed = 5 # Bigger means faster, max is usually about 10 natasha.backward(50) natasha.right(90) natasha.forward(125) natasha.speed = 1 # Now slower natasha.go_to(rg.Point(-100, 200)) ############################################################################### # TODO: 4. # Your instructor will explain the so-called "dot-trick". # Try it out yourself by typing # natasha. # somewhere below and then pausing after typing the dot. # You will see options pop up for what natasha can do (methods, marked # with an M on the pop-up) and what natasha knows (instance variables, # aka fields, marked with a F on the pop-up). # _ # Try out one of the methods! (Any is fine. Experiment!) # _ # ** Be quick to ask for help as needed, as the so-called ** # ** "dot-trick" is more easily shown than explained. ** # _ # As always, test by running the module. ############################################################################### ############################################################################### # TODO: 5. # Add a few more lines of your own code to make one of the existing # SimpleTurtles move some more and/or have different characteristics. # _ # ** Nothing fancy is required. ** # ** A SUBSEQUENT exercise will let you show your creativity. ** # _ # As always, test by running the module. ############################################################################### ############################################################################### # TODO: 6. # The above code CONSTRUCTS two SimpleTurtle objects # and gives those objects NAMES: # boris natasha # _ # Add code of your own that constructs another SimpleTurtle object, # naming it whatever you want. Names cannot have spaces or special # characters, but they can have digits and underscores, e.g. # this_1_has # _ # STYLE RULE: Your names should always begin with a LOWER_CASE letter. # So mary is OK but Mary is NOT OK. # Choose short-but-meaningful names. Separate "words" in the name by # underscores, like this: my_turtle # _ # Then add more code that: # -- Constructs a Pen object, # -- Assigns your SimpleTurtle's pen to the constructed Pen object, and # -- Makes your SimpleTurtle move around a bit. # _ # ** Nothing fancy is required. ** # ** A SUBSEQUENT exercise will let you show your creativity. ** # _ # As always, test by running the module. ############################################################################### ############################################################################### # TODO: 7. # Ensure that no blue bars on the scrollbar-thing to the right remain. # Run one more time to be sure that all is still OK. # _ # Then COMMIT-and-PUSH your work as before: # 1. Select VCS from the menu bar (above). # 2. Choose Commit from the pull-down menu that appears. # 3. In the Commit Changes window that pops up, # press the Commit and Push button. # (Note: If you see only a Commit button: # - HOVER over the Commit button # (in the lower-right corner of the window) # - CLICK on Commit and Push.) # (Note: If it asks you to type a message for the Commit, do so, # using Done or something like that for the message.) # _ # You can COMMIT-and-PUSH as often as you like. # DO IT FREQUENTLY; AT LEAST once per module. ############################################################################### # ----------------------------------------------------------------------------- # The next line keeps the window open until the user clicks in the window. # Throughout this exercise, this close_on_mouse_click line # should be the LAST line in the file. DO NOT ADD CODE BELOW THIS LINE! # ----------------------------------------------------------------------------- window.close_on_mouse_click()