/* Interactive Drawing Title: Squirtle VS Diglett Submission Date: September 18th, 2018 Created By: Patrick Sakamoto */ void setup () { //Set canvas size to 400x400 pixels. size(400, 400); } void draw() { //Set framerate to 60FPS. frameRate(60); //Environment //Background (Sky Blue) background(0, 157, 255); rectMode(CORNERS); ellipseMode(CENTER); //Grass field. (Green gradient, no stroke to prevent blockiness, colour changes to create the illusion of distance.) noStroke(); fill(46, 185, 0); rect(0, 75, 400, 400); fill(29, 177, 0); rect(0, 125, 400, 400); fill(27, 170, 0); rect(0, 175, 400, 400); fill(25, 162, 0); rect(0, 225, 400, 400); fill(23, 155, 0); rect(0, 275, 400, 400); fill(21, 148, 0); rect(0, 325, 400, 400); //Patches of lighter grass. fill(158, 218, 93); ellipse(40, 180, 120, 40); fill(140, 218, 100); ellipse(340, 280, 210, 40); //Player stage. stroke(199, 157, 102); fill(204, 168, 121); ellipse(0, 450, 500, 250); stroke(199, 157, 56); fill(221, 193, 155); ellipse(0, 450, 400, 200); //Enemy stage. stroke(141, 84, 56); fill(222, 170, 111); ellipse(305, 120, 150, 50); //Player HP. stroke(0); fill(255); rect(225, 300, 375, 350); fill(104, 244, 18); rect(250, 330, 365, 340); //Enemy HP. stroke(0); fill(255); rect(25, 50, 175, 100); fill(104, 244, 18); rect(50, 80, 165, 90); //End of Environment //Diglett rectMode(CORNERS); ellipseMode(CORNER); strokeWeight(2); stroke(0); //Body fill(199, 162, 130); rect(280, mouseY*0.1+50, 330, 120); arc(280, mouseY*0.1+37, 50, 30, PI, 2*PI); //Nose ellipseMode(CENTER); fill(255, 208, 244); ellipse(305, mouseY*0.1+75, 25, 15); //Eyes fill(0); ellipse(295, mouseY*0.1+56, 4, 10); ellipse(315, mouseY*0.1+56, 4, 10); //Pebbles+Rocks rectMode(CENTER); fill(160, 158, 160); rect(330, 120, 20, 10); rect(280, 120, 10, 15); rect(305, 120, 20, 20); triangle(280, 120, 300, 110, 295, 135); triangle(315, 130, 300, 110, 325, 115); //End of Diglett //Bubbles strokeWeight(3); stroke(183, 227, 247); fill(183, 227, 247, 180); //Bubble size scales with Y-axis to create illusion of distance. ellipse(mouseX, mouseY, mouseY*0.15, mouseY*0.15); ellipse(mouseX*0.95, mouseY*0.95+40, mouseY*0.15+10, mouseY*0.15+10); ellipse(mouseX*0.82, mouseY*0.82+60, mouseY*0.15+20, mouseY*0.15+20); ellipse(mouseX*0.60+30, mouseY*0.60+140, mouseY*0.15+30, mouseY*0.15+30); //End of Bubbles //Squirtle ellipseMode(CENTER); //Head stroke(0); strokeWeight(3); fill(144, 207, 225); ellipse(mouseX*0.1+80, mouseY*0.1+275, 90, 90); //Eye fill(0); ellipse(mouseX*0.1+95, mouseY*0.1+260, 12, 12); //Shell details. stroke(0); strokeWeight(2); fill(255); ellipse(mouseX*0.1+70, mouseY*0.1+375, 40, 140); fill(194, 133, 110); arc(mouseX*0.1+60, mouseY*0.1+375, 100, 130, HALF_PI, PI+HALF_PI); // Left Arm here for Layering strokeWeight(2); fill(144, 207, 225); arc(mouseX*0.1+85, mouseY*0.1+350, 70, 30, PI+HALF_PI, 2*PI+HALF_PI); //Shell Continued fill(226, 213, 183); arc(mouseX*0.1+80, mouseY*0.1+375, 30, 130, PI+HALF_PI, PI*2+HALF_PI); strokeWeight(4); line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+40, mouseY*0.1+400); line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+20, mouseY*0.1+340); line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+58, mouseY*0.1+340); //Right Arm strokeWeight(2); fill(144, 207, 225); arc(mouseX*0.1+90, mouseY*0.1+360, 70, 30, PI+HALF_PI, 2*PI+HALF_PI); //End of Squirtle } //Key Press Message void keyPressed(){ println("Squirtle used Bubble!"); } //Clickable Interaction (Bubble Pop!) //Copies previous draw coordinates to ensure continuity of mouse movement and mouse clicks. void mousePressed(){ frameRate(1); println("It's SUPER EFFECTIVE!!"); //Environment //Background (Sky Blue) background(0, 157, 255); rectMode(CORNERS); ellipseMode(CENTER); //Grass field. (Green gradient, no stroke to prevent blockiness.) noStroke(); fill(46, 185, 0); rect(0, 75, 400, 400); fill(29, 177, 0); rect(0, 125, 400, 400); fill(27, 170, 0); rect(0, 175, 400, 400); fill(25, 162, 0); rect(0, 225, 400, 400); fill(23, 155, 0); rect(0, 275, 400, 400); fill(21, 148, 0); rect(0, 325, 400, 400); //Patches of lighter grass. fill(158, 218, 93); ellipse(40, 180, 120, 40); fill(140, 218, 100); ellipse(340, 280, 210, 40); //Player stage. stroke(199, 157, 102); fill(204, 168, 121); ellipse(0, 450, 500, 250); stroke(199, 157, 56); fill(221, 193, 155); ellipse(0, 450, 400, 200); //Enemy stage. stroke(141, 84, 56); fill(222, 170, 111); ellipse(305, 120, 150, 50); //Player HP. stroke(0); fill(255); rect(225, 300, 375, 350); fill(104, 244, 18); rect(250, 330, 365, 340); //Enemy HP Changes based on mouse position, turns red as a "damaged" HP bar. stroke(0); fill(255); rect(25, 50, 175, 100); fill(255, 0, 0); rect(mouseX/7.5-mouseY/7.5+110, 80, 165, 90); //End of Environment //Diglett rectMode(CORNERS); ellipseMode(CORNER); strokeWeight(2); stroke(0); //Body fill(199, 162, 130); rect(280, mouseY*0.1+50, 330, 120); arc(280, mouseY*0.1+37, 50, 30, PI, 2*PI); //Nose ellipseMode(CENTER); fill(255, 208, 244); ellipse(305, mouseY*0.1+75, 25, 15); //Eyes (" > < " variation for getting hit by attack) stroke(0); line(298, mouseY*0.1+56, 294, mouseY*0.1+53); line(298, mouseY*0.1+56, 294, mouseY*0.1+59); line(312, mouseY*0.1+56, 316, mouseY*0.1+53); line(312, mouseY*0.1+56, 316, mouseY*0.1+59); //Pebbles+Rocks rectMode(CENTER); fill(160, 158, 160); rect(330, 120, 20, 10); rect(280, 120, 10, 15); rect(305, 120, 20, 20); triangle(280, 120, 300, 110, 295, 135); triangle(315, 130, 300, 110, 325, 115); //End of Diglett //Bubble Pop strokeWeight(3); stroke(183, 227, 247); fill(183, 227, 247, 180); // Uses ellipse centres as points of reference for pop locations. line(mouseX-15, mouseY-15, mouseX+15, mouseY+15); line(mouseX-15, mouseY+15, mouseX+15, mouseY-15); line(mouseX, mouseY+15, mouseX, mouseY-15); line(mouseX+15, mouseY, mouseX-15, mouseY); line(mouseX*0.95, mouseY*0.95+60, mouseX*0.95, mouseY*0.95+20); line(mouseX*0.95+20, mouseY*0.95+40, mouseX*0.95-20, mouseY*0.95+40); line(mouseX*0.95+20, mouseY*0.95+20, mouseX*0.95-20, mouseY*0.95+60); line(mouseX*0.95-20, mouseY*0.95+20, mouseX*0.95+20, mouseY*0.95+60); line(mouseX*0.82, mouseY*0.82+30, mouseX*0.82, mouseY*0.82+90); line(mouseX*0.82+30, mouseY*0.82+60, mouseX*0.82-30, mouseY*0.82+60); line(mouseX*0.82+30, mouseY*0.82+90, mouseX*0.82-30, mouseY*0.82+30); line(mouseX*0.82-30, mouseY*0.82+90, mouseX*0.82+30, mouseY*0.82+30); line(mouseX*0.60+30, mouseY*0.60+80, mouseX*0.60+30, mouseY*0.60+200); line(mouseX*0.60+90, mouseY*0.60+140, mouseX*0.60-30, mouseY*0.60+140); line(mouseX*0.60+90, mouseY*0.60+80, mouseX*0.60-30, mouseY*0.60+200); line(mouseX*0.60-30, mouseY*0.60+80, mouseX*0.60+90, mouseY*0.60+200); //End of Bubbles //Squirtle ellipseMode(CENTER); //Head stroke(0); strokeWeight(3); fill(144, 207, 225); ellipse(mouseX*0.1+80, mouseY*0.1+275, 90, 90); //Eye fill(0); ellipse(mouseX*0.1+95, mouseY*0.1+260, 12, 12); //Shell details. stroke(0); strokeWeight(2); fill(255); ellipse(mouseX*0.1+70, mouseY*0.1+375, 40, 140); fill(194, 133, 110); arc(mouseX*0.1+60, mouseY*0.1+375, 100, 130, HALF_PI, PI+HALF_PI); // Left Arm here for Layering strokeWeight(2); fill(144, 207, 225); arc(mouseX*0.1+85, mouseY*0.1+350, 70, 30, PI+HALF_PI, 2*PI+HALF_PI); //Shell Continued fill(226, 213, 183); arc(mouseX*0.1+80, mouseY*0.1+375, 30, 130, PI+HALF_PI, PI*2+HALF_PI); strokeWeight(4); line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+40, mouseY*0.1+400); line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+20, mouseY*0.1+340); line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+58, mouseY*0.1+340); //Right Arm strokeWeight(2); fill(144, 207, 225); arc(mouseX*0.1+90, mouseY*0.1+360, 70, 30, PI+HALF_PI, 2*PI+HALF_PI); //End of Squirtle }