//Alien Invasion\\ //Joseph Tran\\ //Student Number: 991520039\\ //Objective: Shoot the attacking aliens!!!\\ //Instructions: move the crosshair with the mouse. Click the mouse to fire the laser.\\ //global variables float saucerX = random(30,400); float saucerY = random(40,260); int moveX = 1; int moveY = 30; int saucerSizeX = 60; int saucerSizeY = 20; int score = 1; void setup () { size (400,400); noCursor(); noStroke(); } void draw () { background (255); //setting up functions drawBackground(); drawTreeBark(); drawTrees(); drawSaucer(); drawLaserCannon(); drawLaser(); drawCrosshair(); laserFunction(); updateSaucer(); } void drawBackground () { //draw the night sky noStroke() ; fill (102,74,189); rect (0,320,width,80); fill (81,59,150); rect (0,240,width,80); fill (65,47,120); rect (0,160,width,80); fill (56,41,105); rect (0,80,width,80); fill (47,34,87); rect (0,0,width,80); } void drawTreeBark () { //local variable for the tree bark float barkDrawingPositionX = 15; noStroke(); fill (116,56,49); //loop for the tree bark while (barkDrawingPositionX<width) { rect (barkDrawingPositionX,380,10,20); barkDrawingPositionX = barkDrawingPositionX + 40; } } void drawTrees () { //local variable for the tree float treeDrawingPositionX = 0; noStroke() ; fill (46,192,8); //loop for the tree while (treeDrawingPositionX<width) { triangle (treeDrawingPositionX,320,treeDrawingPositionX+20,300,treeDrawingPositionX+40,320); triangle (treeDrawingPositionX,340,treeDrawingPositionX+20,320,treeDrawingPositionX+40,340); triangle (treeDrawingPositionX,360,treeDrawingPositionX+20,340,treeDrawingPositionX+40,360); triangle (treeDrawingPositionX,380,treeDrawingPositionX+20,360,treeDrawingPositionX+40,380); treeDrawingPositionX+=40; } } void drawSaucer () { noStroke(); //upper saucer fill (168,191,204); ellipse (saucerX+moveX,saucerY-40,saucerSizeX-30,saucerSizeY+10); //lower saucer fill (133,151,161); ellipse (saucerX+moveX,saucerY-moveY,saucerSizeX,saucerSizeY); //saucer window fill (24,34,166); rect (saucerX-10,saucerY-50,saucerSizeX-38,saucerSizeY-15); } void drawLaserCannon () { noStroke(); fill (127); //Bottom Base rect (mouseX+-30,360,60,40); triangle (mouseX+-60,height,mouseX+-30,360,mouseX+-30,height); triangle (mouseX+30,360,mouseX+30,height,mouseX+60,height); //Top Base rect (mouseX+-10,330,20,30); rect (mouseX+-20,340,10,30); rect (mouseX+10,340,10,30); triangle (mouseX+-20,340,mouseX+-10,330,mouseX+-10,340); triangle (mouseX+10,330,mouseX+10,340,mouseX+20,340); //Tip rect (mouseX+-5,280,10,50); triangle (mouseX+-5,280,mouseX+-10,290,mouseX+-5,290); triangle (mouseX+5,280,mouseX+5,290,mouseX+10,290); triangle (mouseX+-10,290,mouseX+-5,290,mouseX+-5,300); triangle (mouseX+5,290,mouseX+10,290,mouseX+5,300); //outlines of the cannon stroke(0); strokeWeight(1); line (mouseX+-60,height,mouseX+-30,360); line (mouseX+-30,360,mouseX+30,360); line (mouseX+30,360,mouseX+60,height); line (mouseX+-20,360,mouseX+-20,340); line (mouseX+20,360,mouseX+20,340); line (mouseX+-20,340,mouseX+-10,330); line (mouseX+10,330,mouseX+20,340); line (mouseX+-10,330,mouseX+10,330); line (mouseX+-5,300,mouseX+-5,330); line (mouseX+5,300,mouseX+5,330); line (mouseX+-5,300,mouseX+5,300); line (mouseX+-5,280,mouseX+5,280); line (mouseX+-10,290,mouseX+-5,300); line (mouseX+-10,290,mouseX+-5,280); line (mouseX+5,300,mouseX+10,290); line (mouseX+5,280,mouseX+10,290); line (mouseX+-10,310,mouseX+10,310); line (mouseX+-10,320,mouseX+10,320); } void drawLaser() { //laser if (mousePressed) { if (mouseY>=280) { mouseY=280; } noStroke(); fill (110,248,255); ellipse (mouseX,280,10,10); stroke(110,248,255); strokeWeight(3); line (mouseX,280,mouseX,mouseY); } } void drawCrosshair () { //mouseY will not go over 280 if (mouseY>=280) { mouseY=280; } //crosshair shape noStroke(); fill (25,212,35); ellipse (mouseX,mouseY,10,10); rect (mouseX+10,mouseY+-5,20,10); rect (mouseX+-30,mouseY+-5,20,10); rect (mouseX+-5,mouseY+10,10,20); rect (mouseX+-5,mouseY+-30,10,20); } void laserFunction() { //if laser cannon shoots saucer, saucer disappears if (mouseX>=saucerX-30 && mouseX<=saucerX+30 && mouseY>=saucerY-40 && mouseY<=saucerY-20 && mousePressed) { println ("Pew! Aliens Destroyed:"+score++); //saucer relocates outside grid saucerX= -250; saucerY= 800; //explosion on impact fill (255,0,0); ellipse (mouseX,mouseY,50,50); fill (255,199,16); ellipse (mouseX,mouseY,40,40); } } void updateSaucer() { //respawn another saucer when laser cannon destroys one if (saucerX<width && saucerY>height) { //new saucer is randomly drawn when saucer relocates outside grid saucerX = random(30,400); saucerY = random(40,260); } } //references: //http://www-acad.sheridanc.on.ca/PROG14998/2017/interactive-toy/jiveen_liew_interactive_toy/index.html //http://www-acad.sheridanc.on.ca/PROG14998/2017/interactive-toy/jonah_gonzalez_martinez_interactive_toy/index.html //http://www-acad.sheridanc.on.ca/PROG14998/2017/interactive-toy/alexander_vaucrosson_interactive_toy/index.html