Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
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
  
}