Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//Vogel Kak Sim
//Release your unending stream of excrement on the passerby! A and D to move, SPACE to defecate!

//Peyton Blake
//The First of October of the Year Two Thousand and Eighteen


//variables

int birdX = 200;
int birdSpeed = 5;
float kakperson1X = 0;
float kakY = 100;
int kakTime = 0;
int kakPerson1White = 0;
int kakX = birdX;
int score = 0;
int kakPersonSpeed = 1;

//clouds variables

//First cloud
float cloudHeight1 = random(5, 10);
float cloudWidth1 = random(15, 30);
float cloud1X = 0;
float cloud1Y = random(1, 300);

//Second cloud
float cloudHeight2 = random(10, 30);
float cloudWidth2 = random(60, 100);
float cloud2X = 0;
float cloud2Y = random(1, 150);

//Third Cloud
float cloudHeight3 = random(10, 55);
float cloudWidth3 = random(50, 90);
float cloud3X = 0;
float cloud3Y = random(1, 300);

//cloud Transparencies
float cloudTransparency = random(50, 100);

//Maximum distance of clouds
float maxCloudX = 500;



//canvas setup
void setup() {
  size(400, 400);
  //message on start
  println("Kak on them all! 'A' and 'D' to move. 'SPACEBAR' to release your fury!");
}

void draw() {
  background(203, 152, mouseY);

  ///functions


  drawBuildingsSkyAndBackground();
  drawBirdKak();
  drawKakPerson();
}

///end of functions


void drawBuildingsSkyAndBackground() {

  //background building loop 1
  for (int i = -20; i<=400; i+=60) {
    fill(55);
    rect(i + 20, 170, 50, 400);
  }

  //background buildings loop 2
  for (int i = -20; i<=400; i+=60) {
    fill(75);
    rect(i + 5, 200, 50, 400);
  }


  //clouds

  //cloud randomizers
  if (cloud1X<maxCloudX) { 
    cloud1X+=random(.05, .5);
    //cloud speed
  } else if (cloud1X>=maxCloudX) {
    cloud1X=-50;
    cloud1Y=random(1, 300);
    cloudWidth1=random(15, 45);
    fill(255, cloudTransparency);
  }
  //cloud randomizers
  if (cloud2X<maxCloudX) 
    //cloud speed
    cloud2X+=random(.05, .5);
  else if (cloud2X>=maxCloudX) {
    cloud2X = -100;
    cloud2Y = random(1, 150);
    cloudWidth2=random(60, 120);
  }

  //cloud randomizers
  if (cloud3X<maxCloudX) { 
    cloud3X+=random(.05, .5);
    //cloud speed
  } else if (cloud3X>=maxCloudX) {
    cloud3X=-50;
    cloud3Y=random(1, 300);
    cloudWidth3=random(15, 45);
    fill(255, cloudTransparency);
  }

  //Respawn clouds after passing
  if (cloud1X>=-50) {    
    fill(255, cloudTransparency);
    ellipse(cloud1X, cloud1Y, cloudWidth1, cloudHeight1);
  }

  if (cloud2X>=-100) {
    ellipse(cloud2X, cloud2Y, cloudWidth2, cloudHeight2);
  }

  if (cloud3X>=-50) {
    fill(255, cloudTransparency);
    ellipse(cloud3X, cloud3Y, cloudWidth3, cloudHeight3);
  }

  //front buildings
  fill(105);
  rect(0, 270, 122, 400);
  rect(127, 252, 98, 400);
  rect(230, 260, 82, 400);
  rect(317, 280, 100, 400);

  //front front buildings
  fill(135);
  rect(0, 350, 400, 400);
}

void drawBirdKak() {

  //draw score
  fill(0);
  textSize(40);
  text (score, 10, 40);

  //kak
  fill(255);
  triangle(birdX, kakY-50, birdX+6, kakY, birdX-6, kakY);

  //feathers
  fill(180);
  triangle(birdX, 20, birdX+40, 140, birdX+20, 150);
  fill(190);
  triangle(birdX, 20, birdX+60, 140, birdX+40, 140);


  //Branch
  noStroke();
  fill(85, 41, 0);
  quad(50, 100, 400, 100, 400, 130, 75, 110);
  quad(200, 100, 150, 100, 60, 150, 60, 150);
  quad(250, 100, 200, 100, 120, 150, 120, 150);


  //Bird
  fill(200);  
  ellipse(birdX, 60, 80, 80);
  fill(0);
  stroke(0);

  //eyes
  strokeWeight(1);
  fill(255);
  ellipse(birdX+10, 45, 15, 15);
  ellipse(birdX-30, 40, 15, 15);
  noStroke();
  //beak and pupils
  fill(100);
  triangle(birdX-75, 65, birdX-15, 65, birdX-10, 45);
  fill(0);
  triangle(birdX-80, 60, birdX-10, 60, birdX-3, 40);
  ellipse(birdX+12, 45, 5, 5);
  ellipse(birdX-32, 38, 5, 5);
  noStroke();
}

void drawKakPerson() {

  //draw kak person1
  fill(kakPerson1White);
  rect(kakperson1X, 300, 50, 100);
  ellipse(kakperson1X+25, 280, 70, 70);
  fill(255);
  //eyes
  ellipse(kakperson1X+9, 270, 15, 15);
  ellipse(kakperson1X+54, 269, 15, 15);
  //pupils
  stroke(0);
  fill(0);
  ellipse(kakperson1X+7, 268, 5, 5);
  ellipse(kakperson1X+58, 268, 5, 5);
  //mouth
  fill(220);
  arc(kakperson1X+30, 295, 50, 50, PI, PI*2);
  fill(200, 50, 0);
  arc(kakperson1X+18, 295, 20, 20, PI, PI*2);

  //move across with modulo and come back, increase in speed relative to score
  kakperson1X = ((float)millis() * ((1+score)*.1))%500-100;


  //legs
  stroke(0);
  strokeWeight(1);
  line(birdX-20, 85, birdX-30, 100); 
  line(birdX+12, 85, birdX+23, 100); 
  noStroke();

  //change color if hit
  if (kakperson1X < -50) {
    kakPerson1White = 0;
  }

  //define kak drop and speed
  if (kakTime != 0) {
    kakY = 100 + ((millis()-kakTime) * .5);
  }

  //returns as black, kak disappers
  if (kakY >= 300 && kakperson1X <= kakX && kakperson1X + 50 >= kakX) {
    kakPerson1White = 255;
    kakTime = 0;
    kakY = 100;
    score = score+1;
  }

  //moves kak back to bird, resets score if missed
  if (kakY >= 400 ) {
    kakY = 100;
    kakTime = 0;
    score = 0;
  }
}

//Bird moves along branch with a and d keys, restrains bird to branch boundaries
void keyPressed() {
  if (key == 'a' && birdX >= 75) {
    birdX = birdX-birdSpeed;
  }

  if (key == 'd' && birdX <= 355) {
    birdX = birdX+birdSpeed;
  }

  if (key == ' ') {
    kakTime = millis();
    kakX = birdX;
  }
}


// :)