CMSC 110 (Introduction to Computing)
Fall 2012
Assignment#4
Due before start of class on Wednesday,
October 24, 2012
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;
/** 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 animation
...
}
}
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 (your
sketch must work if this value is changed!)
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: