CST 112 -- Dog Race (final exam)

Five dogs race horizontally across the screen.

DOGS: (See below for further details.)

EVENTS:   Three buttons: MOVE, RESET, QUIT


OBJECTS:   Two object classes will be needed:   Dog and Button
// If your name is "Xample Your Zname" then you'll probably need some code like this:
	int many=5;
	Dog[] xyz =  new Dog[5]		// Create an array of "dogs" //
	Button bmove, breset, bquit;    // Buttons. //
	float start=50;
	// ...
	void setup() {		//// Initialize ////
		size( 800, 650 );
		xyz[0]=  new Dog( 100, "Rover" );
		xyz[1]=  new Dog( 200, "Fido" );
		//  . . .
		xyz[4]=  new Dog( 500, "Spot"  );
		reset();
	}
	void reset() {        //// Start all dogs at x=xxistart50; random sizes and colors ////
	  for (int j=0; j<many; j++ ) {
		xyz[j].x=  start;
		//  . . .   
// The "draw()" method draws all objects, but does NOT move them.
	void draw() {
		scene();		// background, scene, and text.
		// Show all dogs, but do not move them;
		for (int j=0; j<many; j++ ) {
		  xyz[j].show();
		}
		// Show buttons
		bmove.show();					// . . . 

	void mousePressed() {
  		if ( bmove.hit( mouseX, mouseY ) )  moveall();
		// If any dog was clicked, turn himn around.
		for (int j=0; j<many; j++) {
		  if ( xyz[j].hit( mouseX, mouseY ) ) {		// . . . 

	void keyPressed() {    //// Handle key-press. //
		if ( key == ' ' ) { moveall(); }		// . . . 

	void moveall() {
    		// Move all objects (unless game over) //
    		if (! gameover ) {
      		for (int j=0; j<xyz.length; j++) { 
        		xyz[j].move();
      		}
	}  
// And you will need a class definition something like this:
	//// CLASS DEFINITION:  Define the "Dog" class. ////
	class Dog {
		float x=start,y;
		String name;		// Name of this dog.
		color c;		// Color of this "dog"
		// ...
		//// CONSTRUCTOR(S) ////
		Dog( float yset, String nameset ) {
		  this.y=  yset;
		  this.name=  nameset;
		}
		//// METHODS ////
		void show() {
		  // Draw the object at (x,y)		// . . .  }
		void move() {
		  // Move the object's x coordinate.	// . . .  }
		boolean hit( float mx, float my) {
		  // Return true if (mx,my) is within button;	// . . .  }

	}// END of class Dog // 

Dog properties: name, color, width & height of body (rectangle); coordinates (x,y); plus other values and booleans as needed. Each dog has random size (50-100 wide), and random (brownish) color.

Dog methods -- Objects require at least the following methods:

Note that move( ) is NOT called by draw( ); it is called only when an event occurs (MOVE button).
When the dog moves, the legs should "animate" -- with two of the legs slanting either forward or back. as illustrated in this example: dograce.pde .