// Andrew Urrutia // project 3 int score=0; float sunX=100, sunY=100; float horizon; String news=""; float helpX, helpY; float ladder; float goldX, goldY; float jaxX, jaxY, jaxW=50, jaxH=80; float dimitriusX, dimitriusY, dimitriusW=70, dimitriusH=90; float dimitriusStep; // Wobbly walk. int step; float look; float bird1X, bird1Y=20, bomb1Y=1; float bird2X, bird2Y=40, bomb2Y=1; float bird3X, bird3Y=60, bomb3Y=1; float bird4X, bird4Y=80, bomb4Y=1; void setup() { //// setup //// size( 900,600 ); horizon= height/4; sunY= horizon/2; score=0; reset(); } void reset() { // Start at opposite sides. // if (random(1) > 0.5) { jaxX= width-30; dimitriusX=30; } else { dimitriusX= width-30; jaxX=30; } jaxY= random( horizon,height-50 ); dimitriusY= random( horizon,height-50 ); goldX= random( width/4, width*3/4); goldY= random(horizon+20,height-30); mouseY=height; } void draw() { // next frame // scene(); if (key == '?') { help(); return; } Ladder(); gold(); hero(); monster(); monkey(20, 9, 10); birds(); hits(); // Check for hits // // Different step, every 15 or so frames. // step = step+1; if (step % 15 == 0) dimitriusStep= random( -15, 15 ); } void scene() { // sky, sun, etc. background( 255,250,255 ); fill(255,255,0); // yellow sun ellipse(sunX,sunY, 50,50); fill( 200,255,200); // grass rectMode( CORNER ); rect(0,horizon, width,height*3/4); // sun moves across sky. (-10 each day.) // if (sunX > width) { sunX=0; sunY= random( 10, horizon-20); score= score-10; } sunX= sunX+2; fill(0); text( sunX, sunX, sunY+40); text( news, 30+width/3, 40 ); text( "SCORE= " + score, width-200, 50 ); } void birds() { /// Draw & move 3 birds bird1X += random(3,6); bird2X += random(2,4); bird3X += random(1,2); bird4X += random(2,4); // Reset birds after flight completed (+500). if (bird1X>width+500) { bird1X= 80; bird1Y= random(20,horizon); } if (bird2X>width+500) { bird2X= 80; bird2Y= random(20,horizon); } if (bird3X>width+500) { bird3X= 80; bird3Y= random(20,horizon); } if (bird4X>width+55) { bird4X= 80; bird4Y= random(20,horizon); } // draw birds & bombs // fill( 255,0,0 ); // bird 1: red drawBird( bird1X, bird1Y+5-random(5) ); bomb1Y= updateBomb( bomb1Y ); drawBomb( bird1X, bomb1Y ); fill( 255,155,0 ); drawBird( bird2X, bird2Y ); bomb2Y= updateBomb( bomb2Y ); drawBomb( bird2X, bomb2Y ); fill( 255,255,0 ); drawBird( bird3X, bird3Y ); bomb3Y= updateBomb( bomb3Y ); drawBomb( bird3X, bomb3Y ); fill( 0,255,255 ); drawBird( bird4X, bird4Y ); bomb4Y= updateBomb( bomb4Y ); drawBomb( bird4X, bomb4Y ); } void drawBird( float x, float y ) { //// draw one bird ///// triangle( x,y, x-50,y-10, x-50,y+10 ); // body // Make the wings flap (every half second). float flap; if ( step/30 % 4 == 0 ) flap= 20; else if ( step/30 % 4 == 1 ) flap= +10; else if ( step/30 % 4 == 2 ) flap= -20; else flap= +10; birdWing( x, y, flap ); } void birdWing( float x, float y, float yup ) { // Draw the wing (up or down). triangle( x-20,y, x-40,y, x-40,y-yup ); } float updateBomb( float y ) { //// Calculate new Y value for bomb: add 5 if >0 and height) return 0; return y + 1 + y/50; // Approximate falling by using y/50. } void drawBomb( float x, float y ) { //// draw bomb //// if (y<=0) return; ellipse( x,y, 20,30 ); stroke(255,0,0); fill( 250,0,0, 50 ); // Red glow surrounds bomb. ellipse( x,y, 50,50 ); stroke(0); fill(0); triangle( x,y+3, x-15,y-12, x+15,y-12 ); } void hero() { //// move & draw Vlad //// jaxX= jaxX + (goldX-jaxX)/60; jaxY= jaxY + (goldY-jaxY)/60; if (jaxYjaxX ? -1 : +1; fill(255,127,0); head( jaxX,jaxY-jaxH/2-10, 40 ); // legs & arms strokeWeight(6); leg( jaxX-20, jaxY+jaxH/2, 40, -dimitriusStep/2 ); leg( jaxX+20, jaxY+jaxH/2, 40, dimitriusStep/2 ); strokeWeight(0); arm( -40, jaxX-jaxW/2, jaxY-jaxH/2 ); arm( +40, jaxX+jaxW/2, jaxY-jaxH/2 ); } void monster() { // move & draw Jax // // chase Jax dimitriusX= dimitriusX + (jaxX-dimitriusX)/150; dimitriusY= dimitriusY + (jaxY-dimitriusY)/150; // draw dimitrius // drawdimitrius( dimitriusX, dimitriusY ); } void drawdimitrius( float dimitriusX, float dimitriusY ) { // draw dimitrius // fill( 150,250,255 ); rectMode( CENTER ); rect( dimitriusX, dimitriusY, dimitriusW, dimitriusH ); fill(0); text( "dimitrius", dimitriusX-20, dimitriusY-10 ); // head & eyes, arms, legs // look= dimitriusXhorizon) { fill(random(200,250),random(100,200),random(150)); ellipse( goldX,goldY, 50+random(20),40+random(20) ); fill(random(150,250),random(150,250),random(100)); ellipse( goldX,goldY, 30+random(15),30+random(15) ); fill(255,255,0); ellipse( goldX,goldY, 10+random(20),20+random(20) ); } } void scoring() { } ////// Collisions ////// void hits() { /// Check for collisions /// // Monster catches hero. // if ( dist( jaxX,jaxY, dimitriusX,dimitriusY ) < 50 ) { eat(); news= "The hero was EATEN by the monster."; } // Monster gets the gold. // if ( dist( goldX,goldY, dimitriusX,dimitriusY ) < 50 ) { goldX= 50; goldY= random(horizon,height); news= "SORRY! The monster took the gold!"; } //// Hero gets the gold! // if ( dist( jaxX,jaxY, goldX,goldY ) < 50 ) { score += random( 100,200 ); background(255,255,255); reset(); news= "YAY! The hero got the gold."; } // Bombs (starting after 250 frames) if (step<250) return; if ( dist( dimitriusX,dimitriusY, bird1X,bomb1Y ) < 50 ) dimitriusHit(); if ( dist( dimitriusX,dimitriusY, bird2X,bomb2Y ) < 50 ) dimitriusHit(); if ( dist( dimitriusX,dimitriusY, bird3X,bomb3Y ) < 50 ) dimitriusHit(); if ( dist( dimitriusX,dimitriusY, bird4X,bomb4Y ) < 50 ) dimitriusHit(); } void dimitriusHit() { //// Monster has been bombed. //// score += 10; background(0); // Flash black dimitriusX=0; dimitriusY= random(horizon,height); news= "Monster was hit by a bomb!"; } void eat() { //// Monster eats hero!!!! Deduct 200 from score. score= score - 200; background(255,0,0); reset(); } void mousePressed() { //// Click. //// news=""; goldX= mouseX; goldY= mouseY; score= score - 50; dimitriusX=0; dimitriusY= random(20,height-20); } void keyPressed() { //// Handle keys. //// news=""; if (key == 'q') exit(); if (key == 'r') reset(); // Drop bomb when # 1,2,3,4 key is pressed. if (key == '1') bomb1Y= bird1Y; if (key == '2') bomb2Y= bird2Y; if (key == '3') bomb3Y= bird3Y; if (key == '4') bomb4Y= bird4Y; if (key == '*') { bomb1Y= bird1Y; // bombs incoming!!! bomb2Y= bird2Y; bomb3Y= bird3Y; bomb4Y= bird4Y; } } void help() { // Instructions // news=""; helpX= 100; helpY =horizon+20; say( "I N S T R U C T I O N S" ); say( "" ); say( "Hero chases gold -- +100 points." ); say( "Monster chases hero -- lose points if eaten!" ); say( "Click to move gold (but lose 50)." ); say( "(Also lose 10 points per day.)" ); say( "r key to reset (monster to left, hero to right, gold in the middle." ); say( "q key to quit" ); } void say( String s ) { //// Display one line of text (on next available line). //// text( s, helpX, helpY ); helpY += 12; // Next line. } void Ladder() { fill(175,120,255); for (int i = 0; i<12; i+= 2) { rect(20, i*50, 100, 10, 80); } for (int j = 0; j<2; j++) { rect(j*100, 0, 25, 1000, 80); } } void monkey(float x, float y, float size) { strokeWeight(5); stroke(120, 50, 10); line(mX, mY, mX+30*z, mY-100); // right arm line(mX, mY, mX-30*z, mY-40); // left arm line(mX, mY, mX-20*z, mY+100);// right leg line(mX, mY, mX+20*z, mY+40); // left leg fill(120, 40, 10); noStroke(); ellipseMode(CENTER); ellipse(mX, mY, 30, 60); fill(120, 40, 10); ellipse(mX, mY-40, 30, 30); stroke(0,0,0); /* (monkey > 0) { monkey=height; }*/ } float mX = 55, mY = 500; float z = 1;