/////////////////////////////////////////////////////////////////////////////////////////////////// /*Meteor Shower -By:Aaron Sutton -Date of Last Edit: October 4th,2015 -Instructions: You are a U.F.O travelling through a meteor storm, try to dodge the meteors coming at you. The more you dodge, the more points you'll score but if you get hit you'll have to restart! Be careful! -Controls: Use the "S" key to go down, and use the "W" key to go up.*/ /////////////////////////////////////////////////////////////////////////////////////////////////// //state variables int score; //key bindings boolean upPressed=false; boolean downPressed=false; //States where your ship is, it always starts at 200 float shipLocation=200.; //sets the size of the asteroids int asteroidSize=30; //Set asteroid positions float asteroidX=0; float asteroidY=random(9, 151); float asteroidX2=10; float asteroidY2=random(152, 301); float asteroidX3=30; float asteroidY3=random(302, 401); float asteroidX4=30; float asteroidY4=random(302, 401); float asteroidX5=0; float asteroidY5=random(9, 151); //set background asteroid positions float astX=0; float astY=0; float astX2=300; float astY2=300; float astX3=340; float astY3=100; //start set up void setup() { size(400, 400); rectMode(CORNER); noStroke(); smooth(); } //start draw cycle void draw() { //draw black background background(0); stars(); //the stars use a white stroke so it must be removed after every time the stars are drawn as nothing else uses a stroke noStroke(); //The planets/asteroids in the background that gives it a moving effect asteroidBackground(); backgroundMovement1(); backgroundMovement2(); backgroundMovement3(); //draw U.F.O ship(); updateShip(); constrainShip(); //draws 5 asteroids on field asteroidFinal(); } //draw the spaceship void ship() { fill(43, 90, 203); ellipse(370, shipLocation+4, 15, 11); fill(220, 0, 0); ellipse(370, shipLocation, 20, 15); fill(136, 55, 147); ellipse(370, shipLocation-5, 10, 5); fill(203, 255, 252, 150); ellipse(370, shipLocation-5, 15, 11); fill(shipLocation+150, shipLocation+100, shipLocation+60); ellipse(363, shipLocation+1, 3, 3); ellipse(370, shipLocation+3, 3, 3); ellipse(377, shipLocation+1, 3, 3); } //create score counter void scoreCounter() { textSize(15); //Display users score fill(254, 255, 28); text("Score:", 20, 380); text(score, 67, 380); } //create the asteroids void asteroid() { fill (147, 107, 55); ellipse(asteroidX, asteroidY, asteroidSize, asteroidSize); fill(75, 58, 32); ellipse(asteroidX+2, asteroidY+8, 10, 7); ellipse(asteroidX-3, asteroidY-6, 7, 7); ellipse(asteroidX+8, asteroidY-3, 3, 3); } //sets the movement for the asteroids void asteroidMove() { asteroidX=asteroidX+3; if (asteroidX>410) { asteroidX=0; asteroidY=random(9, 151); score++; } } ///////////////////////////////////////////////////////////////////////////////////////////////// /*Next asteroids all contain similar variables, only with different positions. Allows for more than one asteroid on screen at a time. They all have different respawn rates and locations, but function very similarly*/ ///////////////////////////////////////////////////////////////////////////////////////////////// void asteroid2() { fill (147, 107, 55); ellipse(asteroidX2, asteroidY2, asteroidSize, asteroidSize); fill(75, 58, 32); ellipse(asteroidX2+2, asteroidY2+8, 10, 7); ellipse(asteroidX2-3, asteroidY2-6, 7, 7); ellipse(asteroidX2+8, asteroidY2-3, 3, 3); } void asteroidMove2() { asteroidX2=asteroidX2+3; if (asteroidX2>410) { asteroidX2=10; asteroidY2=random(152, 301); score++; } } void asteroid3() { fill (147, 107, 55); ellipse(asteroidX3, asteroidY3, asteroidSize, asteroidSize); fill(75, 58, 32); ellipse(asteroidX3+2, asteroidY3+8, 10, 7); ellipse(asteroidX3-3, asteroidY3-6, 7, 7); ellipse(asteroidX3+8, asteroidY3-3, 3, 3); } void asteroidMove3() { asteroidX3=asteroidX3+3; if (asteroidX3>410) { asteroidX3=30; asteroidY3=random(302, 401); score++; } } void asteroid4() { fill (147, 107, 55); ellipse(asteroidX4, asteroidY4, asteroidSize, asteroidSize); fill(75, 58, 32); ellipse(asteroidX4+2, asteroidY4+8, 10, 7); ellipse(asteroidX4-3, asteroidY4-6, 7, 7); ellipse(asteroidX4+8, asteroidY4-3, 3, 3); } void asteroidMove4() { asteroidX4=asteroidX4+3; if (asteroidX4>410) { asteroidX4=0; asteroidY4=random(302, 401); score++; } } void asteroid5() { fill (147, 107, 55); ellipse(asteroidX5, asteroidY5, asteroidSize, asteroidSize); fill(75, 58, 32); ellipse(asteroidX5+2, asteroidY5+8, 10, 7); ellipse(asteroidX5-3, asteroidY5-6, 7, 7); ellipse(asteroidX5+8, asteroidY5-3, 3, 3); } void asteroidMove5() { asteroidX5=asteroidX5+3; if (asteroidX5>410) { asteroidX5=30; asteroidY5=random(9, 151); score++; } } /*detects if the U.F.O is hit by an asteroid if so, score counter resets*/ void asteroidCollision() { if (asteroidX - 15 <= 400 && asteroidX + 15 >=400 ) { if (asteroidY - 15 <= shipLocation + 5 && asteroidY +15 >= shipLocation - 5) { System.out.println("POWPOW!"); score=0; } } if (asteroidX2 - 15 <= 400 && asteroidX2 + 15 >=400 ) { if (asteroidY2 - 15 <= shipLocation + 5 && asteroidY2 +15 >= shipLocation - 5) { System.out.println("POWPOW!"); score=0; } } if (asteroidX3 - 15 <= 400 && asteroidX3 + 15 >=400 ) { if (asteroidY3 - 15 <= shipLocation + 5 && asteroidY3 +15 >= shipLocation - 5) { System.out.println("POWPOW!"); score=0; } } if (asteroidX4 - 15 <= 400 && asteroidX4 + 15 >=400 ) { if (asteroidY4 - 15 <= shipLocation + 5 && asteroidY4 +15 >= shipLocation - 5) { System.out.println("POWPOW!"); score=0; } } if (asteroidX5 - 15 <= 400 && asteroidX5 + 15 >=400 ) { if (asteroidY5 - 15 <= shipLocation + 5 && asteroidY5 +15 >= shipLocation - 5) { System.out.println("POWPOW!"); score=0; } } } //Puts 5 asteroids into one function, allows for less clutter in the draw cycle. void asteroidFinal() { asteroid(); asteroid2(); asteroid3(); asteroid4(); asteroid5(); //movement update asteroidMove(); asteroidMove2(); asteroidMove3(); asteroidMove4(); asteroidMove5(); scoreCounter(); // Collision asteroidCollision(); } //draw the asteroids in the background void asteroidBackground() { fill(72, 58, 36); ellipse(astX, astY, 300, 300); fill(64, 66, 56); ellipse(astX2, astY2, 150, 150); fill(175, 157, 129); ellipse(astX3, astY3, 100, 100); } //sets the background to move and reset void backgroundMovement1() { astX=astX+0.3; if (astX>550) { astX=-150; } } void backgroundMovement2() { astX2=astX2+0.6; if (astX2>480) { astX2=-80; } } void backgroundMovement3() { astX3=astX3+0.8; if (astX3>450) { astX3=-50; } } //draws stars in the background //referenced from Cylon Lander, but changed slightly void stars() { stroke(random(130, 230)); point(20, 30); point(320, 130); point(120, 360); point(40, 300); point(130, 200); point(360, 290); point(80, 70); point(50, 130); point(250, 110); point(55, 270); point(140, 200); point(290, 290); point(290, 30); point(10, 220); point(120, 100); point(60, 100); point(100, 300); point(380, 360); point(320, 300); point(190, 260); point(280, 320); point(79, 240); } //updates the movements for the ship void updateShip() { if (upPressed==true) { shipLocation-=3.; } if (downPressed==true) { shipLocation+=3.; } } //Key binding controls. void keyPressed() { if (key=='W' || key=='w') { upPressed=true; downPressed=false; } if (key=='S'||key=='s') { downPressed=true; upPressed=false; } if (shipLocation<25) { upPressed=false; } } //knows when you release a key void keyReleased() { if (key=='W'||key=='w') { upPressed=false; shipLocation=shipLocation; } if (key=='S'||key=='s') { shipLocation=shipLocation; downPressed=false; } } //constrains the ship to window borders void constrainShip() { if (shipLocation+25<shipLocation) { shipLocation=24; } if (shipLocation<10) { shipLocation=11; } if (shipLocation+375<shipLocation) { shipLocation=375; } if (shipLocation>390) { shipLocation=389; } }