Project Name: Fishy Sushi
Description:
The idea is inspired by the Netflix latest documentary hit <Seaspiracy> which unfolds the cruelty of the marine fishing industry. From our Interactive Experience Project, we held the belief that it is the human pollution that continues to drive the extinction of a series of marine species, which destroys the balance of the biological chain. Now, with more knowledge and exposure to the truth, we decided to build on the concept of the last project and design another game to communicate our concern to the underwater ecosystem. We’d like to create a sushi business, with sushi serving as a major human consumption of rare marine species like bluefin tuna. We hope to create the entire process of fishing and turning the creatures into dishes. There will also be a monetary system that adds interaction and variety to the design.
Instructions:
- Press Left & Right arrows to control the fisherman
- Press Down arrow to capture the passing fish
- Shake the mouse to make the fish into sushi
- Drag the sushi to the wallet to sell them
- Click the equipment above to buy them
Project Video Demo & Screenshots
Evaluation of Learning Goals:
Previously, I designed my learning goals for this project as the following in the project proposal:
“A more intensive practice of programming using the p5 library which is the most prominent part of this course that can prepare ourselves for advanced electives in interaction design. Besides, it is also interesting to be exposed to the thought process of game development and involve the consideration of persona, user testing, etc.
In short, the specific goals can be defined as 1) more exposure to objects & arrays; 2) a meticulous planning process to design an minimum viable product for a game.”
Learning Goal 1 – more exposure to objects & arrays
Despite the challenge that during the project process, my teammate Cyrene and I had to work separately for most of the time thanks to the difference of our schedule, I think I have gained a great amount of valuable exposure to objects and arrays in p5.
For example, one major interaction of “chopping the fish and turning them into sushi” is built up from a complex class by me.
class Fish {
constructor(x, y, r, image, suimage,pri) {
this.x = x;
this.y = y;
this.r = r;
this.image = image;
this.suimage = suimage;
this.prevNotInsideFishState = "outside";
this.chopvalue = 0;
this.visible = true;
this.pri=pri
}
draw() {
if (this.visible) {
image(this.image, this.x - 64, this.y - 64);
} else {
image(this.suimage, this.x - 64, this.y - 64, 150, 90);
}
}
mouseDragged() {
let state;
if (
mouseY > this.y + 84 ||
mouseY < this.y - 84 ||
mouseX < this.x - 120 ||
mouseX > this.x + 120
) {
state = "outside";
} else if (this.x - 100 < mouseX && mouseX < this.x) {
state = "left";
} else if (this.x < mouseX && mouseX < this.x + 100) {
state = "right";
} else {
state = "inside";
}
if (
(state == "left" || state == "right") &&
(this.prevNotInsideFishState == "left" ||
this.prevNotInsideFishState == "right") &&
state != this.prevNotInsideFishState
) {
this.chopvalue += 1;
}
if (state != "inside") {
this.prevNotInsideFishState = state;
}
console.info(mouseX, mouseY);
if (this.chopvalue > slicetimes) {
this.visible = false;
this.chopvalue = 0;
}
if (this.visible == false) {
if (
mouseX < this.x + 60 &&
mouseX > this.x - 60 &&
mouseY < this.y + 60 &&
mouseY > this.y - 60
) {
this.x += mouseX - pmouseX;
this.y += mouseY - pmouseY;
}
}
}
mouseReleased() {
if (
mouseX < 180 &&
mouseX > 80 &&
mouseY < 700 &&
mouseY > 600 &&
mouseX < this.x + 60 &&
mouseX > this.x - 60 &&
mouseY < this.y + 60 &&
mouseY > this.y - 60
) {
this.x = -500;
this.y = -500;
money += this.pri;
}
}
}
To figure out the proper structure of this class that both incorporates the image of the fish and the sushi was a time-consuming challenge. Initially I was always stuck with the idea that since sushi and fish are different objects, technically they should be separated from each other. However, sometimes the best solution just came in a blink of an eye. As I constructed the more complex class for the fish, which includes the mouse chopping effect with the bloody bubbles, I suddenly came to know that the constructor might just take another parameter as the sushi image. Then, I modified the class code to allow different images to appear when their corresponding conditions are met. I found the process for writing this piece of code intellectually inspiring, not only regarding executing with p5 the programming language itself, but the broader and more general analytical thinking as well.
Learning Goal 2 – a meticulous planning process to design an MVP for a game
—I do think we have achieved this goal well in terms of not only the interface visual designs but also the game flow, user interaction, and other practices. Especially in the inception of this project, Cyrene and I spent the majority of time sketching out the storyboard and user interfaces for this project before starting to code. Here are the finalized storyboard and the game flow we have created along the process.