/*********************************
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;
}
}
}