Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//announcing variables
float eyeType = 0;
float hairStyle = 0;
float mouthType = 0;
float clothesStyles = 0;
float extraStuff = 0;

//setup
void setup() 
{
  size(400, 400);
  rectMode(CENTER);
  ellipseMode(CORNERS);
  noStroke();
  smooth();
  frameRate(50);

  println ("Customize your character!");
}

void draw() {

  //draw the background

    //sunny background

    if (mouseX < width/3) {

      background (178 - mouseY/4, 219 - mouseY/4, 255 - mouseY/4);

      //grass

      fill (46, 140, 3);
      rect (200, 370, 400, 80);

      //flowers

      fill (255, 220, 0);
      ellipse (30, 352, 34, 356);
      ellipse (86, 380, 90, 384);
      ellipse (150, 366, 154, 370);
      ellipse (208, 390, 212, 394);
      ellipse (259, 348, 263, 352);
      ellipse (302, 376, 306, 380);
      ellipse (350, 357, 355, 361);
      ellipse (369, 390, 373, 384);

      //sun

      fill (255, 251, 133);
      ellipse (350, 10, 390, 50);
      fill (255, 251, 133, random(50, 255));
      quad (347, 30, 235, -5, 240, 45, 350, 41);
      quad (353, 13, 300, -40, 252, -5, 347, 22);
      quad (362, 5, 355, -5, 380, -5, 375, 5);
      quad (382, 11, 400, -20, 420, 5, 392, 20);
      quad (393, 30, 420, 20, 420, 60, 388, 43);
      quad (385, 48, 400, 70, 400, 130, 372, 52);
      quad (367, 52, 380, 150, 320, 170, 358, 49);
      quad (350, 50, 290, 170, 220, 70, 348, 45);

      //clouds

      fill (255, 255, 255, 100);
      ellipse (-10, 18, 51, 50);
      ellipse (110, -5, 181, 23);
      ellipse (160, 15, 210, 40);
      ellipse (80, 50, 141, 80);
      ellipse (180, 90, 245, 125);
      ellipse (150, 111, 210, 144);
  
  } else if (mouseX < 2*width/3) {

      //sunset sky 

      background (242 - mouseY, 118 - mouseY, 0 - mouseY);

      //sun

      fill (255, 63, 87, random(50, 150));
      ellipse (20, 290, 110, 380);
      fill (255, 63, 87, random(50, 150));
      ellipse (0, 270, 130, 400);
      fill (255, 155, 13, 255);
      ellipse (40, 310, 90, 360);

      //ground

      fill (147, 92, 163);
      rect (200, 370, 400, 80);
    } else {

      //night sky

      background (53 - mouseY/4, 71 - mouseY/4, 140 - mouseY/4);

      //ground

      fill (255);
      rect (200, 370, 400, 80);

      //moon

      ellipse (20, 20, 80, 80);
      fill (53 - mouseY/4, 71 - mouseY/4, 140 - mouseY/4);
      ellipse (50, 30, 90, 65);

      //stars

      fill (255, 255, 255, random(50, 200));
      ellipse (100, -2, 140, 40);
      ellipse (110, 10, 130, 30);
      fill (255, 255, 255, random(50, 200));
      ellipse (150, 70, 200, 120);
      ellipse (163, 80, 190, 110);
      fill (255, 255, 255, random(50, 200));
      ellipse (210, 140, 245, 180);
      ellipse (220, 150, 240, 170);
      fill (255, 255, 255, random(50, 200));
      ellipse (240, 20, 280, 70);
      ellipse (250, 30, 270, 60);
      fill (255, 255, 255, random(50, 200));
      ellipse (290, 90, 330, 127);
      ellipse (300, 97, 320, 120);
      fill (255, 255, 255, random(50, 200));
      ellipse (350, 50, 390, 85);
      ellipse (362, 57, 383, 82);
      fill (255, 255, 255, 255);
      quad(120, 12, 117, 20, 120, 24, 123, 20);
      quad(180, 83, 178, 97, 180, 102, 184, 97);
      quad(231, 157, 229, 160, 231, 164, 233, 160);
      quad(260, 40, 252, 49, 260, 57, 262, 49);
      quad(311, 100, 308, 110, 311, 118, 318, 110);
      quad(378, 60, 370, 70, 378, 79, 380, 70);
    }

  //this draws the character base

  //head and neck

  fill (185, 136, 101);
  rect (277, 200, 8, 18);
  fill (192, 161, 131);
  ellipse (247, 140, 303, 198);
  ellipse (238, 160, 255, 182);
  ellipse (295, 160, 312, 182);

  fill (190, 66, 72, 180);
  ellipse (250, 167, 270, 187);
  ellipse (280, 167, 300, 187);

  //body

  fill (192, 161, 131);
  triangle (277, 204, 277, 213, 243, 213);
  triangle (277, 204, 277, 213, 315, 213);
  quad (255, 213, 248, 300, 310, 300, 302, 213);

  quad (243, 213, 209, 280, 218, 286, 260, 213);
  quad (315, 213, 343, 280, 333, 286, 295, 213);

  quad (248, 300, 240, 360, 260, 365, 270, 300);
  quad (290, 300, 300, 365, 320, 360, 310, 300);

  fill (0);
  quad (254, 220, 252, 250, 306, 250, 302, 220);
  quad (249, 280, 248, 300, 310, 300, 309, 280);

  //this draws the options box

  fill (0, 0, 0, 150);
  rect (50, 240, 60, 180);

  fill (255, 13, 255);
  triangle (40, 170, 40, 190, 60, 180);
  fill (218, 114, 126);
  triangle (40, 200, 40, 220, 60, 210);
  fill (189, 242, 93);
  triangle (40, 230, 40, 250, 60, 240);
  fill (41, 217, 194);
  triangle (40, 260, 40, 280, 60, 270);
  fill (155, 102, 220);
  triangle (40, 290, 40, 310, 60, 300);

  drawEyes();
  drawHair();
  drawMouth();
  drawClothes();
  drawExtra();
  
}

//draw clothes

void drawClothes() {
  
  if (clothesStyles == 1) {
    
    fill (255);
    rect (277, 204, 8, 8);
    triangle (277, 204, 277, 213, 243, 213);
    triangle (277, 204, 277, 213, 315, 213);
    quad (255, 213, 248, 300, 310, 300, 302, 213);
    quad (243, 213, 229, 240, 243, 243, 260, 213);
    quad (315, 213, 326, 240, 311, 243, 295, 213);
    
    fill (0);
    rect (265, 212, 8, 12);
    rect (290, 212, 8, 12);
    quad (255, 217, 240, 310, 318, 310, 302, 217);
    
    quad (245, 320, 240, 360, 260, 365, 268, 320);
    quad (291, 320, 300, 365, 320, 360, 314, 320);
    
    fill (255);
    quad (241, 350, 240, 360, 260, 365, 263, 350);
    quad (297, 350, 300, 365, 320, 360, 318, 350);
    
  } else if (clothesStyles == 2){

    fill (0);
    triangle (277, 204, 277, 213, 243, 213);
    triangle (277, 204, 277, 213, 315, 213);
    quad (255, 213, 248, 300, 310, 300, 302, 213);
    quad (243, 213, 229, 240, 243, 243, 260, 213);
    quad (315, 213, 326, 240, 311, 243, 295, 213);
    
    fill (185, 136, 101);
    rect (277, 200, 8, 8);
    triangle (273, 204, 281, 204, 277, 215);
    
    fill (23, 46, 120);
    quad (248, 300, 240, 360, 260, 365, 270, 300);
    quad (290, 300, 300, 365, 320, 360, 310, 300);
    quad (249, 280, 248, 300, 310, 300, 309, 280);
    
    fill (0);
    quad (241, 350, 240, 360, 260, 365, 263, 350);
    quad (297, 350, 300, 365, 320, 360, 318, 350);
    
    fill (255);
    ellipse (270, 230, 290, 250);
    rect (280, 250, 10, 10);
    
    fill (0);
    ellipse (273, 235, 277, 240);
    ellipse (283, 235, 287, 240);
    triangle (280, 240, 283, 245, 277, 245);
    
  } else if (clothesStyles == 3){
    
    fill (0);
    quad (249, 280, 237, 320, 320, 320, 309, 280);
    
    fill (255, 131, 226);
    triangle (277, 204, 277, 213, 243, 213);
    triangle (277, 204, 277, 213, 315, 213);
    quad (255, 213, 245, 295, 314, 295, 302, 213);

    quad (243, 213, 214, 270, 224, 276, 260, 213);
    quad (315, 213, 339, 270, 327, 275, 295, 213);

    fill (0);
    triangle (271, 204, 277, 204, 274, 212);
    triangle (277, 204, 283, 204, 280, 212);
    
    fill (0);
    quad (241, 350, 240, 360, 260, 365, 263, 350);
    quad (297, 350, 300, 365, 320, 360, 318, 350);
    
    ellipse (260, 220, 280, 240);
    ellipse (275, 220, 295, 240);
    triangle (260, 230, 295, 230, 278, 270); 
  
  }
}

//draw hair

void drawHair() {
  if (hairStyle == 1) {
    fill (0);
    rect (275, 150, 65, 20);
    triangle (303, 145, 247, 145, 247, 170);
    triangle (307, 145, 280, 145, 307, 190);
    quad (235, 160, 255, 160, 260, 250, 230, 230);
    quad (293, 157, 312, 157, 318, 230, 290, 250);
  } else if (hairStyle == 2) {
    fill (255, 167, 180);
    rect (275, 145, 56, 10);

    fill(204, 16, 115); 
    quad (234, 155, 252, 155, 243, 200, 220, 200);
    quad (243, 200, 220, 200, 225, 245, 255, 245);
    quad (225, 245, 255, 245, 255, 290, 225, 290);
    quad (300, 155, 317, 150, 340, 200, 315, 200);
    quad (340, 200, 315, 200, 305, 245, 335, 245);
    quad (305, 245, 335, 245, 340, 290, 305, 290);
    triangle (220, 200, 223, 210, 213, 215);
    triangle (338, 198, 315, 207, 350, 215);

    fill (255, 97, 180);
    ellipse (230, 130, 260, 160);
    ellipse (290, 130, 320, 160);

    fill (255, 167, 180);
    quad (258, 150, 265, 150, 260, 160, 250, 160);
    quad (265, 150, 285, 150, 275, 160, 263, 160);
    quad (280, 150, 290, 150, 300, 160, 285, 160);
  } else if (hairStyle == 3) {
    fill (0, 138, 207);
    ellipse (230, 130, 295, 170);
    ellipse (290, 140, 320, 170);
    quad (230, 150, 275, 150, 275, 210, 230, 210);
    quad (275, 210, 230, 210, 245, 250, 290, 230);
    quad (290, 230, 245, 230, 240, 245, 290, 245);
    quad (305, 155, 320, 155, 340, 245, 300, 250);

    fill (192, 161, 131);
    ellipse (295, 160, 312, 182);

    fill (190, 66, 72, 180);
    ellipse (280, 167, 300, 187);
  } else if (hairStyle == 4) {
    fill (210, 132, 17);
    ellipse (290, 120, 320, 150);
    quad (295, 145, 315, 130, 360, 200, 315, 230);
    quad (360, 200, 315, 230, 310, 320, 365, 250);

    fill (242, 205, 117);
    quad (300, 130, 260, 140, 247, 155, 285, 150);
    triangle (299, 129, 285, 150, 310, 160);
    quad (247, 155, 250, 150, 250, 225, 245, 215);
    quad (310, 160, 293, 150, 293, 260, 320, 220);
    triangle (293, 150, 285, 143, 270, 160);
    triangle (285, 143, 250, 150, 250, 170);
  }
}

//draw eyes

void drawEyes() {
  if (eyeType == 1) {
    fill (255);
    ellipse (263, 160, 271, 170);
    ellipse (279, 160, 287, 170);
  } else if (eyeType == 2) {
    fill (0);
    triangle (260, 160, 265, 162, 264, 158);
    triangle (290, 160, 280, 162, 288, 158);
    fill (255);
    ellipse (263, 160, 271, 170);
    ellipse (279, 160, 287, 170);
  } else if (eyeType == 3) {
    fill (0);
    rect (263, 165, 20, 15);
    rect (288, 165, 20, 15);
    rect (283, 165, 20, 4);
  } else if (eyeType == 4) {
    fill (0);
    ellipse (255, 155, 275, 175);
    ellipse (276, 155, 296, 175);
  } else if (eyeType == 5) {
    fill (0);
    ellipse (255, 155, 275, 175);
    ellipse (276, 155, 296, 175);
    fill (255);
    quad (265, 155, 255, 165, 265, 175, 275, 165);
    quad (286, 155, 276, 165, 286, 175, 296, 165);
  } else if (eyeType == 6) {
    fill(0);
    ellipse (255, 155, 275, 175);
    ellipse (276, 155, 296, 175);
    fill(255);
    ellipse (257, 157, 267, 170); 
    ellipse (263, 157, 273, 170);
    triangle(257, 163, 273, 163, 265, 175);
    ellipse (278, 157, 289, 170); 
    ellipse (284, 157, 294, 170);
    triangle(278, 163, 294, 163, 286, 175);
  }
}

//draw mouth 

void drawMouth() {
  if (mouthType == 1) {

    fill (255, 0, 0);
    triangle (265, 180, 285, 180, 275, 190);
  } else if (mouthType == 2) {

    fill (255, 0, 0);
    triangle (265, 190, 285, 190, 275, 180);
  } else if (mouthType == 3) {

    fill (255, 0, 0);
    ellipse (273, 175, 280, 195);
  } else if (mouthType == 4) {

    fill (255, 0, 0);
    rect (275, 185, 20, 10);
  } else if (mouthType == 5) {

    fill (255, 0, 0);
    ellipse (265, 180, 285, 190);
  }
}

//draw other stuff

void  drawExtra() {
  if (extraStuff == 1) {

    fill (151, 104, 209);
    ellipse (255, 138, 263, 146);
    ellipse (249, 142, 258, 150);
    ellipse (251, 148, 258, 156);
    ellipse (256, 148, 266, 156);
    ellipse (259, 142, 269, 150);
  } else if (extraStuff == 2) {    

    fill (255);
    quad (280, 160, 280, 170, 295, 190, 295, 180);
    quad (280, 190, 280, 180, 295, 160, 295, 170);
  } else if (extraStuff == 3) {

    fill (255, 0, 0);
    triangle (260, 145, 255, 140, 253, 150);
    triangle (290, 145, 295, 140, 297, 150);
  }
}

void mousePressed () {

  //eyes

  if (mouseX >= 40 && mouseX <= 60 && mouseY >= 170 && mouseY <= 190) {
    if (eyeType == 1) {
      println("Change her eyes!");
    }
    eyeType = eyeType+1;
    if (eyeType == 7) {
      eyeType = 1;
    }
  }

  //hair
  
  if (mouseX >= 40 && mouseX <= 60 && mouseY >=200 && mouseY <= 220) {
    if (hairStyle == 1) {
      println("Style her hair!");
    }
    hairStyle = hairStyle+1;
    if (hairStyle == 5) {
      hairStyle = 1;
    }
  }
  if (mouseX >= 40 && mouseX <= 60 && mouseY >= 230 && mouseY <=250) {
    if (mouthType == 1) {
      println("Make her smile!");
    }
    mouthType = mouthType+1;
    if (mouthType == 7) {
      mouthType = 1;
    }
  }
  if (mouseX >= 40 && mouseX <= 60 && mouseY >= 260 && mouseY <=280) {
    if (clothesStyles == 1) {
      println("Dress her up!");
    }
    clothesStyles = clothesStyles+1;
    if (clothesStyles == 4) {
      clothesStyles = 1;
    }
  }
  if (mouseX >= 40 && mouseX <= 60 && mouseY >= 290 && mouseY <=310) {
    if (extraStuff == 1) {
      println("Give her some personality!");
    }
    extraStuff = extraStuff+1;
    if (extraStuff == 5) {
      extraStuff = 1;
    }
  }
}