//Diana McLaughlin, dmclaugh@andrew.cmu.edu, Section A
//story project - a cat wanders around the house in search of dinner and runs into other characters - each more unlikely to live in the house than the last
var meow;
var bark;
var buzz;
var angry;
var aln;
var door;
var nom;
function preload() {
meow = loadSound("http://127.0.0.1:8887/meow.wav");
bark = loadSound("http://127.0.0.1:8887/bark.wav");
buzz = loadSound("http://127.0.0.1:8887/fly.wav");
angry = loadSound("http://127.0.0.1:8887/angry.wav");
aln = loadSound("http://127.0.0.1:8887/alien.wav");
door = loadSound("http://127.0.0.1:8887/door.wav");
nom = loadSound("http://127.0.0.1:8887/nom.wav");
}
function setup() {
createCanvas(400, 400);
frameRate(1);
createDiv("p5.dom.js library is loaded.");
textSize(16);
textAlign(CENTER);
useSound();
}
function soundSetup() { // setup for audio generation
meow.setVolume(1);
bark.setVolume(1);
buzz.setVolume(1);
angry.setVolume(1);
aln.setVolume(1);
door.setVolume(1);
}
function draw() {
// you can replace any of this with your own code:
background(0, 200, 255);
if (frameCount <= 8) {
cat(width/2, height/2);
thoughtBubble(300, 75);
foodbowl(300, 75);
stroke(0);
text('Where is my dinner?', width/2, 325);
text('I have never eaten in my life', width/2, 350);
meow.play();
}
if (frameCount > 8 & frameCount <= 13) {
cat(100, 200);
dog(300, 200);
text('Dog, have they fed you?', width/2, 325);
text('Dinner is not for another hour, Cat', width/2, 350);
if (frameCount <= 7) {
meow.play();
} else {
bark.play();
}
}
if (frameCount > 13 & frameCount <= 18) {
cat(150, 300);
fly (300, 300);
text('Fly, have you eaten', width/2, 25);
text('I just got here, I was on Mike`s head', width/2, 50);
if (frameCount <= 12) {
meow.play();
} else {
buzz.play();
}
}
if (frameCount > 18 & frameCount <= 21) {
text('The cat wandered so far away from the kitchen', width/2, height/2);
text('that he found an alien', width /2, height/2 + 25);
}
if (frameCount > 21 & frameCount <= 26) {
cat(300, 150);
alien(100, 150);
text('Alien I will starve if no one feeds me', width/2, 325);
text('Go back to the kitchen, Cat.', width/2, 350);
text('You still have 20 minutes until dinner', width/2, 370);
if (frameCount <= 20) {
angry.play();
} else {
aln.play();
}
}
if (frameCount > 26 & frameCount <= 29) {
text('Dejected and starving, cat made the long journey', width/2, height/2);
text('from the closet back to the kitchen', width/2, height/2 + 25);
angry.play();
}
if (frameCount > 29 & frameCount <= 32) {
text('Suddenly, Cat heard a noise', width/2, height/2);
}
if (frameCount > 32 & frameCount <= 37) {
surprisedcat(width/2, height/2);
text('Could it be? Is the human home to save me?', width/2, 325);
if (frameCount <= 32) {
door.play();
} else {
meow.play();
}
}
if (frameCount > 37) {
cat(width/2, height/2);
foodbowl(width/2, height/2 + 18);
nom.play();
}
}
function cat(x, y) {
push();
translate(x, y);
noStroke();
fill(200);
ellipse(0, 0, 100, 100); //head
triangle(-10, -49, -28, -70, -35, -35); //ears
triangle(10, -49, 28, -70, 35, -35);
fill(255, 0, 50);
triangle(-13, -47, -26, -60, -30, -40);
triangle(13, -47, 26, -60, 30, -40);
fill(0, 255, 0);
ellipse(-20, -20, 12, 12); //eyes
ellipse(20, -20, 12, 12);
fill(0);
ellipse(-20, -20, 7, 7);
ellipse(20, -20, 7, 7);
fill(255, 0, 50);
stroke(0); //nose & mouth
triangle(0, 5, -7, -3, 7, -3);
line(0, 5, 0, 12);
line(0, 12, -12, 20);
line(0, 12, 12, 20);
line(35, 5, 75, 5); //whiskers
line(35, 5, 75, -5);
line(35, 5, 75, 15);
line(-35, 5, -75, 5);
line(-35, 5, -75, -5);
line(-35, 5, -75, 15);
pop();
}
function dog(x, y) {
push();
translate(x, y);
noStroke();
fill(180, 100, 100);
ellipse(0, 0, 110, 140); //head
triangle(-11, -68, -29, -91, -36, -53); //ears
triangle(11, -68, 29, -91, 36, -53);
fill(0);
ellipse(-20, -20, 13, 13); //eyes
ellipse(20, -20, 13, 13);
ellipse(0, 10, 25, 15); //nose
stroke(0);
strokeWeight(2);
line(-20, 30, 20, 30); //mouth
noStroke();
fill(255, 0, 50);
rect(10, 30, 10, 5);
ellipse(15, 35, 10, 8);
noStroke();
fill(255, 0, 0); //collar
rect(-45, 65, 90, 20);
fill(255, 255, 0);
ellipse(0, 90, 20, 20);
pop();
}
function fly(x, y) {
push();
translate(x, y);
fill(0);
ellipse(0, 0, 45, 75); //body
fill(55);
push(); //wings
rotate(radians(45));
ellipse(-14, 15, 30, 45);
pop();
push();
rotate(radians(315));
ellipse(14, 15, 30, 45);
pop();
pop();
}
function alien(x, y) {
push();
translate(x, y);
noStroke();
fill(0, 255, 0);
ellipse(0, 0, 95, 150); //head
rect(-30, -100, 8, 70); //antenna
rect(22, -100, 8, 70);
fill(0);
ellipse(-20, -20, 15, 25); //eyes
ellipse(20, -20, 15, 25);
stroke(0);
strokeWeight(5);
line(-30, 30, 30, 30); //mouth
pop();
}
function foodbowl(x, y) {
push();
translate(x, y);
ellipseMode(CENTER);
for (var a = -17; a < 17; a += 4) { //food
fill(180, 50, 80);
ellipse(a, -11, 4, 4);
}
rectMode(CENTER);
fill(255, 0, 0);
rect(0, 0, 40, 20); //bowl
pop();
}
function surprisedcat(x, y) {
push();
translate(x, y);
noStroke();
fill(200); //head
ellipse(0, 0, 100, 100);
triangle(-10, -49, -28, -70, -35, -35); //ears
triangle(10, -49, 28, -70, 35, -35);
fill(255, 0, 50);
triangle(-13, -47, -26, -60, -30, -40);
triangle(13, -47, 26, -60, 30, -40);
fill(0, 255, 0); //eyes
ellipse(-20, -20, 12, 12);
ellipse(20, -20, 12, 12);
fill(0);
ellipse(-20, -20, 7, 7);
ellipse(20, -20, 7, 7);
fill(255, 0, 50); //nose
stroke(0);
triangle(0, 5, -7, -3, 7, -3);
fill(0);
ellipse(0, 16, 10, 10); //mouth
line(35, 5, 75, 5); //whiskers
line(35, 5, 75, -5);
line(35, 5, 75, 15);
line(-35, 5, -75, 5);
line(-35, 5, -75, -5);
line(-35, 5, -75, 15);
pop();
}
function thoughtBubble(x, y) {
push();
translate(x, y);
fill(255);
ellipse(-50, 50, 12, 12);
ellipse(-36, 36, 12, 12);
ellipse(-22, 22, 12, 12);
ellipse(0, 0, 60, 45); //biggest bubble
pop();
}
I was working on this while my cat was waiting for dinner (over an hour early) and it gave me this idea