Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//Jack-O-Latern Creator By Emily Baik//
//It's Halloween! Create your own Jack-O-Latern using the buttons below!//
//Code referenced from Monster Maker Interactive Toy by Peter Francis

//Instructions//
//CLick on one of the three buttons on the bar bellow to create a Jack-O-Latern//
//Button #1: Changes Faces
//Button #2: Changes Stems
//Button #3: Randomizer 


// VARIABLES FOR PUMPKIN DESIGN //

int pumpkinFace=0;
int pumpkinStem=0;
float pumpkinColourR=242;
float pumpkinColourG=116;
float pumpkinColourB=5;

//BACKGROUND VARIABLE//
int hillsize=400;

                             
void setup(){
  
  size(400,400);
  frameRate(20); //animation of Moon/Stars
}


void draw(){
  
  background(68,53,96);
  
  //Game Background Functions//  
  drawbgGraveyard();
  drawfgGraveyard();
  drawFence();
  drawMoon();
  drawDesignBar();
 
  //Pumpkin Design Functions//
  drawpumpkin();
  drawpumpkinFace();
  drawpumpkinStem();
}


void drawbgGraveyard(){
  
  //Background Hill//
  noStroke();
  fill(55,45,77);
  rect(0,160,hillsize,hillsize);
  
  //Background Tombstones WORK//
  fill(21,17,30);
  noStroke();
  //BG Tombstone 1//
  ellipse(160,170,20,25);
  rect(150,170,20,20); 
  
  //BG Tombstone 2//
  ellipse(62,147,15,20);
  rect(55,147,15,15); 
  
  //BG Tombstone 3//
  ellipse(260,190,20,25);
  rect(250,190,20,20);
  
  //BG Tombstone 4//
  ellipse(358,160,17,23);
  rect(350,160,17,18);
  
  //BG Tombstone 5//
  ellipse(390,205,20,25);
  rect(380,205,20,20);  
}


void drawFence(){
   
 //Background Fence WORK
 //Repeated in order to get equal spacing b/w fence posts
 
  for(int i=0; i<400;i+=10){
  stroke(0);
  strokeWeight(1.5);
  line(i,135,i,159);
  }
  
  strokeWeight(1);
  rect(0,141,400,1); 
}


void drawMoon(){
  
  //Moon WORK
  noStroke();
  fill(255,255,255);
  ellipse(320,50,60,60); 
  
  //Eclipse Effect
  fill(68,53,96); 
  ellipse(335,43,45,45); 
  
  //Moon Glow
  fill(211,243,255,70);
  ellipse(318,50,75,75);
  fill(211,243,255,50);
  ellipse(318,50,sin(frameCount/24.5)*90, sin(frameCount/24.5)*90);
  
  //Stars
  fill(252,245,209);
  ellipse(242,33,sin(frameCount/14.5)*3, sin(frameCount/14.5)*3);
  ellipse(369,15,sin(frameCount/14.5)*3, sin(frameCount/14.5)*3);
  ellipse(364,90,sin(frameCount/14.5)*3, sin(frameCount/14.5)*3);
  ellipse(185,86,sin(frameCount/14.5)*3, sin(frameCount/14.5)*3);
  ellipse(253,119,sin(frameCount/14.5)*3, sin(frameCount/14.5)*3);
  ellipse(115,18,sin(frameCount/14.5)*3, sin(frameCount/14.5)*3);
  ellipse(73,106,sin(frameCount/14.5)*3, sin(frameCount/14.5)*3);
  ellipse(27,51,sin(frameCount/14.5)*3, sin(frameCount/14.5)*3);
}


void drawfgGraveyard(){
  
   //Foreground Hill//
  noStroke();
  fill(45,37,63);
  rect(0,230,hillsize,hillsize);
  
  //Foreground Tombstone(s) WORK//
  fill(21,17,30);
  
  //FG Tombstone 1//
  ellipse(335,240,70,75);
  rect(300,240,70,70);
  rect(330,176,5,40);
  rect(320,185,25,5);
  
  //FG Tombstone 2//
  ellipse(70,210,70,75);
  rect(35,210,70,70);  
}


void drawDesignBar(){
  
  //Design Bar WORK
  noStroke();
 
  //Main Bar Border
  fill(252,168,41);
  rect(50,350,300,40,10); 
  
  //Main Bar Colour
  fill(253,204,130); 
  rect(60,355,280,30,5); 
    
  //Option Buttons
  fill(251,174,89);
  noStroke();
  
   for(int i=145; i<250;i+=40){
  noStroke();
  rect(i,360,20,20);
  }
  }
  
  
void drawpumpkin(){
  
    //Pumpkin WORK
    noStroke();
    fill(pumpkinColourR,pumpkinColourG,pumpkinColourB);
    
    //Main Pumpkin Body
    ellipse(185, 290, 120, 95);
    ellipse(215, 290, 120, 95);
  }
  
  
  //FACE OPTIONS//
  
void drawpumpkinFace(){
  
    //Pumpkin Face WORK
    fill(84,19,0);
    if (pumpkinFace==0){
      
    triangle(166,268,155,281,177,281);
    triangle(233,268,222,281,244,281);
    ellipse(200,310,80,30);
      
      //Cover: meant to overlap and help create a more specific shape
      fill(242, 116, 5);
    ellipse(200,298,85,25);
    triangle(174,305,180,317,190,304); 
    triangle(210,305,220,317,225,304); 
      
  } 
    else if (pumpkinFace==1) {
    fill(84,19,0);
    ellipse(173,270,25,25);
    ellipse(220,270,25,25);
    triangle(180,297,210,297,196,315);
    
    //Cover
    fill(pumpkinColourR,pumpkinColourG,pumpkinColourB);
    ellipse(225,265,15,15);
    ellipse(177,265,15,15);
   
  }
  
    else if (pumpkinFace==2){
    triangle(195,276,160,255,160,280);
    triangle(205,276,240,255,240,280);
    rect(165,300,70,20);
     
     //Cover
    fill(pumpkinColourR,pumpkinColourG,pumpkinColourB);
    triangle(165,300,175,310,180,300); 
    triangle(220,300,225,310,235,300); 
  }
  
    else if (pumpkinFace==3){
    ellipse(170,270,50,30);
    ellipse(230,270,50,30);
    
    //Cover
    fill(pumpkinColourR,pumpkinColourG,pumpkinColourB);
    ellipse(230,273,50,30);
    ellipse(170,273,50,30);
    
    //Pupils
    fill(84,19,0);
    ellipse(187,268,15,15);
    ellipse(247,268,15,15);
    
    //Nose
    stroke(84,19,0);
    strokeWeight(2);
    line(197,273,197,291);
    
    noStroke();
    ellipse(196,297,15,12);
    fill(pumpkinColourR,pumpkinColourG,pumpkinColourB);
    ellipse(199,297,15,12);
    
    //Mouth
    fill(84,19,0);
    ellipse(200,315,60,20);
    
    fill(pumpkinColourR,pumpkinColourG,pumpkinColourB);
    ellipse(200,312,63,20);
    
  }
  
    else if (pumpkinFace==4){
    ellipse(170,268,50,20);
    ellipse(225,268,50,20);
    ellipse(200,310,75,20);
    
    //Cover
    fill(pumpkinColourR,pumpkinColourG,pumpkinColourB);
    rect(169,258,8,20);
    rect(220,258,8,20);
  }
}
  
  //STEM OPTIONS///
void drawpumpkinStem(){
    fill(96,63,18);
    if (pumpkinStem==0){
    triangle(199,243,203,228,193,227);
     
    }
    else if (pumpkinStem==1) {
      triangle(199,243,185,215,203,215);
    }
    else if (pumpkinStem==2){
      triangle(199,243,210,215,223,215);
    }
    else if (pumpkinStem==3){
      triangle(199,243,185,215,200,225);
    }
  }
  
  
  //BUTTONS//
void mousePressed(){
    
  // DESIGN OPTIONS // 
    if(mouseX>146 && mouseX<163 && mouseY>360 && mouseY<380){
      pumpkinFace+=1;
      
      if(pumpkinFace==5){
        pumpkinFace=0;
      }   
   }
  
    if(mouseX>185 && mouseX<204 && mouseY>360 && mouseY<380){
      pumpkinStem+=1;
  
      if(pumpkinStem==4){
        pumpkinStem=0;
    }    
  }
  
  // RANDOM FUNCTION///
   if(mouseX>227 && mouseX<244 && mouseY>360 && mouseY<380){ 
  pumpkinFace=int(random(0,5));
  }
   
   if(mouseX>227 && mouseX<244 && mouseY>360 && mouseY<380){ 
    pumpkinStem=int(random(0,3)); 
   }  
 }