/////////////////////////////////////////////////
/////////////////////////////////////////////////
//PB and Jellyfish by Jessica Cornelius
//Move the JellyFish around using WASD or ARROW keys.
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//Declaring Variables
float jellyX;
float jellyY;
int currentXPosition = 0;
boolean goLeft=false;
boolean goRight=false;
boolean goUp=false;
boolean goDown=false;
boolean move=false;
float speed=5.0;
//Setting Up Canvas
void setup() {
size(400, 400);
frameRate(60);
}
void draw() {
background(141, 255, 254);
drawWater();
drawMove();
drawCurrent(currentXPosition);
drawSand();
drawSeaweedBehind();
drawSquish();
drawSeaweedFront();
noStroke();
currentXPosition++;
}
void keyPressed() {
//Movement Code Retrieved from http://www-acad.sheridanc.on.ca/PROG14998/2014/interactive-toy/interactive_toy_43/index.html
//Shape Change Code Retrieved from http://www-acad.sheridanc.on.ca/PROG14998/2014/interactive-toy/interactive_toy_21/index.html
/////////////////////////
//MOVEMENT FOR ARROW KEYS
/////////////////////////
if (keyCode == LEFT) {
goLeft=true;
} else if (keyCode == UP) {
goUp=true;
} else if (keyCode == DOWN) {
goDown=true;
} else if (keyCode == RIGHT) {
goRight=true;
}
/////////////////////////
//MOVEMENT FOR WASD
/////////////////////////
if (key=='a') {
goLeft=true;
} else if (key=='w') {
goUp=true;
} else if (key=='s') {
goDown=true;
} else if (key=='d') {
goRight=true;
}
}
void keyReleased() {
/////////////////////////
//TO DISABLE MOVEMENT OF WASD AND ARROW KEYS WHEN RELEASED
/////////////////////////
if (key=='a') {
goLeft=false;
} else if (key=='w') {
goUp=false;
} else if (key=='s') {
goDown=false;
} else if (key=='d') {
goRight=false;
}
if (keyCode == LEFT) {
goLeft=false;
} else if (keyCode == UP) {
goUp=false;
} else if (keyCode == DOWN) {
goDown=false;
} else if (keyCode == RIGHT) {
goRight=false;
}
}
/////////////////////////////////////////////////
//DRAW
/////////////////////////////////////////////////
/////////////////////////
//WATER
/////////////////////////
void drawWater() {
fill(151, 223, 248);
rect(200, 70, 400, 65);
}
/////////////////////////
//JELLYFISH
/////////////////////////
//JELLYFISH SHAPE WHEN NOT MOVING
void bigJelly() {
noStroke();
fill(random(0,255), random(0,255), random(0,255));
rectMode(CENTER);
rect(jellyX+200, jellyY+200, 45, 35, 20);
rect(jellyX+200, jellyY+215, 45, 10, 10);
rect(jellyX+190, jellyY+215, 5, 45, 20);
rect(jellyX+210, jellyY+215, 5, 45, 20);
rect(jellyX+200, jellyY+215, 5, 45, 20);
fill(random(0,255), random(0,255), random(0,255));
ellipse(jellyX+190, jellyY+195, 10, 10);
ellipse(jellyX+200, jellyY+192, 5, 5);
ellipse(jellyX+185, jellyY+202, 5, 5);
//KEEPING JELLYFISH ON CANVAS
//Retrieved from http://www-acad.sheridanc.on.ca/PROG14998/2014/interactive-toy/interactive_toy_05/index.html
jellyX = constrain(jellyX, -200, 200);
jellyY = constrain(jellyY, -80, 200);
}
//JELLYFISH SHAPE WHEN MOVING
void smallJelly() {
noStroke();
//fill(246, 135, 248);
fill(random(0,255), random(0,255), random(0,255));
rectMode(CENTER);
rect(jellyX+200, jellyY+200, 45, 25, 20);
rect(jellyX+200, jellyY+215, 45, 10, 10);
rect(jellyX+190, jellyY+215, 5, 30, 20);
rect(jellyX+210, jellyY+215, 5, 30, 20);
rect(jellyX+200, jellyY+215, 5, 30, 20);
//fill(232, 90, 235);
fill(random(0,255), random(0,255), random(0,255));
ellipse(jellyX+190, jellyY+195, 10, 8);
ellipse(jellyX+200, jellyY+192, 5, 3);
ellipse(jellyX+185, jellyY+202, 5, 3);
jellyX = constrain(jellyX, -200, 200);
jellyY = constrain(jellyY, -80, 200);
}
void drawMove() {
//ENABLES MOVEMENT OF JELLYFISH SHAPE&SPEED
if (goRight==true) {
jellyX+=speed;
}
if (goLeft==true) {
jellyX+=-speed;
}
if (goUp==true) {
jellyY+=-speed;
}
if (goDown==true) {
jellyY+=speed;
}
if (goRight == true || goLeft == true || goUp == true || goDown == true) {
move = true;
} else {
move = false;
}
}
//JELLYFISH WILL NOT SQUISH UNLESS MOVING
void drawSquish() {
if (move == true) {
smallJelly();
}else{
bigJelly();
}
}
/////////////////////////
//SAND
/////////////////////////
void drawSand() {
stroke(234, 234, 208);
float a = 0.0;
float inc = TWO_PI/25.0;
for (int x = 0; x <= width; x++) {
line(x, height, x , height - 30 + 20*(sin(a/30)));
a = a + inc;
}
}
/////////////////////////
//CURRENT
/////////////////////////
void drawCurrent(int x) {
stroke(223, 255, 255);
float a = 0.0;
float inc = TWO_PI/25.0;
for (int i = 0; i <= width; i++) {
line(i, height, i , (height - 350 + 20 * (sin((a-x/2)/20))));
a = a + inc;
}
stroke(200, 255, 255);
for (int i = 0; i <= width; i++) {
line(i, height, i , (height - 350 + 20 * (sin((a-x/4)/20))));
a = a + inc;
}
noStroke();
rectMode(CORNER);
for (int j = 0; j <= height; j= j+5){
fill(40, 110, 154, 0+j);
rect(0, 150+j, width, 5);
}
}
/////////////////////////
//SEAWEED
/////////////////////////
void drawSeaweedBehind() {
float s = 0;
strokeWeight(5);
while(s<height){
stroke(141, 227, 137);
point(80, 300 + 200 * sin(s*10)+ 50);
stroke(177, 224, 174);
point(100, 280 + 200 * sin(s*10)+ 50);
stroke(141, 227, 137);
point(120, 380 + 200 * sin(s*10)+ 50);
stroke(141, 227, 137);
point(375, 400 + 200 * sin(s*10)+ 50);
stroke(177, 224, 174);
point(25, 400 + 200 * sin(s*10)+ 50);
s = s + 5;
}
}
void drawSeaweedFront() {
float s = 0;
strokeWeight(5);
while(s<height){
stroke(141, 227, 137);
point(280, 300 + 200 * sin(s*10)+ 50);
stroke(177, 224, 174);
point(300, 280 + 200 * sin(s*10)+ 50);
stroke(141, 227, 137);
point(220, 380 + 200 * sin(s*10)+ 50);
s = s + 5;
}
}