/*////////////////////////////////////////////////////////////////////////// ** Kitty Keyboard by Patrick Sakamoto ** ** This interactive toy includes a player controlled cat pressing the keys ** on a piano keyboard to make lovely kitty music! ** **Move the kitty with the mouse and click to press down on the keys. /*////////////////////////////////////////////////////////////////////////// boolean displayActive=false; boolean randomizeColour=false; int opacity=100; int key1=0; int key2=80; int key3=160; int key4=240; int key5=320; int key6=400; int keyWidth=80; int keyHeight=160; int displayColours1=int(random(0, 255)); int displayColours2=int(random(0, 255)); int displayColours3=int(random(0, 255)); void setup() { frameRate(60); size(400, 400); smooth(); rectMode(CORNER); ellipseMode(CENTER); } void draw() { drawKeyboard(); checkKeys(); displayOn(); catPaw(); updateCat(); } //Pseudocode: Press a key to make the kitty meow. void keyPressed() { println("Nyaaaaaaaa~"); } //Pseudcode: Press mouse button to make "sounds" in println. void mousePressed() { if (mousePressed && mouseY<240) { println("Meow meow! (I can't reach that high!!)"); } else if (mousePressed && mouseY>240) { println("Meoooooow! (Music, music!)"); } } //Pseudocode: If the keys are pressed down, light up the display with random colours and create music notes. void displayOn() { if (displayActive) { if (randomizeColour) { displayColours1=int(random(0, 255)); displayColours2=int(random(0, 255)); displayColours3=int(random(0, 255)); randomizeColour=false; } stroke(displayColours1, displayColours2, displayColours3); fill(displayColours1, displayColours2, displayColours3); rect(100, 80, 200, 40); ellipse(60, 100, 20, 10); line(70, 100, 70, 80); ellipse(160, 60, 20, 10); line(170, 60, 170, 40); ellipse(320, 80, 20, 10); ellipse(340, 80, 20, 10); line(330, 80, 330, 60); line(350, 80, 350, 60); line(330, 60, 350, 60); } else { stroke(200); fill(200); rect(100, 80, 200, 40); } if (mousePressed && mouseY>240) { displayActive=true; randomizeColour=true; } else { displayActive=false; } } //Function to create the keyboard background. Does not include clickable. void drawKeyboard() { background(255); //Keyboard interface background. stroke(0); strokeWeight(1); fill(50); rect(0, 0, 400, 240); //Loop creating graphical pattern for keyboard keys. for (int i= 0; i<400; i+=80) { line(i, 240, i, 400); } //Keyboard sound vents, buttons, and black keys. fill(0); rect(0, 24, 400, 8); rect(0, 36, 400, 8); rect(260, 140, 40, 20); rect(260, 180, 40, 20); rect(340, 140, 40, 20); rect(340, 180, 40, 20); rect(0, 240, 20, 80); rect(60, 240, 40, 80); rect(220, 240, 40, 80); rect(300, 240, 40, 80); rect(380, 240, 20, 80); //Keyboard Display fill(200); rect(100, 80, 200, 40); //Keyboard Dials fill(225); ellipse(50, 170, 60, 60); ellipse(150, 170, 60, 60); line(50, 170, 50, 140); line(150, 170, 180, 170); } // Function to determine whether cursor is over one of the five keys using conditional statements. // Mouse click indicates key opacity for interaction. // Pseudocode: Make the keys change colour upon mouse over and mouse click. void checkKeys() { if (mousePressed) { opacity= 180; } else { opacity = 100; } { if (mouseY>=240) { if (mouseX>key1 && mouseX<key2) { fill(255, 0, 0, opacity); rect(0, 240, keyWidth, keyHeight); } else if (mouseX>key2 && mouseX<key3) { fill(255, 255, 0, opacity); rect(80, 240, keyWidth, keyHeight); } else if (mouseX>key3 && mouseX<key4) { fill(0, 255, 0, opacity); rect(160, 240, keyWidth, keyHeight); } else if (mouseX>key4 && mouseX<key5) { fill(0, 255, 255, opacity); rect(240, 240, keyWidth, keyHeight); } else if (mouseX>key5 && mouseX<key6) { fill(0, 0, 255, opacity); rect(320, 240, keyWidth, keyHeight); } } } } //Update the Cat on the screen, constrain within canvas. //Pseudocode: Constrain the cat to the size of the canvas on the x-axis. void updateCat() { mouseX=constrain(mouseX, 40, 360); stroke(0); strokeWeight(2); fill(213, 85, 0); triangle(mouseX+35, mouseY*0.1+320, mouseX+38, mouseY*0.1+380, mouseX-5, mouseY*0.1+360); triangle(mouseX-35, mouseY*0.1+320, mouseX-38, mouseY*0.1+380, mouseX+5, mouseY*0.1+360); ellipse(mouseX, mouseY*0.1+380, 80, 80); stroke(149, 60, 0); strokeWeight(5); line(mouseX, mouseY*0.1+345, mouseX, mouseY*0.1+400); line(mouseX-25, mouseY*0.1+355, mouseX-20, mouseY*0.1+400); line(mouseX+25, mouseY*0.1+355, mouseX+20, mouseY*0.1+400); } //Generate cat paw to press keys on keyboard upon clicking. //Pseudocode: Make the cat strike the keys with its paws depending on which side of //the keyboard it's on. void catPaw() { //mouseX=constrain(mouseX, 40, 360); stroke(0); strokeWeight(1.5); fill(255); if (mousePressed && mouseX<200) { arc(mouseX-15, mouseY*0.1+320, 30, 20, PI, 2*PI); fill(200, 75, 0); rect(mouseX-30, mouseY*0.1+320, 30, 40); } else if (mousePressed && mouseX>200) { arc(mouseX+15, mouseY*0.1+320, 30, 20, PI, 2*PI); fill(200, 75, 0); rect(mouseX, mouseY*0.1+320, 30, 40); } }