//Interactive Toy Robot created by Tyler Moretto //Exhaust Idea from Nicolas Hesler's Cylon Lander float robotX; float robotY; float robotSpeedX; float robotSpeedY; float robotExhaustFlamesSize; float robotExhaustFlamesExtra; float robotExhaustFlamesAmount; float gravity=.015; //Setup the basic canvas void setup() { frameRate(60); size(400, 400); //Robot Starting Position robotX=width/2; robotY=height/2; //Robot Starting Speed; robotSpeedX=0; robotSpeedY=0; } //Create each function on the screen void draw() { robotSpeed(); robotFallSpeed(); robotPosition(); robotOnScreen(); robotFuel(); drawBackground(); drawStars(130, 10, 1); drawStars(290, 30, 1); drawStars(50, 50, 1); drawStars(230, 70, 1); drawStars(140, 100, 1); drawStars(350, 110, 1); drawStars(280, 120, 1); drawStars(80, 140, 1); drawStars(20, 160, 1); drawStars(240, 180, 1); drawStars(370, 210, 1); drawStars(80, 240, 1); drawStars(300, 280, 1); drawStars(100, 310, 1); drawGround(); drawHouse(); drawBuilding(); drawAsteroid(100, 60, 10, color(150)); drawAsteroid(260, 90, 0, color(150)); drawAsteroid(50, 140, 5, color(150)); drawRobot(); robotMovingHands(); } //Changes the horizontal and vertical speed of the robot depending on the key that is pressed void robotSpeed() { if (keyCode==UP) { robotSpeedY+=-.06; } else if (keyCode==RIGHT) { robotSpeedX+=.03; } else if (keyCode==LEFT) { robotSpeedX+=-.03; } else if (keyCode==DOWN) { robotSpeedY+=.04; } } //How Fast the Robot Falls From the Air when Descending void robotFallSpeed() { robotSpeedY+=gravity; } //Change Robot Position or Make the Robot Move void robotPosition() { robotX+=robotSpeedX; robotY+=robotSpeedY; } //Keep Robot on the Screen so that it can Always be Seen void robotOnScreen() { if (robotX>width) { robotSpeedX=0; robotX=width; } else if (robotX<0) { robotSpeedX=0; robotX=0; } if (robotY>height) { robotSpeedY=0; robotSpeedX=0; robotY=height; } else if (robotY<0) { robotSpeedY=0; robotY=0; } } //Use Exhaust When Robot is Moving (Flames Grow Bigger than when Stationary) void robotFuel() { if (keyPressed) { robotExhaustFlamesAmount=random(15, 30); robotExhaustFlamesSize=20; robotExhaustFlamesExtra=15; } else { robotExhaustFlamesAmount=random(3, 9); robotExhaustFlamesSize=12; robotExhaustFlamesExtra=5; } } //Draw Background (Colour the Background Black) void drawBackground() { background(0); } //Draw Flashing Stars in the Background void drawStars(int x, int y, int size) { float offset = size/1.5; stroke(random(50, 255)); point(x - offset, y - offset); } //Draw the Ground void drawGround() { stroke(0); fill(0, 0, 100); rect(0, 340, 400, 60); } //Draw a House in the Background void drawHouse() { //Draw House Body noStroke(); fill(50); rect(20, 300, 40, 40); //Draw House Door fill(0); rect(30, 330, 20, 10); //Draw House Roof fill(30); triangle(20, 300, 40, 280, 60, 300); //Draw House Window fill(random(200, 255), random(200, 255), random(0, 1)); rect(30, 300, 20, 20); stroke(0); line(40, 300, 40, 320); line(30, 310, 50, 310); //Draw Window Light Reflection on Ground noStroke(); fill(random(150, 200), random(150, 200), random(0, 1)); ellipse(40, 370, 40, 20); } //Draw a Building in the Background void drawBuilding() { //Draw Building Body noStroke(); fill(60); rect(320, 240, 60, 100); // Draw Building Door fill(0); rect(340, 320, 20, 20); //Draw Building Windows fill(150, 150, 0); rect(330, 250, 20, 20); stroke(0); line(340, 250, 340, 270); line(330, 260, 350, 260); noStroke(); fill(100, 100, 0); rect(330, 280, 20, 20); stroke(0); line(340, 280, 340, 300); line(330, 290, 350, 290); } //Create Asteroids in the Air void drawAsteroid(int asteroidX, int asteroidY, int size, color c) { float offset = size/2; //Draw Asteroid Flames fill(255, 255, 0); triangle(asteroidX - offset - 10, asteroidY - offset, asteroidX - offset - random(20, 40), asteroidY - offset - random(20, 40), asteroidX - offset, asteroidY - 15); fill(255, 165, 0); triangle(asteroidX - offset - 5, asteroidY - offset, asteroidX - offset - random(10, 25), asteroidY - offset - random(10, 25), asteroidX - offset, asteroidY - 10); //Draw Asteroid noStroke(); fill(c); ellipse(asteroidX, asteroidY, random(30, 40), random(30, 40)); //Draw Asteroid Craters fill(0); ellipse(asteroidX - offset - random(1, 5), asteroidY - offset - random(3, 5), 10, 10); ellipse(asteroidX - offset + random(1, 5), asteroidY - offset + random(1, 2.5), 7, 5); ellipse(asteroidX - offset - random(4, 8), asteroidY - offset + random(7, 12), 8, 7); } //Create the Robot void drawRobot() { //Draw Robot Body stroke(0); fill(230); rect(robotX, robotY, 20, 100); line(robotX, robotY + 90, robotX + 20, robotY + 90); line(robotX, robotY + 75, robotX + 20, robotY + 75); line(robotX, robotY + 60, robotX + 20, robotY + 60); fill(0); rect(robotX, robotY + 7, 20, 5); //Draw Robot Fuel Tank fill(230); rect(robotX - 40, robotY + 100, 100, 20); fill(150, 0, 0); rect(robotX - 40, robotY + 120, 100, 5); fill(0); ellipse(robotX - 30, robotY + 123, 18, 4); ellipse(robotX + 10, robotY + 123, 18, 4); ellipse(robotX + 50, robotY + 123, 18, 4); //Draw Robot Arms fill(230); rect(robotX - 20, robotY + 25, 60, 20); fill(150, 0, 0); rect(robotX - 40, robotY + 25, 20, 20); rect(robotX + 40, robotY + 25, 20, 20); //Draw Robot Light fill(random(150, 255), random(0, 1), random(0, 1)); ellipse(robotX + 10, robotY - 15, 5, 5); //Draw Robot Head fill(230); rect(robotX - 20, robotY - 15, 60, 20); fill(0); rect(robotX - 18, robotY - 12, 55, 15); fill(230); rect(robotX - 25, robotY - 10, 5, 10); rect(robotX + 40, robotY - 10, 5, 10); //Draw Robot Eyes fill(255, 0, 0); ellipse(robotX - 5, robotY - 5, 12, 12); ellipse(robotX + 25, robotY - 5, 12, 12); //Draw Robot Exhaust Flames fill(255, 255, 0); triangle(robotX - robotExhaustFlamesSize/2 - 35, robotY + 123, robotX + robotExhaustFlamesSize/2 - 20, robotY + 123, robotX - 27.5, robotY + robotExhaustFlamesAmount + robotExhaustFlamesExtra/2 + 130); fill(255, 165, 0); triangle(robotX - robotExhaustFlamesSize/2 + robotExhaustFlamesSize/4 - 35, robotY + 123, robotX + robotExhaustFlamesSize/2 + robotExhaustFlamesSize/4 - 28, robotY + 123, robotX - 27.5, robotY + robotExhaustFlamesAmount/3 + robotExhaustFlamesExtra/2 + 130); fill(255, 255, 0); triangle(robotX - robotExhaustFlamesSize/2 + 5, robotY + 123, robotX + robotExhaustFlamesSize/2 + 15, robotY + 123, robotX + 10, robotY + robotExhaustFlamesAmount + robotExhaustFlamesExtra + 130); fill(255, 165, 0); triangle(robotX - robotExhaustFlamesSize/2 + robotExhaustFlamesSize/4 + 5, robotY + 123, robotX + robotExhaustFlamesSize/2 + robotExhaustFlamesSize/4 + 8, robotY + 123, robotX + 10, robotY + robotExhaustFlamesAmount/3 + robotExhaustFlamesExtra + 130); fill(255, 255, 0); triangle(robotX - robotExhaustFlamesSize/2 + 40, robotY + 123, robotX + robotExhaustFlamesSize/2 + 55, robotY + 123, robotX + 50, robotY + robotExhaustFlamesAmount + robotExhaustFlamesExtra/2 + 130); fill(255, 165, 0); triangle(robotX - robotExhaustFlamesSize/2 + robotExhaustFlamesSize/4 + 40, robotY + 123, robotX + robotExhaustFlamesSize/2 + robotExhaustFlamesSize/4 + 48, robotY + 123, robotX + 49, robotY + robotExhaustFlamesAmount/3 + robotExhaustFlamesExtra/2 + 130); } //Move Robot Hands Up as Robot Ascends or moves Horizontally void robotMovingHands() { fill(150, 0, 0); if (keyCode==UP) { rect(robotX - 40, robotY + 5, 20, 20); rect(robotX + 40, robotY + 5, 20, 20); } else if (keyCode==RIGHT) { rect(robotX - 40, robotY + 5, 20, 20); rect(robotX + 40, robotY + 5, 20, 20); } else if (keyCode==LEFT) { rect(robotX - 40, robotY + 5, 20, 20); rect(robotX + 40, robotY + 5, 20, 20); } else { rect(robotX - 40, robotY + 45, 20, 20); rect(robotX + 40, robotY + 45, 20, 20); } }