 //Author: Sophia Han

//Date: 05/12/02

//Description:  A virtual fish that swims around by default, eats when the switch is on, and dies when overfed

//draws the fish given the (x,y) coordinates of the center, and 0 or 1 to specify which direction to face

void fish(int x, int y, int dir){

canvas(0);

fill(1);

circle(x, y, 2);

if (dir == 0){

line((x-3), (y-1), (x-3), (y+1));

line((x-4), (y-2), (x-4), (y+2));

point((x-5), (y-2));

point((x-5), (y+2));

stroke(0);

point((x+1), (y-1));

stroke(1);

}

else{

line((x+3), (y-1), (x+3), (y+1));

line((x+4), (y-2), (x+4), (y+2));

point((x+5), (y-2));

point((x+5), (y+2));

stroke(0);

point((x-1), (y-1));

stroke(1);

}

}

//draws a fish facing upwards given the (x,y) coordinates of the center

void fishUp(int x, int y){

canvas(0);

fill(1);

stroke(1);

circle(x, y, 2);

line((x-1), (y+3), (x+1), (y+3));

line((x-2), (y+4), (x+2), (y+4));

point((x-2), (y+5));

point((x+2), (y+5));

stroke(0);

point((x+1), (y-1));

}

//moves the fish to the top of the display, moves the mouth to simulate eating, and returns the fish to

//its original position

void eat(int y){

int moveUp = y;

int startPos = y;

int mouth;

while(moveUp > 2){

moveUp = moveUp - 1;

fishUp(5, (moveUp));

pause(30);

}

for (mouth = 0; mouth < 4; mouth++){

fishUp(5, 2);

stroke(0);

line(4, 0, 4, 1);

pause(50);

stroke(1);

}

while(moveUp < startPos){

moveUp = moveUp + 1;

fish(4, moveUp, 1);

pause(30);

}

}

//shows the fish belly up, floating on the top of the display

void die()

{

while(true){

fish(3, 2, 1);

point(2, 1);

pause(50);

fish(2, 2, 1);

point(1, 1);

pause(50);

}

}

//checks to see if the switch is turned on (fish food touching the bowl), and reponds accordingly

int cycle(int x, int y, int dir, int feed){

if (feed == 1){

fish(x, y, dir);

pause(30);

return 0;

}

else{

:0 = 1;

pause(100);

:1 = 1;

pause(100);

:0 = 0;

:2 = 1;

pause(100);

:1 = 0;

:2 = 0;

eat(y);

return 1;

}

}

int feed = @2;

int death = 0;

while(death < 3){

death = 0;

feed = @2;

death = death + cycle(4, 5, 1, feed);

feed = @2;

death = death + cycle(4, 6, 1, feed);

feed = @2;

death = death + cycle(4, 7, 1, feed);

feed = @2;

death = death + cycle(4, 8, 1, feed);

feed = @2;

death = death + cycle(5, 8, 0, feed);

feed = @2;

death = death + cycle(5, 9, 0, feed);

feed = @2;

death = death + cycle(6, 10, 0, feed);

feed = @2;

death = death + cycle(7, 11, 0, feed);

feed = @2;

death = death + cycle(4, 9, 1, feed);

feed = @2;

death = death + cycle(4, 8, 1, feed);

feed = @2;

death = death + cycle(5, 7, 0, feed);

feed = @2;

death = death + cycle(5, 6, 0, feed);

feed = @2;

death = death + cycle(5, 5, 0, feed);

feed = @2;

death = death + cycle(4, 5, 1, feed);

feed = @2;

death = death + cycle(3, 4, 1, feed);

}

die();

MAS.110 Spring 2002