Your browser does not support the canvas tag.

previous        Show / Hide Source    Download        next
//Title: Kirby Interactive Toy
//Creator: Richard Baldock
//Description: Interactive toy using the character Kirby. Kirby will move left,right,up and down along the screen. 
//Instructions: Use the <>^v Arrow keys to move Kirby around the screen.

//Kirby's Position
float kirbyX = 200;
float kirbyY = 323;
float r = random(0,255);
float g = random(0,255);
float b = random(0,255);

void setup(){
  size(400,400); 
}
 
void draw(){ 
  background(0,150,255);
  
  smooth();

///////////////////////
//Call Draw Functions//
//////////////////////
  drawCurtain();
  drawBorders();
  drawDoors();
  drawStars();
  drawKirby();


  if (keyPressed) {
if (keyCode==LEFT) {
kirbyX -= 5;
}
if (keyCode==RIGHT) {
kirbyX += 5;
}
if (keyCode==UP){
  kirbyY-=5;
}
if (keyCode==DOWN){
  kirbyY+=5;
}
  }
}


void drawKirby(){
  /////////////////////
//Draw ***Kirby***///
////////////////////

//Kirby Outline
stroke(247,84,84);
 fill(252,155,171);   
  ellipse(kirbyX,kirbyY,35,35);
 
//Kirby's Cheeks
 noStroke();
  fill(242,92,115);
  ellipse(kirbyX+10,kirbyY+4,10,5);
  ellipse(kirbyX-10,kirbyY+4,10,5);
 
//Kirby's Eyes
noStroke();
 fill(0);
  ellipse(kirbyX-8,kirbyY-5,5,12);
  ellipse(kirbyX+8,kirbyY-5,5,12);
 fill(255);
  ellipse(kirbyX-8,kirbyY-8,4,6);
  ellipse(kirbyX+8,kirbyY-8,4,6); 
  
//Kirby's mouth  
 fill(250,100,115);
  ellipse(kirbyX,kirbyY+7,4,3);
}


///////////////////////
// DRAW THE CURTAINS //
//////////////////////

void drawCurtain(){
  stroke(0);
 fill(r,g,b);
 rect(60,0,10,10);
 rect(70,0,10,8);
 rect(80,0,10,10);
 rect(90,0,10,10);
 rect(100,0,10,8);
 rect(110,0,10,10);
 rect(120,0,10,10);
 rect(130,0,10,8);
 rect(140,0,10,10);
 rect(150,0,10,10);
 rect(160,0,10,8);
 rect(170,0,10,10);
 rect(180,0,10,10);
 rect(190,0,10,8);
 rect(200,0,10,10);
 rect(210,0,10,10);
 rect(220,0,10,8);
 rect(230,0,10,10);
 rect(240,0,10,10);
 rect(250,0,10,8);
 rect(260,0,10,10);
 rect(270,0,10,8);
 rect(280,0,10,10);
 rect(290,0,10,10);
 rect(300,0,10,8);
 rect(310,0,10,10);
 rect(320,0,10,10);
 rect(330,0,10,8);
 rect(340,0,10,10);
}

/////////////////////
//Draw Borders///////
////////////////////

void drawBorders(){

  //Draw Top Left Border
stroke(0);
 fill(189,82,20);
  rect(0,0,30,20);
  rect(30,0,30,20);
  rect(0,20,30,20);
  rect(30,20,30,20);
  rect(0,40,60,20);
  rect(0,60,30,20);
  rect(30,60,30,20);
  rect(0,100,30,20);
  rect(30,100,30,20);
  rect(0,120,40,20);
  rect(40,120,20,20);
  rect(0,80,60,20);
  rect(0,140,20,10);
  rect(0,150,20,10);
  
// Draw Top Right Border
  rect(340,0,60,20);
  rect(340,20,60,20);
  rect(340,40,60,20);
  rect(340,60,40,20);
  rect(380,60,20,20);
  rect(340,80,60,20);
  rect(340,100,60,20);
  rect(340,120,30,20);
  rect(370,120,30,20);
  rect(380,140,20,10);
  rect(380,150,20,10);

//Draw Bottom Left Border
  rect(0,280,80,20);
  rect(0,300,60,20);
  rect(60,300,20,20);
  rect(0,320,20,20);
  rect(20,320,40,20);
  rect(60,320,20,20);
  rect(0,340,80,20);
  rect(0,360,80,20);
  rect(0,380,40,20);
  rect(40,380,40,20);

//Draw Bottom Middle Border
  rect(80,340,80,20);
  rect(80,360,60,20);
  rect(80,380,80,20);
  rect(160,340,120,20);
  rect(140,360,80,20);
  rect(160,380,40,20);
  rect(280,340,40,20);
  rect(220,360,20,20);
  rect(200,380,100,20);
  rect(240,360,80,20);
  rect(300,380,20,20);

//Draw Bottom Right Border
  rect(320,280,60,20);
  rect(380,280,20,20);
  rect(320,300,60,20);
  rect(360,300,40,20);
  rect(320,320,50,20);
  rect(370,320,30,20);
  rect(320,340,80,20);
  rect(320,360,80,20);
  rect(320,380,80,10);
  rect(320,390,80,10);

//Middle Platform
  rect(150,260,100,20);

//Draw Dots On Left & Right Borders
noStroke();
 fill(0);
  ellipse(25,8,3,3);
  ellipse(25,16,3,3);
  ellipse(25,28,3,3);
  ellipse(25,36,3,3);
  ellipse(25,68,3,3);
  ellipse(25,76,3,3);
  ellipse(36,70,3,3);
  ellipse(56,70,3,3);
  ellipse(25,108,3,3);
  ellipse(25,116,3,3);
  ellipse(56,110,3,3);
  ellipse(36,126,3,3);
  ellipse(36,136,3,3);
  ellipse(56,130,3,3);
  ellipse(16,145,3,3);
  ellipse(345,10,3,3);
  ellipse(395,5,3,3);
  ellipse(395,15,3,3);
  ellipse(345,30,3,3);
  ellipse(376,65,3,3);
  ellipse(376,75,3,3);
  ellipse(390,85,3,3);
  ellipse(390,95,3,3);
  ellipse(345,110,3,3);
  ellipse(365,125,3,3);
  ellipse(365,135,3,3);
  ellipse(385,145,3,3);
  ellipse(385,155,3,3);
  
//Draw Dots on Bottom Borders (Left to Right)
  ellipse(5,290,3,3);
  ellipse(75,285,3,3);
  ellipse(75,295,3,3);
  ellipse(25,325,3,3);
  ellipse(25,335,3,3);
  ellipse(55,325,3,3);
  ellipse(55,335,3,3);
  ellipse(5,350,3,3);
  ellipse(75,350,3,3);
  ellipse(75,365,3,3);
  ellipse(75,375,3,3);
  ellipse(35,385,3,3);
  ellipse(35,395,3,3);
  ellipse(45,390,3,3);
  ellipse(85,350,3,3);
  ellipse(155,345,3,3);
  ellipse(155,355,3,3);
  ellipse(135,365,3,3);
  ellipse(135,375,3,3);
  ellipse(165,350,3,3);
  ellipse(275,345,3,3);
  ellipse(275,355,3,3);
  ellipse(215,365,3,3);
  ellipse(215,375,3,3);
  ellipse(195,385,3,3);
  ellipse(195,395,3,3);
  ellipse(235,365,3,3);
  ellipse(235,375,3,3);
  ellipse(285,350,3,3);
  ellipse(315,350,3,3);
  ellipse(305,390,3,3);
  ellipse(325,290,3,3);
  ellipse(375,285,3,3);
  ellipse(375,295,3,3);
  ellipse(385,290,3,3);
  ellipse(325,305,3,3);
  ellipse(325,315,3,3);
  ellipse(375,325,3,3);
  ellipse(375,335,3,3);
  ellipse(325,350,3,3);
  ellipse(395,350,3,3);
  ellipse(325,370,3,3);
  ellipse(395,365,3,3);
  ellipse(395,375,3,3);
  ellipse(325,385,3,3);
  ellipse(325,395,3,3);
  }
  
//////////////////
//Draw Doors//////
//////////////////

void drawDoors(){
  //Draw Wings on Rainbow

noStroke();
 fill(255);
  ellipse(210,190,30,5);
  ellipse(210,195,25,5);
  ellipse(190,190,30,5);
  ellipse(190,195,30,5);

//Draw Rainbow  
 fill(255,0,0);
  ellipse(200,200,40,30);
 fill(249,227,33);
  ellipse(200,200,30,25);
 fill(0,255,0);
  ellipse(200,200,20,20);
 fill(0,0,244);
  ellipse(200,200,10,15);
  
//Draw Middle Door Border
stroke(0);
 fill(151,17,17);
   rect(180,200,40,60);
  fill(249,227,33);
   rect(170,200,10,60);
  rect(220,200,10,60); 

//Draw Mirror Doors Yellow Border 
   
//Left Door Border
noStroke();
 fill(249,227,33);
  ellipse(40,240,40,40);
  rect(20,240,40,40);

//Middle Door Border
  ellipse(200,230,40,60);

//Right Door Border
  ellipse(360,240,40,40);
  rect(340,240,40,40);

//Draw Mirror Doors Blue Mirror Area

//Left Door Mirror
noStroke();
 fill(7,103,246);
  ellipse(40,241,34,37);
  rect(24,240,33,37);

//Middle Door Mirror
  ellipse(200,230,35,55);

//Right Door Mirror
  ellipse(360,241,34,37);
  rect(344,240,33,37);
  
  
////////////////////////  
//Draw Shine on mirror//
///////////////////////

//Left Door
 stroke(255);
fill(255,255,255);
  line(23,258,38,276);
  line(23,243,56,278);
  line(28,229,56,257);
  line(34,220,56,240);

//Right Door
  line(343,258,358,276);
  line(343,243,376,276);
  line(348,229,376,257);
  line(354,220,376,240);

//Middle Door
 line(200,203,190,210);
 line(200,203,210,210);
 line(190,210,200,220);
 line(210,210,200,220);
 line(200,220,190,230);
 line(200,220,210,230);
 line(210,230,190,250);
 line(190,230,210,250);
 line(190,250,200,257);
 line(210,250,200,257);
}

////////////////////////
//Draw Stars Over Doors//
///////////////////////

void drawStars(){
//Draw Stars

//Left Star

//Draw Glow // THIS GLOW EFFECT IS NOT MY OWN, TAKEN FROM NICHOLAS PHAN'S DRAGON INTERACTIVE DRAWING

//Glow 1   
    fill(249,227,50,75);
    ellipse(40,210, 40 + sin(frameCount * .08) * 5, 40 + sin(frameCount * .08) * 5);
 
 //Glow 2
    fill(249,227,50,60);
    ellipse(40,210, 60 + cos(frameCount * .08) * 5, 60 + cos(frameCount * .08) * 5);

noStroke();
 fill(249,227,33);
  triangle(26,207,54,207,40,212);
  triangle(40,200,30,220,40,212);
  triangle(50,220,40,200,40,212);

//Right Star
  triangle(346,207,374,207,360,212);
  triangle(360,200,350,220,360,212);
  triangle(370,220,360,200,360,212);


//Glow 1   
stroke(255);
    fill(249,227,50,75);
    ellipse(360,210, 40 + sin(frameCount * .08) * 5, 40 + sin(frameCount * .08) * 5);
 
 //Glow 2
    fill(249,227,50,60);
    ellipse(360,210, 60 + cos(frameCount * .08) * 5, 60 + cos(frameCount * .08) * 5);
}