CS 151: Project #6

Project 6: Animated Scene

Main course page

The purpose of this project is to give you experience with both top-down design and efficient coding practices that take advantage of things wil similar structures.


The result of this assignment will be similar to project 3. You'll have a couple of scenes that are collections of complex objects. The complex objects will all be collections of Zelle graphics primitives and have the same organization as the steam plant you created in lab. Each complex object will have a function that initializes it and a function that animates it. Some complex objects will not do anything in their animation function.

The difference from project 3 is that your final scenes in this project can be animated, with objects moving or changing colors.

  1. Think about a scene you want to create. Design the scene on paper as a collection of complex objects like buildings, streets, stoplights, and cars. Keep it simple. Come up with at least 2 new complex objects that you want to create for your scene.

    For each of the complex objects, create a new file that contains an init and animate function for that object. Name them as we did in lab with the steam plant. If your object is a car, name the file car.py and the functions init and animate.

    The init function should always take an x, y, and scale, which you should use just as in project 3 so that the object can be placed anywhere at any scale. The init function should return a list of the primitive objects that make up the complex object, just like we did with the steam plant.

    The animate function does not have to do anything (just put a return statement in it). But you ned to animate at least one of your new complex objects, even if it means just changing colors. The animate function should take in three parameters: the list of objects in the shape, the frame number, and the window, just like our steamPlantAnimate function.

    Each complex object file should have a main function for testing purposes that creates a window, creates multiple versions of the complex object and then waits for a mouse click to quit, just like our steam plant test function. If your animate function does something interesting, test that out as well. Include a small picture for each complex object in your writeup.

    Have step 1 written and tested before labs on the 16th and 17th

  2. Make a file scene.py that contains the functions init, draw, and animate. The init function should be structured like the other complex objects with x, y and scale as parameters. A scene should contain only complex objects, however, no Zelle graphics primitives.

    When you create a complex object, you need to add it to the scenelist of objects as a duple, as given below using the steam plant as an example.

      scenelist = []
      obj = steam.steamPlantInit( x, y, scale )
      scenelist.append( ( 'steamPlant', obj ) )
      obj = steam.steamPlantInit( x + 100*scale, y, scale )
      scenelist.append( ( 'steamPlant', obj ) )

    Note that the duple contains the name of the complex object as the first value and the object list as the second value.

    The scene.py draw function should take in a scenelist and a window, loop over the scenelist of duples and call aggregate.draw on the second item in each duple. Use print statements if you aren't clear on what the various variables contain.

    The scene.py animate function should take in a scenelist, loop over the scenelist of duples and use the string in the first position of the duple to figure out which animate function to call.

    Include a picture of your scene in your writeup.

  3. Create a new python file scene2.py. Write a main program that creates at least two copies of your scene from the previous step at different scales and locations. The program should then enter a loop and animate all of the scenes.

    Include a picture of your scene collection in your writeup.

  4. Do something creative within this framework. Include a picture in your writeup.



Make a new wiki page for your assignment. Give the page a useful title using English words (cs151s11proj6 is not a useful title). Put the label cs151s11proj6 on the page. Each of you needs to make your own writeup.

In addition to making the wiki page writeup, put the python files you wrote on the Academics server in your handin directory.

Colby Wiki

In general, your writeup should follow the outline below.