boolean rocketAlive = true; int fireX = 210; int fireY = 390; boolean mouseLeft = false; boolean mouseRight = false; boolean mouseMiddle = false; boolean fireworkAlive = true; boolean explosionAlive = false; int moonx = 130; int r = 50; int g = 50; int b = 80; int hillAndGrassColour = 50; int characterColourR = 100; int characterColourG = 100; int characterColourB = 100; int charSkinR = 120; int charSkinG = 80; int charSkinB = 80; void setup() { size(400, 400); } void draw() { background(r, g, b); r = constrain(r, 20, 50); g = constrain(g, 20, 50); b = constrain(b, 40, 100); if (mouseX < width/2) //Changes Background Colour With Mouse Movement { r = r - 1; g = g - 1; b = b - 1; } else { r = r + 1; g = g + 1; b = b + 1; } stars(); moon(); explosion(); hillsAndGrass(); characterBody(); eyes(); firework(); rocket(); } void characterBody() //Draw Character Head, Body, Legs and Feet { stroke(0); strokeWeight(2); fill(0, characterColourG, 0); rect(180, 320, 60, 80); fill(charSkinR, charSkinG, charSkinB); ellipse(210, 270, 110, 110); fill(0, 0, characterColourB); rect(140, 380, 40, 20); rect(240, 380, 40, 20); fill(characterColourR, 0, 0); quad(150, 360, 140, 360, 140, 380, 160, 380); quad(260, 380, 270, 360, 280, 360, 280, 380); characterColourR = constrain(characterColourR, 80, 130); characterColourG = constrain(characterColourG, 80, 130); characterColourB = constrain(characterColourB, 80, 130); charSkinR = constrain(charSkinR, 90, 140); charSkinG = constrain(charSkinG, 50, 100); charSkinB = constrain(charSkinG, 50, 100); if (mouseX < width/2) //Changes Characters Colour Palette With Mouse Movement { characterColourR = characterColourR - 1; characterColourG = characterColourG - 1; characterColourB = characterColourB - 1; charSkinR = charSkinR - 1; charSkinG = charSkinG - 1; charSkinB = charSkinB - 1; } else { characterColourR = characterColourR + 1; characterColourG = characterColourG + 1; characterColourB = characterColourB + 1; charSkinR = charSkinR + 1; charSkinG = charSkinG + 1; charSkinB = charSkinB + 1; } } void rocket() //Draw Character Rocket With Arms { rotate(); if (rocketAlive == true) { strokeWeight(2); stroke(0); fill(0, 0, 255); rect(200, 340, 20, 60); fill(255, 200, 200); ellipse(200, 370, 20, 20); ellipse(220, 370, 20, 20); } if (mouseX < width/3) //If Mouse On Left Side, Rocket Disappears { rocketAlive = false; } else if (mouseX <= 2*width/3) //If Mouse In Middle, Rocket Stays Intact { rocketAlive = true; } else if (mouseX > 2*width/3) //If Mouse On Right Side, Rocket Disappears { rocketAlive = false; } } void eyes() //Draw Character Eyes That Follow Mouse { int pupilXMove1 = constrain(mouseX, 185, 195); int pupilYMove1 = constrain(mouseY, 245, 255); int pupilXMove2 = constrain(mouseX, 225, 235); int pupilYMove2 = constrain(mouseY, 245, 255); strokeWeight(2); fill(255); ellipse(190, 250, 20, 20); ellipse(230, 250, 20, 20); fill(0); ellipse(pupilXMove1, pupilYMove1, 5, 5); ellipse(pupilXMove2, pupilYMove2, 5, 5); } void rotate() //Rotates Rocket Left Or Right { if (mouseX < width/3) { strokeWeight(2); stroke(0); fill(0, 0, 255); quad(182, 345, 200, 337, 225, 393, 207, 400); fill(255, 200, 200); ellipse(195, 373, 20, 20); ellipse(213, 365, 20, 20); } if (mouseX > 2*width/3) { strokeWeight(2); stroke(0); fill(0, 0, 255); quad(220, 337, 237, 345, 208, 400, 190, 393); fill(255, 200, 200); ellipse(205, 365, 20, 20); ellipse(222, 373, 20, 20); } } void firework() //Firework Shoots Diagonal Left, Right, or Center { if (fireworkAlive == true) { if (mousePressed && mouseX < width/3 && mouseRight == false && mouseMiddle == false || mouseLeft == true) { //If Mouse On Left Side, Shoots Firework Left Only fireX = fireX - 1; fireY = fireY - 3; strokeWeight(10); stroke(150, 0, 0); point(fireX, fireY); mouseLeft = true; } if (mousePressed && mouseX > 2*width/3 && mouseLeft == false && mouseMiddle == false || mouseRight == true) { //If Mouse On Right Side, Shoots Firework Right Only fireX = fireX + 1; fireY = fireY - 3; strokeWeight(10); stroke(150, 0, 0); point(fireX, fireY); mouseRight = true; } if (mousePressed && mouseX > width/3 && mouseX < 2*width/3 && mouseLeft == false && mouseRight == false || mouseMiddle == true) { //If Mouse Is In Centre, Shoots Firework Center Only fireY = fireY - 3; strokeWeight(10); stroke(150, 0, 0); point(fireX, fireY); mouseMiddle = true; } } if (fireY <= 100) //If Firework Reaches A Certain Point, Explosion Replaces It { fireworkAlive = false; explosionAlive = true; } if (fireworkAlive == false && mousePressed && mouseX < width/3) //Allows To Shoot Another Firework Left { fireworkAlive = true; fireX = 210; fireX = fireX - 1; fireY = 390; fireY = fireY - 3; mouseLeft = true; mouseRight = false; mouseMiddle = false; } if (fireworkAlive == false && mousePressed && mouseX > 2*width/3) //Allows To Shoot Another Firework Right { fireworkAlive = true; fireX = 210; fireX = fireX + 1; fireY = 390; fireY = fireY - 3; mouseRight = true; mouseLeft = false; mouseMiddle = false; } if (fireworkAlive == false && mousePressed && mouseX > width/3 && mouseX < 2*width/3) //Allows To Shoot Another Firework Center { fireworkAlive = true; fireX = 210; fireY = 390; fireY = fireY - 3; mouseRight = false; mouseLeft = false; mouseMiddle = true; } } void explosion() //Firework Explosion { if (explosionAlive == true) //Randomly Changes Size In Place { fill((int)random(0, 255), (int)random(0, 255), (int)random(0, 255)); stroke((int)random(0, 255), (int)random(0, 255), (int)random(0, 255)); ellipse(fireX, fireY, (int) random(100, 120), (int)random(100, 120)); } if (mouseButton == LEFT) //Destroys Previous Explosion To Shoot Another Firework { explosionAlive = false; } } void stars() //Stars Randomly Flash In Different Positions { strokeWeight(5); stroke((int)random(0, 255), (int)random(0, 255), 255); point((int)random(5, 399), (int)random(5, 399)); } void moon() //Moon Changes Colour Depending On Mouse Location { fill(moonx); stroke(0); strokeWeight(2); ellipse(40, 0, 100, 100); fill(50); ellipse(20, 0, 20, 20); ellipse(40, 30, 20, 10); ellipse(75, 5, 10, 20); moonx = constrain(moonx, 80, 160); if (mouseX < width/2) { moonx = moonx - 1; } else { moonx = moonx + 1; } } void hillsAndGrass() //Grass And Hills Looped In Background { //Stroke Switches To Match explosion() Stroke for (int i = 0; i < 500; i += 100) { fill(100, hillAndGrassColour, hillAndGrassColour); hillAndGrassColour = constrain(hillAndGrassColour, 20, 50); ellipse(i, 400, 110, 200); } for (int x = 0; x < 500; x += 20) { fill(hillAndGrassColour, 100, hillAndGrassColour); hillAndGrassColour = constrain(hillAndGrassColour, 20, 50); triangle(0 + x, 400, 10 + x, 380, 20 + x, 400); } if (mouseX < width/2) //Changes Hill And Grass Colour With Mouse Movement { hillAndGrassColour = hillAndGrassColour - 1; } else { hillAndGrassColour = hillAndGrassColour + 1; } }