//// p1chase: Mutt chases Bob. (+ animation) String title= "Mutt chases Bob"; String subtitle="(Sent back to kennel, if he catches Bob.)"; String news=""; String hint= "Click to reposition Bob." + "\n 'h' sends Bob home; 'k' sends Mutt to kennel; 'r' resets all" + "\n ('z' toggles headless)"; ; String author= "B.A.Martin / dc_chase.pde"; String who = "Bob", dogname="Mutt"; boolean headless=true; int frames=30; float horizon; float bobX, bobY; // Position and speed of hero. float bobXspeed, bobYspeed; float fast=1; float muttX, muttY; // Position of dog. float houseX=100, houseY=150, houseW=200, houseH=100; float kennelX, kennelY; color RED=color(255,0,0), GREEN=color(0,255,0), BLUE=color(0,0,255); color YELLOW=color(255,255,0), CYAN=color(0,255,255), MAGENTA=color(255,0,255); color PINK=color(255,200,220), BROWN=color(127,0,0), DARK=color(0,150,0); color WHITE=color(255), BLACK=color(0), PALE=color(200); //// SETUP: Define screen size, set modes. void setup() { size( 800, 600 ); smooth(); frameRate(frames); // horizon= height/3; houseY= horizon-houseH; kennelX= 10; kennelY= height-100; reset(); hint += "\n +/- for faster/slower"; } void reset() { bobHome(); muttHome(); } void bobHome() { // Start Bob at home. bobX= houseX+5; // Bob starts in house door. bobY= houseY+10; bobXspeed= random( 2,7 ); // Random speeds. bobYspeed= random( -3, +3 ); fast=1; news= "Bob goes home!"; } void muttHome() { muttX= kennelX+20; muttY= kennelY+10; fast=1; news= "Mutt is sent back to the kennel!"; } //// DRAW: sky & sun plus creature void draw() { scene(); action(); show(); messages(); // (Display the messages last.) } //// SCENE: sky, sun, house. void scene() { background( 200, 220, 250 ); // Blue sky fill( GREEN ); rect( 0,horizon, width,height-horizon ); // Green grass house(); } void house() { // Red house fill( RED ); rect( houseX,houseY, houseW,houseH ); triangle( houseX,houseY, houseX+houseW,houseY, houseX+houseW/2,houseY-houseH/2 ); // Brown door fill( BROWN ); // rect( houseX+10,houseY+10, 50,houseH-10 ); // Doghouse fill(WHITE); rect( kennelX,kennelY, 100,50 ); fill(RED); text( "Kennel", kennelX+20,kennelY+20 ); fill(BLACK); rect( kennelX+85,kennelY+10, 15,40 ); } //// ACTION: sun moves (then resets to random height) void action() { // Move Bob & Mutt muttX= muttX + (bobX-muttX) / 90; // Mutt chases Bob muttY= muttY + (bobY- muttY) / 90; bobX= bobX + bobXspeed*fast; // Bob moves indpendently. bobY= bobY + bobYspeed*fast; //// Bounce off the walls. if (bobX>width-30 || bobX<40) { bobXspeed = -bobXspeed; if (bobXspeed<0) news="Bob goes West"; else news="Bob is heading East"; } if (bobY>height-50-10 *bobXspeed || bobY