Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
Game name: Catch the block
 Created by : Edward(Yuhao) Lu
 Date : Sept 30, 2018
 
 How to play:
 Click the middle of the block(the color will be changed if 
 the mouse is in the activable area) when the shrunken frame 
 is closed to the red line in the white area.
 */
 
int lengthB=50;
int lengthR=60;
int lengthG=70;
int lengthO=150;
int score=0;
float speed=1;
float centerX=200;
float centerY=200;

void setup() {
  size(400, 400);
  frameRate(60);
  rectMode(CENTER);  
  ellipseMode(CENTER);
}

void draw () {
  background(50);
  drawBackground();
  drawBlock();
  updateBlock();
  updateSpeed();
}


//Block
void drawBlock() {
  noStroke();
  fill(204, 204, 204);
  rect(centerX, centerY, lengthG, lengthG);
  noFill();
  stroke(118, 0, 35);
  strokeWeight(2);
  rect(centerX, centerY, lengthR, lengthR);
  noStroke();
  fill(37, 37, 37);
  rect(centerX, centerY, lengthB, lengthB);
  noFill();
  stroke(200, 175, 139);
  rect(centerX, centerY, lengthO, lengthO);
}


// updateBlock
void updateBlock() {
  if (lengthO<26) {
    lengthO=140;
    centerX=random(75, 325);
    centerY=random(75, 325);
    score=0;
    speed=1;
  } else if (lengthO>25);
  {
    lengthO-=speed;
  }
  if (mouseX<centerX+lengthB/2&&mouseX>centerX-lengthB/2
    &&mouseY<centerY+lengthB/2&&mouseY>centerY-lengthB/2) {
    noStroke();
    fill(182, 171, 207);
    rect(centerX, centerY, lengthB, lengthB);
    noFill();
    stroke(254, 101, 37);
    rect(centerX, centerY, lengthO, lengthO);
  }
}


//backGround
void drawBackground() {
  if (score>=20) {
    stroke(255, 80);
    fill(184, 0, 73, 50+10*sin(PI/30*frameCount));
    ellipse(200, 200, 200+50*sin(PI/30*frameCount-PI), 200+50*sin(PI/30*frameCount-PI));
    ellipse(200, 200, 280+20*sin(PI/30*frameCount-PI), 280+20*sin(PI/30*frameCount-PI));

    fill(79, 77, 177, 60); //translucent white
    triangle(200, 200, 200/6.5+1000*cos(PI/100*frameCount*-1), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1), 580/6.5+1000*cos(PI/100*frameCount*-1+PI/6), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+PI/6));
    triangle(200, 200, 200/6.5+1000*cos(PI/100*frameCount*-1+2*PI/3), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+2*PI/3), 580/6.5+1000*cos(PI/100*frameCount*-1+2*PI/3+PI/6), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+2*PI/3+PI/6));
    triangle(200, 200, 200/6.5+1000*cos(PI/100*frameCount*-1+4*PI/3), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+4*PI/3), 580/6.5+1000*cos(PI/100*frameCount*-1+4*PI/3+PI/6), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+4*PI/3+PI/6));

    fill(99, 214, 180, 40+20*sin(PI/30*frameCount));
    rect(200, 200, width, height);
  } else if (score>=12) {
    stroke(255, 80);
    fill(184, 0, 73, 25+8*sin(PI/30*frameCount));
    ellipse(200, 200, 200+50*sin(PI/30*frameCount-PI), 200+50*sin(PI/30*frameCount-PI));
    ellipse(200, 200, 280+20*sin(PI/30*frameCount-PI), 280+20*sin(PI/30*frameCount-PI));

    fill(79, 77, 177, 35); //translucent white
    triangle(200, 200, 200/6.5+1000*cos(PI/100*frameCount*-1), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1), 580/6.5+1000*cos(PI/100*frameCount*-1+PI/6), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+PI/6));
    triangle(200, 200, 200/6.5+1000*cos(PI/100*frameCount*-1+2*PI/3), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+2*PI/3), 580/6.5+1000*cos(PI/100*frameCount*-1+2*PI/3+PI/6), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+2*PI/3+PI/6));
    triangle(200, 200, 200/6.5+1000*cos(PI/100*frameCount*-1+4*PI/3), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+4*PI/3), 580/6.5+1000*cos(PI/100*frameCount*-1+4*PI/3+PI/6), 400/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+4*PI/3+PI/6));
  } else if (score>=6) {
    stroke(255, 80);
    fill(184, 0, 73, 18+6*sin(PI/30*frameCount));
    ellipse(200, 200, 200+50*sin(PI/30*frameCount-PI), 200+50*sin(PI/30*frameCount-PI));
    ellipse(200, 200, 280+20*sin(PI/30*frameCount-PI), 280+20*sin(PI/30*frameCount-PI));
  }
}

//Speed
void updateSpeed() { 
  if (score>=6&&score<10) {
    speed+=.005;
    speed= constrain (speed, 0, 1.1);
  } else if (score>=10&&score<15) {

    speed+=.005;
    speed= constrain (speed, 0, 1.35);
  } else if (score>=20&&score<25) {

    speed+=.005;
    speed= constrain (speed, 0, 1.65);
  } else if (score>=25) {
    speed+=.05;
    speed= constrain (speed, 0, 2);
  }
}


// mousePressed
void mousePressed() {
  while (mouseX<centerX+lengthB/2&&mouseX>centerX-lengthB/2
    &&mouseY<centerY+lengthB/2&&mouseY>centerY-lengthB/2
    &&lengthO<lengthG&&lengthO>lengthB) {

    lengthO=140;
    centerX=random(75, 325);
    centerY=random(75, 325);
    noStroke();
    fill(150);
    rect(centerX, centerY, lengthG, lengthG);
    noFill();
    stroke(255, 0, 0);
    strokeWeight(2);
    rect(centerX, centerY, lengthR, lengthR);
    noStroke();
    fill(255);
    rect(centerX, centerY, lengthB, lengthB);
    noFill();
    stroke(255);
    rect(centerX, centerY, lengthO, lengthO);
    lengthO-=speed;
    score+=1;

    //scoreSystem
    if (score>45) {
      println(score+" times,THE MASTER OF CATCHER!");
    } else if (score>30) {
      println(score +" times,YOU ARE INCREDIBLE!");
    } else if (score>20) {
      println(score+" times,YOU ARE AWESOME!");
    } else if (score>8) {
      println(score+" times,GOOD JOB!");
    } else if (score>0&&score<=8) {
      println(score+" times,Try harder!");
    }
  }
}