Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*********************************
By Qianlin Xu
October 2 2017
Use keyboard to move around and hook up fish by kliking the left mouse
*********************************/

//declaring varibales
float boatX;
float boatY;
float boatSpeed;
float fishManX;
float fishManY;
float fishManSpeed;
float hookY;
float hookSpeed;
float waterY;
float water1Y;
float fish1PosX;
float fish1PosY;
float fish2PosX;
float fish2PosY;
float fish3PosX;
float fish3PosY;
float fish4PosX;
float fish4PosY;
float fish5PosX;
float fish5PosY;

float water1Speed, water2Speed,water3Speed,water4Speed,water5Speed,water6Speed,water7Speed;
float fish1Speed,fish2Speed,fish3Speed,fish4Speed;

//set up
void setup(){
  //creates the canvas size
  size(400,400);
  
  //initialize veribales
  waterY=160;
  boatX=200;
  boatY=145;
  fishManX=200;
  fishManY=100;
  hookY=200;
  fish1PosX=420;
  fish1PosY=random(210,380);
  fish1Speed=random(0.5,5);
  fish2PosX=-20;
  fish2PosY=random(210,380);
  fish2Speed=random(0.5,5);
  fish3PosX=420;
  fish3PosY=random(210,380);
  fish3Speed=random(0.5,5);
  fish4PosX=-20;
  fish4PosY=random(210,380);
  fish4Speed=random(0.5,5);

}

//functions
void draw(){
  //sets the background colour
  background(200,255,253);
  
  //function calls
  drawBackground();
  fishMan();
  boat();
  waterOne();
  waterTwo();
  waterThree();
  waterFour();
  waterFive();
  waterSix();
  waterSeven();
  fishOne();
  fishTwo();
  fishThree();
  fishFour();
  fishMan();
  hook();
}

//backGround
void drawBackground(){
  //draw mountain
  strokeWeight(3);
  stroke(44,218,93);
  fill(14,173,59);
  arc(60,200,120,240,PI,PI*2);
  arc(200,200,200,320,PI,PI*2);
  arc(400,200,100,240,PI,PI*2);
  arc(320,200,120,200,PI,PI*2);
  
  //draw the sun
  stroke(244,110,29);
  fill(215,70,13);
  ellipse(30,40,40,40);
}

//boat
void boat(){
  //draw boat
  stroke(130,75,21);
  fill(88,47,7);
  arc(boatX,boatY,80,80,0,PI);
  strokeWeight(1);
  line(boatX+40,boatY+5,boatX-40,boatY+5);
  line(boatX+38,boatY+10,boatX-38,boatY+10);
  line(boatX+36,boatY+15,boatX-36,boatY+15);
  line(boatX+34,boatY+20,boatX-34,boatY+20);
  
  boatY=145+(2*sin(frameCount/15f));

//if press left arrow, move ship left, if press right arrow, move ship right

  if(keyPressed)
  {
    boatSpeed=1.5;
    if(keyCode==RIGHT)
    {
      boatX=boatX+boatSpeed;
    }else if (keyCode==LEFT)
    {
      boatX=boatX-boatSpeed;
    }
    
    //keep boat on screen
    boatX=constrain(boatX,40,360);
  
  }
}
//water
void waterOne(){
  //draw the first layer of water
  strokeWeight(3);
  stroke(115,220,250);
  fill(95,200,230);
  triangle(0,water1Y,0,water1Y+20,20,water1Y+20);
  triangle(20,water1Y+20,40,water1Y,60,water1Y+20);
  triangle(60,water1Y+20,80,water1Y,100,water1Y+20);
  triangle(100,water1Y+20,120,water1Y,140,water1Y+20);
  triangle(140,water1Y+20,160,water1Y,180,water1Y+20);
  triangle(180,water1Y+20,200,water1Y,220,water1Y+20);
  triangle(220,water1Y+20,240,water1Y,260,water1Y+20);
  triangle(260,water1Y+20,280,water1Y,300,water1Y+20);
  triangle(300,water1Y+20,320,water1Y,340,water1Y+20);
  triangle(340,water1Y+20,360,water1Y,380,water1Y+20);
  triangle(400,water1Y,400,water1Y+20,380,water1Y+20);
  noStroke();
  rectMode(CENTER);
  rect(200,water1Y+30,400,22);
  
  water1Y = 160+(3*sin(frameCount/25f));
}

void waterTwo(){
 strokeWeight(3);
 stroke(116,222,248);
 triangle(0,waterY+20,20,waterY,40,waterY+20);
 triangle(40,waterY+20,60,waterY,80,waterY+20);
 triangle(80,waterY+20,100,waterY,120,waterY+20);
 triangle(120,waterY+20,140,waterY,160,waterY+20);
 triangle(160,waterY+20,180,waterY,200,waterY+20);
 triangle(200,waterY+20,220,waterY,240,waterY+20);
 triangle(240,waterY+20,260,waterY,280,waterY+20);
 triangle(280,waterY+20,300,waterY,320,waterY+20);
 triangle(320,waterY+20,340,waterY,360,waterY+20);
 triangle(360,waterY+20,380,waterY,400,waterY+20);
 noStroke();
 rect(200,waterY+30,400,24);
 
 waterY = 160+(5*sin(frameCount/20f));
}

void waterThree(){
  stroke(105,210,240);
  fill(85,190,220);
  rect(200,water1Y+65,405,50);
}

void waterFour(){
  stroke(95,200,230);
  fill(75,180,210);
  rect(200,waterY+105,405,50);
}

void waterFive(){
  stroke(85,190,220);
  fill(65,170,190);
  rect(200,water1Y+145,405,50);
}

void waterSix(){
  stroke(75,180,210);
  fill(55,160,190);
  rect(200,waterY+185,405,50);
}

void waterSeven(){
  stroke(65,170,200);
  fill(45,150,180);
  rect(200,water1Y+225,405,50);
}

//draw fish
void fishOne(){
  fill(239,141,105);
  stroke(0);
  strokeWeight(1);
  arc(fish1PosX,fish1PosY,40,40,HALF_PI,HALF_PI+PI);
  quad(fish1PosX+10,fish1PosY-20,fish1PosX+20,fish1PosY-30,fish1PosX+40,fish1PosY-20,fish1PosX+42,fish1PosY-17);
  arc(fish1PosX+20,fish1PosY+18,20,22,HALF_PI,PI);
  arc(fish1PosX,fish1PosY,140,40,HALF_PI+PI,HALF_PI+TWO_PI);
  triangle(fish1PosX+10,fish1PosY,fish1PosX+30,fish1PosY+10,fish1PosX+30,fish1PosY-10);
  triangle(fish1PosX+80,fish1PosY,fish1PosX+100,fish1PosY-10,fish1PosX+100,fish1PosY+10);
  
  noStroke();
  triangle(fish1PosX+60,fish1PosY+11,fish1PosX+60,fish1PosY-11,fish1PosX+80,fish1PosY);
  
  strokeWeight(1);
  stroke(0);
  fill(255);
  ellipse(fish1PosX-7,fish1PosY-5,6,6);
  line(fish1PosX+60,fish1PosY+10,fish1PosX+80,fish1PosY);
  line(fish1PosX+60,fish1PosY-10,fish1PosX+80,fish1PosY);
  
  //make fish move
  if (fish1PosX>-100){
    fish1PosX=fish1PosX-fish1Speed;
  }else{
  fish1PosX=random(420,500);
  fish1PosY=random(210,380);
  fish1Speed=random(0.5,5);//reset
  }
}

void fishTwo(){  
  fill(55,52,124);
  stroke(0);
  strokeWeight(1);
  arc(fish2PosX,fish2PosY,40,30,HALF_PI+PI,HALF_PI+TWO_PI);
  quad(fish2PosX-5,fish2PosY-15,fish2PosX-10,fish2PosY-25,fish2PosX-30,fish2PosY-15,fish2PosX-33,fish2PosY-7);
  arc(fish2PosX-10,fish2PosY+14,20,22,0,HALF_PI);
  arc(fish2PosX,fish2PosY,80,30,HALF_PI,HALF_PI+PI);
  triangle(fish2PosX-8,fish2PosY,fish2PosX-20,fish2PosY+5,fish2PosX-20,fish2PosY-5);
  triangle(fish2PosX-50,fish2PosY,fish2PosX-60,fish2PosY-10,fish2PosX-60,fish2PosY+10);
  
  noStroke();
  triangle(fish2PosX-30,fish2PosY+10,fish2PosX-30,fish2PosY-10,fish2PosX-50,fish2PosY);
  
  strokeWeight(1);
  stroke(0);
  fill(255);
  ellipse(fish2PosX+7,fish2PosY-5,6,6);
  line(fish2PosX-30,fish2PosY+10,fish2PosX-50,fish2PosY);
  line(fish2PosX-30,fish2PosY-10,fish2PosX-50,fish2PosY);
  
  //make fish move
  if (fish2PosX<500){
    fish2PosX=fish2PosX+fish2Speed;
  }else{
  fish2PosX=-20;
  fish2PosY=random(210,380);
  fish2Speed=random(0.5,3);//reset
  }
}

void fishThree(){
  fill(50,174,88);
  stroke(0);
  strokeWeight(1);
  arc(fish3PosX,fish3PosY,20,20,HALF_PI,HALF_PI+PI);
  quad(fish3PosX+5,fish3PosY-10,fish3PosX+10,fish3PosY-15,fish3PosX+20,fish3PosY-10,fish3PosX+21,fish3PosY-8);
  arc(fish3PosX+10,fish3PosY+9,10,11,HALF_PI,PI);
  arc(fish3PosX,fish3PosY,60,20,HALF_PI+PI,HALF_PI+TWO_PI);
  triangle(fish3PosX+5,fish3PosY,fish3PosX+15,fish3PosY+5,fish3PosX+15,fish3PosY-5);
  triangle(fish3PosX+40,fish3PosY,fish3PosX+50,fish3PosY-5,fish3PosX+50,fish3PosY+5);
  
  noStroke();
  triangle(fish3PosX+26,fish3PosY+5,fish3PosX+26,fish3PosY-5,fish3PosX+40,fish3PosY);
  
  strokeWeight(1);
  stroke(0);
  fill(255);
  ellipse(fish3PosX-3,fish3PosY-3,3,3);
  line(fish3PosX+26,fish3PosY+5,fish3PosX+40,fish3PosY);
  line(fish3PosX+26,fish3PosY-5,fish3PosX+40,fish3PosY);
  
  //make fish move
  if (fish3PosX>-100){
    fish3PosX=fish3PosX-fish3Speed;
  }else{
  fish3PosX=random(420,500);
  fish3PosY=random(210,380);
  fish3Speed=random(0.5,5);//reset
  }
}

void fishFour(){
  fill(205,160,53);
  stroke(0);
  strokeWeight(1);
  arc(fish4PosX,fish4PosY,20,20,HALF_PI+PI,HALF_PI+TWO_PI);
  quad(fish4PosX-5,fish4PosY-10,fish4PosX-10,fish4PosY-15,fish4PosX-20,fish4PosY-10,fish4PosX-21,fish4PosY-8);
  arc(fish4PosX-10,fish4PosY+9,10,11,0,HALF_PI);
  arc(fish4PosX,fish4PosY,60,20,HALF_PI,HALF_PI+PI);
  triangle(fish4PosX-5,fish4PosY,fish4PosX-15,fish4PosY+5,fish4PosX-15,fish4PosY-5);
  triangle(fish4PosX-40,fish4PosY,fish4PosX-50,fish4PosY-5,fish4PosX-50,fish4PosY+5);
  
  noStroke();
  triangle(fish4PosX-26,fish4PosY+5,fish4PosX-26,fish4PosY-5,fish4PosX-40,fish4PosY);
  
  strokeWeight(1);
  stroke(0);
  fill(255);
  ellipse(fish4PosX+3,fish4PosY-3,3,3);
  line(fish4PosX-26,fish4PosY+5,fish4PosX-40,fish4PosY);
  line(fish4PosX-26,fish4PosY-5,fish4PosX-40,fish4PosY);
  
  //make fish move
  if (fish4PosX<450){
    fish4PosX=fish4PosX+fish4Speed;
  }else{
  fish4PosX=-10;
  fish4PosY=random(210,380);
  fish4Speed=random(0.5,5);//reset
  }
}

void fishMan()
{
  //draw fishMan
  stroke(248,211,179);
  fill(228,191,159);
  arc(fishManX,fishManY+10,10,20,0,PI);
  
  stroke(156,89,30);
  strokeWeight(2);
  fill(115,63,17);
  triangle(fishManX,fishManY,fishManX-10,fishManY+10,fishManX+10,fishManY+10);
  
  stroke(43,32,126);
  fill(23,12,106);
  quad(fishManX-2,fishManY+20,fishManX+2,fishManY+20,fishManX+10,fishManY+40,fishManX-10,fishManY+40);
  
  fishManY=105+(2*sin(frameCount/15f));
  
  //move fishMan
  if(keyPressed)
  {
    fishManSpeed=0.8;
    if(keyCode==RIGHT)
    {
      fishManX=fishManX+fishManSpeed;
    }else if (keyCode==LEFT)
    {
      fishManX=fishManX-fishManSpeed;
    }
    
    //keep boat on screen
    fishManX=constrain(fishManX,10,390);  
  }
}
  
  //draw fish hook
void hook()
{
  noFill();
  stroke(0);
  strokeWeight(3);
  arc(fishManX+70,fishManY+40,120,160,PI,PI+HALF_PI);
  strokeWeight(1);
  line(fishManX+70,fishManY-40,fishManX+70,hookY);
  fill(255,204,0);
  arc(fishManX+66,hookY,8,8,0,PI*5/6);
    
    //move hook up and down
    if(keyPressed)
    {
      hookSpeed=1.5;
      if(keyCode==UP)
      {
        hookY=hookY-hookSpeed;
      }else if (keyCode==DOWN)
      {
        hookY=hookY+hookSpeed;
      }
    }
}