/* Assignment 1 Interactive Drawing Richard Scott Duff Sept 21th 2016 A drawn windmill that does nothing with a bat or bird flying past it. When you press a key the drawing turns from day to night. When the mouse is pressed you draw a cloud at the mouse's position. */ void setup() { //sets the size of the screen size(400, 400); // set the recangle to draw from the center to outwards instead of top left corner by deafult rectMode(CENTER); //set the background color to blue background(0, 100, 255); } void draw() { //sets the frame rate to 60. frameRate(30); //sky //write code for colouring the sky here background(0, 100, 255); //Windmill stroke(1); //Stand fill(129, 75, 5); rect(200, 325, 100, 50); //Body fill(129, 75, 5); rect(200, 250, 120, 125); //Top Triangle fill(129, 75, 5); triangle(200, 100, 261, 188, 140, 188); //All Fan parts is what moves by tracking the mouse X & moseY //Top Fan Cloth fill(255); rect(190, 110, 30, 100); //Top Fan Arm fill(129, 75, 5); rect(200, 120, 5, 120); //Right Fan Cloth fill(255); rect(270, 170, 100, 30); //Right Fan Arm fill(129, 75, 5); rect(260, 180, 120, 5); //Bottom Fan Cloth fill(255); rect(210, 250, 30, 100); //Bottom Fan Arm fill(129, 75, 5); rect(200, 240, 5, 120); //Left Fan Cloth fill(255); rect(130, 190, 100, 30); //Left Fan Arm fill(129, 75, 5); rect(140, 180, 120, 5); //Centre Piece For Fan fill(0); ellipse(200, 175, 20, 20); //Left Hill noStroke(); fill(22, 198, 0); ellipse(400, 400, 300, 300); //Middle Hill noStroke(); ellipse(200, 400, 300, 150); //Right Hill noStroke(); ellipse(0, 400, 300, 200); // bird or bat thingy noStroke(); frameRate(10); /* This portion of code is part of the bat thats above the windmill. The mouseX means it's locked to follow the mouse's x position on screen. the frameCount function does exactly what it says it counts the amount of frames pasted since running the program and the sin function mized with the framecount function is how the plusatating effect has been created. I also inverted the mouseX to y coord and mouseY to x coord to give the bat an ellusive feeling */ fill(0); rect(sin(mouseY * 10) + mouseY, mouseX+ 40, 10, 10); //bat left wing fill(0); rect(sin(mouseY * 10) + mouseY - 5, mouseX+35, 10, 10); rect(sin(mouseY * 100) + mouseY - 10, sin(frameCount * 10) + mouseX+30, 10, 10); //bat right wing fill(0); rect(sin(mouseY * 10) + mouseY + 5, mouseX +35, 10, 10); rect(sin(mouseY * 10) + mouseY + 10, sin(frameCount * 10)+ mouseX+30, 10, 10); //bat eyes fill(14, 255, 0); rect(sin(frameCount * 10) + mouseY - 2, mouseX+36, 2, 2); rect(sin(frameCount * 10) + mouseY + 2, mouseX+36, 2, 2); } void keyPressed() { /* When a key is pressed on the keyboard it will slow down the framerate to 5 and redraws the whole screen only with a dark background instead of a blue one to emitate night time.*/ frameRate(1); background(0); //Windmill stroke(1); //Stand fill(72, 40, 1); rect(200, 325, 100, 50); //Body fill(72, 40, 1); rect(200, 250, 120, 125); //Top Triangle fill(72, 40, 1); triangle(200, 100, 261, 188, 140, 188); //All Fan parts is what moves by tracking the mouse X & moseY //Top Fan Cloth fill(170, 170, 170); rect(190, 110, 30, 100); //Top Fan Arm fill(72, 40, 1); rect(200, 120, 5, 120); //Right Fan Cloth fill(170, 170, 170); rect(270, 170, 100, 30); //Right Fan Arm fill(72, 40, 1); rect(260, 180, 120, 5); //Bottom Fan Cloth fill(170, 170, 170); rect(210, 250, 30, 100); //Bottom Fan Arm fill(72, 40, 1); rect(200, 240, 5, 120); //Left Fan Cloth fill(170, 170, 170); rect(130, 190, 100, 30); //Left Fan Arm fill(72, 40, 1); rect(140, 180, 120, 5); //Centre Piece For Fan fill(0); ellipse(200, 175, 20, 20); //Left Hill noStroke(); fill(10, 77, 0); ellipse(400, 400, 300, 300); //Middle Hill noStroke(); ellipse(200, 400, 300, 150); //Right Hill noStroke(); ellipse(0, 400, 300, 200); //sin(frameCount * 10) + mouseX + 2 //bat eyes fill(255, 23, 23); rect(sin(frameCount * 5000) + 98, 36, 2, 2, 191); rect(sin(frameCount * 5000) + 102, 36, 2, 2, 191); //bat eyes fill(255, 23, 23); rect(38, 70, 2, 2, 191); rect(42, 70, 2, 2, 191); //bat eyes fill(255, 23, 23); rect(244, 67, 2, 2, 191); rect(248, 67, 2, 2, 191); //bat eyes fill(255, 23, 23); rect(320, 110, 2, 2, 191); rect(324, 110, 2, 2, 191); //bat eyes fill(255, 23, 23); rect(90, 98, 2, 2, 191); rect(94, 98, 2, 2, 191); //bat eyes fill(255, 23, 23); rect(350, 15, 2, 2, 191); rect(354, 15, 2, 2, 191); }// end of the keypressed function void mousePressed() { // This will draw a cloud at the mouse's position on screen. but it will only last for 5 frames. frameRate(5); fill(255); noStroke(); //base of the cloud ellipse(mouseX, mouseY - 1, 30, 30); ellipse(mouseX - 15, mouseY, 25, 25); ellipse(mouseX + 15, mouseY, 25, 25); // slightly more complex part of the cloud ellipse(mouseX, mouseY - 15, 25, 25); ellipse(mouseX+7, mouseY - 7, 25, 25); ellipse(mouseX-7, mouseY-7, 25, 25); ellipse(mouseX, mouseY, 25, 25); println("MAGIC MISSLE"); }// end of the mousePressed function