/*////////////////// **Sacrifice For the Planet by Matthew Murchison ** **The goal of this game is to sacrifece ones ship to save the planet bellow. The planet and ship boath have health, and either way death is inevitabel. **Control the ship with your mouse, and watch out for debris that hps over your ship! ** ** Most of the code for the astroids is bassed off of the gone_Debrising example provided in class, **after several of my own attemps I decided to consult the example as I was getting no where. Many thanks for that example! /*////////////////// //////////////////// //Global Variables// //////////////////// int planetHealth = 5; int uFOHealth = 10; int gameOver = 1; int loopEndInstuctions = 0; // declare Debris related vars, bassed on gone_fishing example float DebrisPositionX, DebrisPositionY; boolean DebrisBite=false; float DebrisBiteTime=0; float DebrisTop, DebrisBottom; float mouthLeft, mouthRight, mouthBottom, mouthTop; //control when the debris gose back to the top boolean hit = false; void setup() { size(400, 400); smooth(); frameRate(60); initializeDebris(); } void initializeDebris() { // set initial Debris position DebrisPositionX=random(0, width); DebrisPositionY=random(height); } void draw() { //////// //Draw// //////// //Background setBackground(); //Earth setEarth(); //UFO setUFO(); //Debris updateDebrisPosition(); drawDebris(); //UI instructions(); doPlanetHealth(); doUFOHealth(); textOverlay(); collisionShip(); collisionPlanet(); ////////// //Update// ////////// //astroids //Game Start //Game over } void setBackground() { background(0); drawStars(); drawMoon(); drawSun(); //println("UFO health is " + uFOHealth + " ."); } void drawStars() { //Give the stars a random brightness float rand1 = random(150, 255); float rand2 = random(0, 255); float rand3 = random(100, 255); strokeWeight(3); //Star 1 stroke(rand1); point(300, 200); //Star 2 stroke(rand2); point(100, 210); //Star 3 stroke(rand3); point(200, 100); //Star 4 stroke(rand1); point(390, 150); //Star 5 stroke(rand2); point(210, 190); //Star 6 stroke(rand3); point(110, 250); } void drawMoon() { //make shadow fliker float rand1 = random(0, 10); //Moon stroke(0); fill(200, 210, 190); ellipse(0, 125, 200, 200); //Moon Shadow strokeWeight(0); stroke(0); fill(150, 155, 130); ellipse(-10, 140, 175, 165); } void drawSun() { // make the sun fliker float rand1 = random(200, 255); float rand2 = random(50, 100); float rand3 = random(0, 50); strokeWeight(0); stroke(0); //Sun center fill(200, 250, 0, rand1); ellipse(400, 60, 100, 100); //Sun glow fill(200, 250, 0, rand2); ellipse(400, 70, 130, 130); //Sun glow outer fill(200, 250, 0, rand3); ellipse(400, 80, 150, 150); } void setEarth() { //atmoshphere strokeWeight(0); stroke(0); fill(10, 10, 200, 150); ellipse(200, 410, 700, 100); //outer atmoshpere fill(10, 10, 200, 100); strokeWeight(0); stroke(0); ellipse(200, 390, 600, 100); //earth strokeWeight(2); stroke(255); fill(10, 200, 10); ellipse(200, 430, 800, 100); } void setUFO() { strokeWeight(1); stroke(0); //UFO bubble fill(150); ellipse(mouseX, 325, 25, 40); //UFO body fill(200); ellipse(mouseX, 325, 100, 25); //UFOline fill(150); rect(mouseX-55, 322, 110, 4); } void instructions() { //Show the instuctions ufor 1 second; int instruction = 1; strokeWeight(2); stroke(0); fill(255); while (instruction == 1) { text("You must sacrifce your ship to save the planet, block that debris!", 10, 15); text("Be carefull, sometimes the debris will skip by you!", 70, 30); text("Take all precautions.", 120, 45); instruction = 0; } } void doPlanetHealth() { //show planet health if (planetHealth == 5 ) { stroke(0); strokeWeight(1); fill(255); ellipse(20, 300, 12, 12); ellipse(20, 320, 10, 10); ellipse(20, 340, 10, 10); ellipse(20, 360, 10, 10); ellipse(20, 380, 10, 10); } else if (planetHealth==4) { stroke(0); strokeWeight(1); fill(255); ellipse(20, 320, 12, 12); ellipse(20, 340, 10, 10); ellipse(20, 360, 10, 10); ellipse(20, 380, 10, 10); } else if (planetHealth==3) { stroke(0); strokeWeight(1); fill(255); ellipse(20, 340, 12, 12); ellipse(20, 360, 10, 10); ellipse(20, 380, 10, 10); } else if (planetHealth==2) { stroke(0); strokeWeight(1); fill(255); ellipse(20, 340, 12, 12); ellipse(20, 360, 10, 10); } else if (planetHealth==1) { stroke(0); strokeWeight(1); fill(255); ellipse(20, 360, 12, 12); } else if (planetHealth==0) { gameOver = 3; } } void doUFOHealth() { rectMode(CENTER); //show UFO health if (uFOHealth == 10 ) { stroke(0); strokeWeight(1); fill(255); rect(380, 300, 8, 8); rect(380, 308, 5, 5); rect(380, 316, 5, 5); rect(380, 324, 5, 5); rect(380, 332, 5, 5); rect(380, 340, 5, 5); rect(380, 348, 5, 5); rect(380, 356, 5, 5); rect(380, 364, 5, 5); rect(380, 372, 5, 5); } else if (uFOHealth==9) { stroke(0); strokeWeight(1); fill(255); rect(380, 308, 8, 8); rect(380, 316, 5, 5); rect(380, 324, 5, 5); rect(380, 332, 5, 5); rect(380, 340, 5, 5); rect(380, 348, 5, 5); rect(380, 356, 5, 5); rect(380, 364, 5, 5); rect(380, 372, 5, 5); } else if (uFOHealth==8) { stroke(0); strokeWeight(1); fill(255); rect(380, 316, 8, 8); rect(380, 324, 5, 5); rect(380, 332, 5, 5); rect(380, 340, 5, 5); rect(380, 348, 5, 5); rect(380, 356, 5, 5); rect(380, 364, 5, 5); rect(380, 372, 5, 5); } else if (uFOHealth==7) { stroke(0); strokeWeight(1); fill(255); rect(380, 324, 8, 8); rect(380, 332, 5, 5); rect(380, 340, 5, 5); rect(380, 348, 5, 5); rect(380, 356, 5, 5); rect(380, 364, 5, 5); rect(380, 372, 5, 5); } else if (uFOHealth==6) { stroke(0); strokeWeight(1); fill(255); rect(380, 332, 8, 8); rect(380, 340, 5, 5); rect(380, 348, 5, 5); rect(380, 356, 5, 5); rect(380, 364, 5, 5); rect(380, 372, 5, 5); } else if (uFOHealth==5) { stroke(0); strokeWeight(1); fill(255); rect(380, 332, 8, 8); rect(380, 340, 5, 5); rect(380, 348, 5, 5); rect(380, 356, 5, 5); rect(380, 364, 5, 5); rect(380, 372, 5, 5); } else if (uFOHealth==4) { stroke(0); strokeWeight(1); fill(255); rect(380, 348, 8, 8); rect(380, 356, 5, 5); rect(380, 364, 5, 5); rect(380, 372, 5, 5); } else if (uFOHealth==3) { stroke(0); strokeWeight(1); fill(255); rect(380, 314, 8, 8); rect(380, 364, 5, 5); rect(380, 372, 5, 5); } else if (uFOHealth==2) { stroke(0); strokeWeight(1); fill(255); rect(380, 364, 8, 8); rect(380, 372, 5, 5); } else if (uFOHealth==1) { stroke(0); strokeWeight(1); fill(255); rect(380, 372, 8, 8); } else if (uFOHealth==0) { gameOver = 2; } rectMode(CORNER); } void textOverlay() { //give messgaes depending on end game if (gameOver == 1) { //if you avoided the astroids: } else if (gameOver == 3) { text("The planet died, you have failed.", width/2, width/2); //if you got hit by the astroids: } else if (gameOver == 2) { text("You died for the planet! You have (sortof) won!.", width/2, width/2); } } //////////// //Astroids// //////////// void updateDebrisPosition() { // move Debris top to bottom DebrisPositionX++; // if Debris has moved off screen, reset Debris to the top of the screen if (DebrisPositionX>400 || hit == true) { hit = false; // set the debris to the top, on a random horrizontal. Borrowed almost directly from gone_fishing DebrisPositionX=0; DebrisPositionY= random(0, 400); } } void drawDebris() { // Debris body rectMode(CORNERS); //Set the debris top location and bottom location DebrisTop=DebrisPositionX-20; DebrisBottom=DebrisPositionX+20; stroke(224, 0, 0); fill(224, 0, 0); // bottom //Draw the debris rect(DebrisPositionY-5, DebrisPositionX+5, DebrisPositionY+5, DebrisPositionX-5); // noStroke(); // Debris tail // triangle(DebrisPositionY+45, DebrisPositionX, DebrisPositionY+75+sin(frameCount/2)*5, DebrisTop+5, DebrisPositionY+75+sin(frameCount/2)*5, DebrisBottom-5); } void collisionShip() { rectMode(CORNERS); //Draw a bounding box for bug testing //fill(200,200,200,100); //rect(mouseX + 50, 320, mouseX -50, 350); // detect is the debris has hit the UFO if (DebrisBottom > 320 && DebrisBottom < 350 && DebrisPositionX-5 <= mouseX+50 && DebrisPositionX+5 >= mouseX-50) { //take health of the UFO uFOHealth -= 1; //send the debris back to the top hit = true; } rectMode(CORNER); } void collisionPlanet() { //check if the planet has been hit if (DebrisBottom == 400) { //take health of the planet planetHealth = planetHealth-1; } }