/** Project II Jenna Klima Sep 22nd, 2014 Globals float herocastiaX, herocastiaY; float monstermaurusX, monstermaurusY; castiaX = castiaX + ( maurusX - castiaX ) / 50; castiaY = castiaY + ( maurusY - castiaY ) / 50; **/ int score = 0; int step; float sunX = 100, sunY = 100; float sunD=50; // Diameter of sun float sunZ=30; // Length of rays float horizon; float castiaX, castiaY; float castiaFast=30; float maurusX, maurusY; float maurusFast=150; float goldX = 200, goldY = 200; float x, y, w, h; 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 ( 1000, 600 ); horizon = height / 4; sunY = horizon / 2; castiaX = width / 2; castiaY = height / 2; maurusX = 30; maurusY = random ( horizon, height - 60 ); resetI ( x, y, w, h, goldX, goldY ); } void resetI ( float x, float y, float w, float h, float goldX, float goldY ) { // ???? castiaX = 30; castiaY = random ( horizon, height - 60 ); maurusX = width - 30; maurusY = random ( horizon, height - 60 ); maurusFast = 150; goldX = random ( width / 4, width * 3 / 4 ); goldY = random ( horizon + 20, height - 20 ); } void draw ( ) { //next frame step= step + 1; scene ( ); scoring ( ); birds ( ); gold ( ); monster ( x, y, w, h ); hero ( x, y, w, h ); } void scene ( ) { //sky, sun, etc. background ( 200, 200, 255 ); noStroke ( ); fill ( 255, 255, 0 ); ellipse ( sunX, sunY, sunD, sunD ); fill ( 200, 255, 200 ); rectMode ( CORNER ); rect ( 0, horizon, width, height * 3 / 4 ); //sun moves across sky if ( sunX > width ) { sunX = 0; sunY = random ( 30, horizon - 30 ); score = score + 10; } sunX = sunX + 1; //sun rays strokeWeight ( 3 ); stroke ( 255, 255, 100 ); stroke(0); /* line ( sunX + 40, sunY + 40, sunX + 18, sunY + 18 ); line ( sunX - 40, sunY - 40, sunX - 18, sunY - 18 ); */ line ( sunX + 40, sunY - 40, sunX + 18, sunY - 18 ); line ( sunX - 40, sunY + 40, sunX - 18, sunY + 18 ); line ( sunX, sunY + 25, sunX, sunY + 55 ); line ( sunX, sunY - 25, sunX, sunY - 55 ); line ( sunX + 25, sunY, sunX + 55, sunY ); line ( sunX - 25, sunY, sunX - 55, sunY ); stroke ( 255, 255, 100 ); //-- rays( 40, 40, 18, 18 ); rays( 0.72*sunD/2, 0.72*sunD/2 ); rays( 40, 40 ); rays( 0, sunZ+sunD/2 ); rays( sunZ+sunD/2, 0 ); fill ( 0 ); //-- text ( sunX, sunX, sunY + 40 ); text ( "Project II Requirements", width - 400, 50 ); text ( "GOLD=" + score, width - 200, 50 ); text ( "Jenna Klima", width - 975, 575 ); } void rays( float c, float d ) { // Draw a pair of rays (start to stop); line ( sunX, sunY, sunX + c, sunY + d ); line ( sunX, sunY, sunX - c, sunY - d ); } void birds ( ) { //draw & move 3 birds strokeWeight ( 1 ); stroke ( 0 ); bird1X += random ( 3, 5 ); bird2X += random ( 2, 4 ); bird3X += random ( 1, 2 ); bird4X += random ( 2, 3 ); //reset birds after flight completed 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 is red //-- drawBird ( bird1X, bird1Y + 5 - random ( 5 ) );//----makes red jitter drawBird ( bird1X, bird1Y ); 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 - 60, y - 10, x - 60, y + 10 );//------body ellipse ( x, y, 50, 25 ); //make the wings flap every 1/2 sec float flap; int n = ( step / 30 ); if ( n %4 == 0) flap = 20; else if ( n %4 == 1 ) flap = -10; else if ( n %4 ==2 ) flap = -20; else flap =+ 10; birdWing ( x, y, flap ); //-- text( flap, x + 12, y + 30 ); //-- text( "step:"+step, x+12, y+40 ); } 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 ); triangle ( x + 12, y, x - 12, y, x-30, y-yup ); } float updateBomb ( float y) { //calculate new Y value for bomb by adding 5 if >0 and height ) return 0; return y + 1 + y / 50;//------------approx gravity by using y/50 } void drawBomb ( float x, float y ) { //draw a bomb if y>0 if ( y <= 0 ) return; ellipse ( x, y, 20, 30 ); stroke ( 255, 0, 0 ); fill ( 255, 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 gold ( ) { //gold strokeWeight ( 1 ); stroke ( 0 ); fill ( 255, 200, 0 ); ellipse ( goldX, goldY, 30, 30 ); } void hero ( float x, float y, float w, float h ) { //move & draw Castia if ( mousePressed ) { castiaX = castiaX + ( mouseX - castiaX ) / castiaFast; castiaY = castiaY + ( mouseY - castiaY ) / castiaFast; } else { castiaX = castiaX + ( goldX - castiaX ) / castiaFast; castiaY = castiaY + ( goldY - castiaY ) / castiaFast; } if ( castiaY < horizon ) { castiaY = horizon; } float castiaW=50, castiaH=80; //draw chest fill ( 0, 150, 0 ); rectMode ( CENTER ); //-- rect ( castiaX, castiaY, 50, 80 ); rect ( castiaX, castiaY, castiaW, castiaH ); fill ( 127, 255, 0 ); //-- ellipse ( castiaX, castiaY - 40, 40, 50 ); ellipse ( castiaX, castiaY - castiaH/2, 40, 50 ); //arms rectMode ( CORNERS ); fill ( 0, 50, 0 ); rect ( castiaX - 45, castiaY - castiaH/2, castiaX - 25, castiaY + 30 ); fill ( 0, 50, 0 ); rect ( castiaX + 45, castiaY - 40, castiaX + 25, castiaY + 30 ); //butt fill ( 0, 50, 0 ); rect ( castiaX - 25, castiaY + 35, castiaX + 25, castiaY + 50 ); //legs fill ( 0, 50, 0 ); rect ( castiaX - 15, castiaY + 35, castiaX - 30, castiaY + 110 ); fill ( 0, 50, 0 ); rect ( castiaX + 15, castiaY + 35, castiaX + 30, castiaY + 110 ); //vest fill ( 0, 255, 0 ); triangle ( castiaX - 25, castiaY - 15, castiaX + 25, castiaY - 15, castiaX, castiaY + 10 ); fill ( 0 ); text ( "Castia", castiaX - 17, castiaY ); if ( dist ( goldX, goldY, castiaX, castiaY ) < 75 ) { score = 200; goldX = random ( 50, width - 50 ); goldY = random ( horizon, height - 50 ); } } void monster ( float x, float y, float w, float h ) { ////move and draw Maurus //chase Castia maurusX = maurusX + ( castiaX - maurusX ) / maurusFast; maurusY = maurusY + ( castiaY - maurusY ) / maurusFast; if ( dist ( castiaX, castiaY, maurusX, maurusY ) < 100 ) { eat ( x, y, w, h ); } //draw Maurus fill ( 150, 0, 0 ); rectMode ( CENTER ); rect ( maurusX, maurusY, 70, 90 ); fill ( 255, 127, 0 ); ellipse ( maurusX, maurusY - 40, 50, 60 ); //arms rectMode ( CORNERS ); fill ( 50, 0, 0 ); rect ( maurusX - 60, maurusY - 45, maurusX - 35, maurusY + 30 ); fill ( 50, 0, 0 ); rect ( maurusX + 60, maurusY - 45, maurusX + 35, maurusY + 30 ); //butt fill ( 50, 0, 0 ); rect ( maurusX - 35, maurusY + 35, maurusX + 35, maurusY + 50 ); //legs fill ( 50, 0, 0 ); rect ( maurusX - 15, maurusY + 35, maurusX - 30, maurusY + 110 ); fill ( 50, 0, 0 ); rect ( maurusX + 15, maurusY + 35, maurusX + 30, maurusY + 110 ); //vest fill ( 255, 0, 0 ); triangle ( maurusX - 35, maurusY - 10, maurusX + 35, maurusY - 10, maurusX, maurusY + 20 ); fill ( 0 ); text ( "Maurus", maurusX - 19, maurusY ); } void scoring ( ) { } void eat ( float x, float y, float w, float h ) { //Monster kills hero. Deduct 200 from score score = score - 200; background ( 255, 0, 0 ); castiaX = 40; castiaY = random ( 30, height - 30 ); maurusX = width; maurusY = random ( 30, height - 30 ); } void keyPressed ( ) { //handle keys if ( key == 'q' ) exit ( ); if ( key == 'r' ) resetI ( x, y, w, h, goldX, goldY ); //drop bomb when #s 1 or 2 or 3 or 4 keys pressed if ( key == '1' ) bomb1Y = bird1Y; if ( key == '2' ) bomb2Y = bird2Y; if ( key == '3' ) bomb3Y = bird3Y; if ( key == '4' ) bomb4Y = bird4Y; if ( key == '*' ) { //drops all bombs bomb1Y = bird1Y; bomb2Y = bird2Y; bomb3Y = bird3Y; bomb4Y = bird4Y; } if (key == 'm') maurusFast *= 2; if (key == 'M') maurusFast *= 0.5; if (key == 'c') castiaFast *= 2; if (key == 'C') castiaFast *= 0.5; // Modify sun Diameter & rays if (key == 'S') sunD +=5; if (key == 's') sunD -=5; if (key == 'z') sunZ -=2; if (key == 'Z') sunZ +=2; } void mousePressed ( ) { castiaX = castiaX + ( mouseX - castiaX ) / 30; castiaY = castiaY + ( mouseY - castiaY ) / 30; } void mouseReleased ( ) { castiaX = castiaX + ( goldX - castiaX ) / 30; castiaY = castiaY + ( goldY - castiaY ) / 30; score = score + -50; }