CMSC 110 (Introduction to Computing)
Spring 2011
Assignment#4
Due before start of class on Tuesday, March 1, 2011
Task: Design an interactive art composition based on
classes. A new object should appear wherever the user clicks on
the sketch, and each object should be animated with time. For
example, clicking could generate a snowflake that falls, or a set of
concentric circles that expand outward in a rainbow and then collapse
inward. The objects can layer on top of each other in any
order. In this project, we will be limiting the overall number of
objects that can appear in the sketch.
To get you started, write a class for your object using the
following template:
/** Your header
comments go here to describe the class */
class MyObjectNameGoesHere {
//
the object's x-coordinate
int x;
//
the object's y-coordinate
int y;
//
a parameter for tracking the time of the object, which can be used for
animating it
int t = 0;
/** Constructor
* @param xCoordinate the initial x coordinate
of the object
* @param yCoordinate the initial y coordinate
of the object
*/
MyObjectNameGoesHere (int xCoordinate, int
yCoordinate) {
...
}
/** Draw the object.
* This function should be called
every iteration of draw() to display the object.
*/
void display() {
// drawing code for your object, with an animation
based on t
...
}
/** Advance the
object's animation.
* This function should be called
every iteration of draw() to advance it's animation.
*/
void step() {
//
increment the time counter
t++;
...
}
}
You do not need to follow this template for your class exactly, it
is merely a suggestion. You must also create the controlling code
that creates new objects based on where the user clicks and drawing
code that displays all of the animated objects. Again, here is a
template to get you started:
// The maximum number
of objects that can be displayed at once
int MAX_NUM_OBJECTS = 20;
// An array of all
the created objects
MyObjectNameGoesHere[] myObjects = new
MyObjectNameGoesHere[MAX_NUM_OBJECTS];
// An index into the
myObjects array to show where to save the next new object. Note
that
// this index cannot ever be allowed to exceed MAX_NUM_OBJECTS; instead
it should
// cycle from 0 to MAX_NUM_OBJECTS and then be reset to begin again at
0.
int idxMyObjects = 0;
/** Processing's
setup function */
void setup() {
size(500,500);
...
}
/** The main drawing
loop for Processing */
void draw() {
background(255); // NOTE: you are welcome to change this
background
//
use a for loop to display all of the objects and advance their
animations
// NOTE: When writing this loop, you will need
to test each element of the
myObjects array to see if it is a object or is empty.
//
Use the
following code as we discussed in class: if (myObjects[i] != null) { ... }
This example uses i as the
loop variable;
//
your implementation may use something different.
...
}
void mousePressed() {
// create a new object based on the location clicked
and store it into myObjects[idxMyObjects]
...
//
increment the index into myObjects, keeping it in the range
0...MAX_NUM_OBJECTS
// NOTE: Make sure you understand how this
line of code works! It is complete as-is. You don't need to
do anything else to make the idxMyObjects counter work correctly.
idxMyObjects = (idxMyObjects+1) % MAX_NUM_OBJECTS;
Be sure to note that you must fill in code wherever you see an
ellipsis (...) at a minimum, but you will most likely need to add other
variables and functions as well. Be creative and artistic!!
For example, add a background that moves behind the objects.
Hints:
What to Hand in: