//Penguin Run by Melissa Goldsmith
// journey to the arctic circle and help Penguin catch the fish
//press 'w' to move penguin right
// press 'a' to turn penguin around and left
//catch the fish and the difficulty will increase
//drop the fish and the difficluty willl decrease
float penguinX = 20;
float penguinY = 315;
float fishX = 20;
float fishY = 100;
float X = 0;
float Y = 0;
float penguinSpeed= 20;
float fishSpeed = 2;
void setup() {
rectMode(CORNERS);
size (400, 400);
background(165, 242, 243);
noStroke();
fill(59, 48, 38);
rect(0, 340, 400, 400);
// fish spawns in random place above window
fishX = random(0, 400);
}
void draw() {
frameRate(20);
//sky
noStroke();
fill(165, 242, 243);
rect(0, 0, 400, 340);
//loop/repeating pattern
while (X < 400) {
fill(255);
noStroke();
rect(0, 340, 400, 360);
triangle(X, 360, X+35, 380, X+70, 360);
ellipse(X, 375, 10, 10);
fill(59, 48, 38);
ellipse(X+35, 365, 10, 10);
X=X+70;
}
//fish falls from sky
fishY = fishY + fishSpeed;
fish();
//penguin is on screen even when no key is pressed
penguin();
}
void keyPressed() {
frameRate(20);
//penguin hops right
if (keyPressed) {
if (key == 'w') {
if (penguinX < width) {
//sky
noStroke();
fill(165, 242, 243);
rect(0, 0, 400, 340);
fish();
penguin();
penguinX = penguinX+3;
} else {
// if penguin leaves the window move it just off screen on the opposite side
penguinX = penguinX-430;
}
//jump
penguinY = penguinY - penguinSpeed;
if ((penguinY > 0) || (penguinY <= 315)) {
penguinSpeed=penguinSpeed* -1;
}
}
}
//Rpenguin hops left
if (keyPressed) {
if (key == 'a') {
if (penguinX > 0) {
noStroke();
fill(165, 242, 243);
rect(0, 0, 400, 340);
fish();
Rpenguin();
penguinX = penguinX-3;
} else {
// if penguin leaves the window move it just off screen on the opposite side
penguinX = 430;
}
//jump
penguinY = penguinY - penguinSpeed;
if ((penguinY > 0) || (penguinY <= 315)) {
penguinSpeed=penguinSpeed* -1;
}
}
}
}
// if penguin ends movment in the air, fall to the ground
void keyReleased() {
if (penguinY < 315) {
penguinY =315;
}
if (penguinSpeed < 0) {
penguinSpeed=penguinSpeed* -1;
}
}
void penguin() {
//beak
noStroke();
fill(255, 195, 77);
triangle(penguinX+10, penguinY-35, penguinX+22, penguinY-23, penguinX+10, penguinY-15);
//foot
fill(253, 86, 2);
rect(penguinX, penguinY+22, penguinX+15, penguinY+25);
fill(0);
//body
ellipse(penguinX, penguinY, 40, 50);
//head
ellipse(penguinX, penguinY-25, 33, 33);
fill(255);
//chest
ellipse(penguinX+10, penguinY, 19, 33);
//eye
ellipse(penguinX-6, penguinY-25, 8, 8);
//wing
fill(60);
ellipse(penguinX-8, penguinY-3, 10, 20);
}
void Rpenguin() {
//flip penguin aroud Y-axis
//beak
noStroke();
fill(255, 195, 77);
triangle(penguinX-10, penguinY-35, penguinX-22, penguinY-23, penguinX-10, penguinY-15);
//foot
fill(253, 86, 2);
rect(penguinX, penguinY+22, penguinX-15, penguinY+25);
fill(0);
//body
ellipse(penguinX, penguinY, 40, 50);
//head
ellipse(penguinX, penguinY-25, 33, 33);
fill(255);
//chest
ellipse(penguinX-10, penguinY, 19, 33);
//eye
ellipse(penguinX+6, penguinY-25, 8, 8);
//wing
fill(60);
ellipse(penguinX+8, penguinY-3, 10, 20);
}
void fish() {
//fish
noStroke();
fill(250, 128, 114);
//body
ellipse(fishX, fishY, 15, 11);
triangle(fishX-2, fishY, fishX-12, fishY-5, fishX-12, fishY+5);
//eye
fill(0);
ellipse(fishX+2, fishY-2, 4, 4);
//mouth
stroke(0);
line(fishX+3, fishY+1, fishX+6, fishY+1);
// if the fish is caught reset it and speed it up to a max of 5
if ((((fishX>=penguinX-20)&&(fishX<=penguinX+20)&&(fishY>=penguinY-25)&&(fishY<=penguinY+25)))) {
fishY=-5;
fishX=random(0, 400);
if (fishSpeed < 5) {
fishSpeed = fishSpeed + 1;
}
}
//if the fish isnt caught reset it and slow down to min of 1
if (fishY >= 334) {
fishY=-5;
fishX= random(0, 400);
if (fishSpeed > 1) {
fishSpeed = fishSpeed-1;
}
}
}