/*Horse Free Jumping By: Marseilaise Perkins Assignment 2: Interactive Toy This is a horse free jump competition. The horse must jump over the hurdles. To play press 'w' to make the horse jump. using the mouse will make the clouds move - this is to show how fast the horse is going */ // VARIABLES \\ //sets the starting position for the hurdles float hurdleX; float hurdleY; //sets the starting position for the horse float horseY = 0; float horseAcc = 0; float railingX; float railingY; float cloud2X = random(0, 400); float cloud2Y = random(0, 250); //sets when the horse will jump. false = going up, true = going down boolean jumpStage = false; boolean jump = false; //sets up the canvas void setup() { size (400, 400); frameRate(60); noStroke(); rectMode(CENTER); //calls the hurdles into the setup so it continues to show up at the end of the window hurdleX = 500; hurdleY = 290; } //sets up the animation and objects that will continously be in frame void draw() { background(0); //sets the ground, area, and track to show continously area(); //keeps the hurdles looping if (hurdleX<-800) { hurdleX=200; hurdleY=400; } //keeps the cloud looping if (cloud2X<-300) { cloud2X=300; cloud2Y=150; } //this calls clouds2 into the frame clouds2(); //calls the lower railing into the frame looprailing(); //calls the upper railing into the frame looprailing2(); //the standing (or running position of the horse) in this position when the player does not press 'w'. if (jump == false) { //this is the function that is called when the player is not making the horse jump horseCanter(); //this means that when the horse jumps it will change. } else { //this is the funciton called when 'w' is pressed. horseLeap(); } //calls the Hurdle function to continously show in the canvas. This does not make the hurdles loop. hurdle(); //this is the second hurdle hurdle1(); //this function is the gravity of the horse jumping up vertically. gravity(); //this function is called to bring the clouds into the frame. clouds(); } //this function creates the railing to loop. void looprailing() { int railingX= 1; while (railingX<=width) { fill(117, 117, 117); rect(200, 340, 400, 2); rect(railingX , 345, 2, 10); rect(railingX, 345, 2, 10); rect(railingX, 345, 2, 10); railingX+=35; } } void looprailing2() { int railingX= 1; while (railingX<=width) { fill(117, 117, 117); rect(200, 290, 400, 2); rect(railingX , 295, 2, 10); rect(railingX, 295, 2, 10); rect(railingX, 295, 2, 10); railingX+=35; } } //this is the function for creating the sky, ground, and track void area() { fill(170, 251, 255); rect(200, 200, 400, 400); fill(211, 197, 143); rect(200, 350, 400, 100); fill(86, 155, 47); rect(200, 400, 400, 100); } //this is the function for creating the first short hurdle, also the speed for both hurdles. void hurdle() { fill(211, 31, 51); quad(180 + hurdleX, 288, 180 + hurdleX, 290, 200 + hurdleX, 300, 200 + hurdleX, 298); fill(255); rect(180 + hurdleX, 292, 4, 20); rect(200 + hurdleX, 296, 4, 22); //speed hurdles move at hurdleX = hurdleX + (-4); //this is the creation and coordinates of the second small hurdle. fill(211, 31, 51); quad(380 + hurdleX, 288, 380 + hurdleX, 290, 400 + hurdleX, 300, 400 + hurdleX, 298); fill(255); rect(380 + hurdleX, 292, 4, 20); rect(400 + hurdleX, 296, 4, 22); //this is the creation and coordinates of the third small hurdle. fill(211, 31, 51); quad(780 + hurdleX, 288, 780 + hurdleX, 290, 800 + hurdleX, 300, 800 + hurdleX, 298); fill(255); rect(780 + hurdleX, 292, 4, 20); rect(800 + hurdleX, 296, 4, 22); } //this is the creation and coordinates of the second large hurdle. void hurdle1() { fill(211, 31, 51); quad(200 + hurdleX, 275, 200 + hurdleX, 277, 221 + hurdleX, 289, 221 + hurdleX, 287); quad(200 + hurdleX, 288, 200 + hurdleX, 290, 220 + hurdleX, 302, 220 + hurdleX, 300); fill(255); rect(200 + hurdleX, 285, 4, 35); rect(220 + hurdleX, 294, 4, 40); //this is the creation of the secondthird large hurdle fill(211, 31, 51); quad(570 + hurdleX, 275, 570 + hurdleX, 277, 591 + hurdleX, 289, 591 + hurdleX, 287); quad(570 + hurdleX, 288, 570 + hurdleX, 290, 590 + hurdleX, 302, 590 + hurdleX, 300); fill(255); rect(570 + hurdleX, 285, 4, 35); rect(590 + hurdleX, 294, 4, 40); //this is the creation of the third large hurdle fill(211, 31, 51); quad(800 + hurdleX, 275, 800 + hurdleX, 277, 821 + hurdleX, 289, 821 + hurdleX, 287); quad(800 + hurdleX, 288, 800 + hurdleX, 290, 820 + hurdleX, 302, 820 + hurdleX, 300); fill(255); rect(800 + hurdleX, 285, 4, 35); rect(820 + hurdleX, 294, 4, 40); } //function to create the clouds void clouds() { //cloud1 follows mouse movement fill (233, 245, 244); ellipse(360+(mouseX - 360)*.9, 40,40, 35); ellipse(350+(mouseX - 360)*.9, 30, 30, 30); ellipse(360+(mouseX - 360)*.9, 50, 30, 30); ellipse(380+(mouseX - 360)*.9, 50, 40, 30); ellipse(360+(mouseX - 360)*.9, 60, 20, 20); ellipse(350+(mouseX - 360)*.9, 50, 30, 30); ellipse(335+(mouseX - 360)*.9, 40, 30, 20); ellipse(340+(mouseX - 360)*.9, 50, 30, 20); //cloud2 follows mouse movement fill(221, 245, 244); ellipse(280+(mouseX - 280)*.5, 100, 20, 20); ellipse(280+(mouseX - 280)*.5, 115, 30, 30); ellipse(280+(mouseX - 280)*.5, 125, 25, 25); ellipse(270+(mouseX - 280)*.5, 115, 40, 40); ellipse(265+(mouseX - 280)*.5, 105, 20, 20); ellipse(260+(mouseX - 280)*.5, 115, 40, 25); ellipse(260+(mouseX - 280)*.5, 125, 45, 20); ellipse(290+(mouseX - 280)*.5, 110, 30, 30); ellipse(290+(mouseX - 280)*.5, 120, 50, 35); } void clouds2() { fill(202, 238, 244); ellipse(cloud2X, cloud2Y, 20, 20); ellipse(cloud2X-15, cloud2Y-5, 30, 30); ellipse(cloud2X, cloud2Y+10, 25, 25); ellipse(cloud2X-20, cloud2Y+20, 40, 40); ellipse(cloud2X-30, cloud2Y-10, 20, 20); ellipse(cloud2X-30, cloud2Y, 40, 25); ellipse(cloud2X, cloud2Y, 45, 20); ellipse(cloud2X-40, cloud2Y, 40, 30); ellipse(cloud2X-35, cloud2Y+15, 50, 35); cloud2X = cloud2X + random(-2); } //this was the first function that helped to create horseleap void horseTrot() { //tail fill(56, 36, 9); triangle(26, 273, 18, 268, 11, 272); fill(78, 52, 17); triangle(26, 273, 16, 270, 9, 276); fill(107, 70, 18); triangle(26, 273, 14, 275, 10, 280); //FRONT left leg fill(215, 178, 128); quad(50, 285, 45, 285, 47, 293, 50, 292); fill(145, 116, 76); quad(50, 292, 47, 293, 50, 298, 52, 297); quad(52, 297, 50, 298, 50, 300, 54, 300); fill(56, 45, 29); quad(54, 300, 50, 300, 51, 302, 55, 302); //BACK left leg fill(221, 182, 129); quad(33, 284, 29, 280, 22, 288, 25, 290); fill(156, 124, 80); quad(22, 288, 20, 289, 21, 291, 25, 290); fill(145, 116, 76); quad(24, 290, 21, 291, 21, 294, 24, 296); quad(24, 296, 21, 294, 19, 296, 20, 298); fill(56, 45, 29); triangle(20, 298, 19, 296, 16, 297); //hair fill(56, 36, 9); quad(52, 266, 47, 261, 40, 270, 44, 276); //neck, chest, body, bum fill(202, 166, 117); quad(55, 271, 52, 267, 43, 275, 51, 281); ellipse(46, 281, 12, 12); quad(43, 275, 28, 273, 29, 283, 45, 287); ellipse(28, 279, 13, 13); //ear right fill(136, 109, 73); triangle(50, 266, 52, 265, 50, 262); //head and muzzle fill(221, 186, 136); ellipse(53, 269, 8, 8); quad(57, 266, 54, 273, 58, 273, 60, 270); quad(60, 270, 58, 273, 59, 274, 62, 271); //ear left fill(136, 109, 73); triangle(52, 265, 55, 265, 55, 262); //eye fill(0); ellipse(54, 269, 1.5, 1.5); //FRONT right leg fill(234, 194, 139); ellipse(45, 283, 5, 5); quad(45, 284, 43, 287, 48, 289, 50, 288); fill(200, 164, 115); quad(49, 287, 48, 288, 48, 291, 50, 291); quad(50, 291, 48, 291, 45, 293, 46, 295); quad(46, 295, 45, 293, 41, 293, 41, 295); fill(56, 45, 29); triangle(41, 295, 41, 293, 38, 295); //BACK right leg fill(234, 194, 139); ellipse(24, 283, 9, 10); quad(27, 288, 24, 288, 24, 291, 26, 294); fill(200, 164, 115); quad(26, 294, 24, 291, 22, 296, 25, 297); fill(180, 147, 102); quad(25, 297, 22, 296, 24, 299, 26, 299); fill(56, 45, 29); quad(26, 299, 24, 299, 25, 302, 29, 302); } //created the function horseCanter and its coordinates. void horseCanter() { //tail fill(56, 36, 9); triangle(23, 278, 14, 276, 9, 280); fill(78, 52, 17); triangle(23, 278, 12, 279, 8, 284); fill(107, 70, 18); triangle(23, 278, 15, 280, 10, 288); //BACK left leg fill(215, 178, 128); quad(25, 284, 23, 281, 16, 286, 18, 288); fill(145, 116, 76); quad(18, 288, 16, 286, 14, 287, 15, 290); quad(15, 290, 14, 287, 10, 294, 12, 296); fill(56, 45, 29); quad(12, 296, 10, 294, 9, 296, 13, 297); //FRONT left leg fill(200, 164, 115); quad(49, 283, 48, 288, 55, 290, 57, 287); quad(60, 293, 57, 287, 55, 290, 56, 294); fill(180, 147, 102); quad(60, 293, 57, 294, 57, 296, 60, 297); fill(56, 45, 29); quad(60, 297, 57, 296, 56, 298, 59, 299); //hair fill(56, 36, 9); quad(52, 266, 45, 264, 38, 273, 44, 276); //neck, chest, body, bum fill(202, 166, 117); quad(55, 271, 52, 267, 43, 275, 51, 281); ellipse(46, 281, 12, 12); quad(43, 275, 28, 273, 29, 283, 45, 287); ellipse(28, 279, 13, 13); //ear right fill(136, 109, 73); triangle(50, 266, 52, 265, 50, 262); //head and muzzle fill(221, 186, 136); ellipse(53, 269, 8, 8); quad(57, 266, 54, 273, 58, 273, 60, 270); quad(60, 270, 58, 273, 59, 274, 62, 271); //ear left fill(136, 109, 73); triangle(52, 265, 55, 265, 55, 262); //eye fill(0); ellipse(54, 269, 1.5, 1.5); //FRONT right leg fill(234, 194, 139); ellipse(47, 285, 5, 5); quad(50, 285, 45, 283, 45, 293, 48, 293); fill(200, 164, 115); quad(48, 293, 45, 293, 45, 300, 47, 300); fill(56, 45, 29); quad(47, 300, 45, 300, 45, 302, 48, 302); //BACK right leg fill(221, 182, 129); quad(30, 285, 25, 285, 26, 288, 29, 290 ); fill(156, 124, 80); quad(29, 289, 26, 288, 23, 291, 27, 292); fill(145, 116, 76); quad(27, 292, 23, 291, 25, 295, 27, 294); quad(27, 294, 25, 295, 26, 299, 30, 299); fill(56, 45, 29); quad(30, 299, 26, 299, 26, 301, 32, 301); fill(234, 194, 139); ellipse(27, 282, 9, 10); } //created the gravity function void gravity() { if (jump == true) { if (jumpStage == false) { //this is how fast the horse accelerates up horseAcc -= 0.5; if (horseAcc <= 0) { jumpStage = true; } horseY -= horseAcc; } else { //how fast the horse comes down horseAcc += 0.5; if (horseAcc >= 9) { jumpStage = false; jump = false; horseY = 0; } horseY += horseAcc; } } } //creation of the horseLeap function and its coordinates void horseLeap() { //tail fill(56, 36, 9); triangle(26, 273 + horseY, 18, 268 + horseY, 11, 272 + horseY); fill(78, 52, 17); triangle(26, 273 + horseY, 16, 270 + horseY, 9, 276 + horseY); fill(107, 70, 18); triangle(26, 273 + horseY, 14, 275 + horseY, 10, 280 + horseY); //FRONT left leg fill(215, 178, 128); quad(50, 285 + horseY, 45, 285 + horseY, 47, 293 + horseY, 50, 292 + horseY); fill(145, 116, 76); quad(50, 292 + horseY, 47, 293 + horseY, 50, 298 + horseY, 52, 297 + horseY); quad(52, 297 + horseY, 50, 298 + horseY, 50, 300 + horseY, 54, 300 + horseY); fill(56, 45, 29); quad(54, 300 + horseY, 50, 300 + horseY, 51, 302 + horseY, 55, 302 + horseY); //BACK left leg fill(221, 182, 129); quad(33, 284 + horseY, 29, 280 + horseY, 22, 288 + horseY, 25, 290 + horseY); fill(156, 124, 80); quad(22, 288 + horseY, 20, 289 + horseY, 21, 291 + horseY, 25, 290 + horseY); fill(145, 116, 76); quad(24, 290 + horseY, 21, 291 + horseY, 21, 294 + horseY, 24, 296 + horseY); quad(24, 296 + horseY, 21, 294 + horseY, 19, 296 + horseY, 20, 298 + horseY); fill(56, 45, 29); triangle(20, 298 + horseY, 19, 296 + horseY, 16, 297 + horseY); //hair fill(56, 36, 9); quad(52, 266 + horseY, 47, 261 + horseY, 40, 270 + horseY, 44, 276 + horseY); //neck, chest, body, bum fill(202, 166, 117); quad(55, 271 + horseY, 52, 267 + horseY, 43, 275 + horseY, 51, 281 + horseY); ellipse(46, 281 + horseY, 12, 12); quad(43, 275 + horseY, 28, 273 + horseY, 29, 283 + horseY, 45, 287 + horseY); ellipse(28, 279 + horseY, 13, 13); //ear right fill(136, 109, 73); triangle(50, 266 + horseY, 52, 265 + horseY, 50, 262 + horseY); //head and muzzle fill(221, 186, 136); ellipse(53, 269 + horseY, 8, 8); quad(57, 266 + horseY, 54, 273 + horseY, 58, 273 + horseY, 60, 270 + horseY); quad(60, 270 + horseY, 58, 273 + horseY, 59, 274 + horseY, 62, 271 + horseY); //ear left fill(136, 109, 73); triangle(52, 265 + horseY, 55, 265 + horseY, 55, 262 + horseY); //eye fill(0); ellipse(54, 269 + horseY, 1.5, 1.5); //FRONT right leg fill(234, 194, 139); ellipse(45, 283 + horseY, 5, 5); quad(45, 284 + horseY, 43, 287 + horseY, 48, 289 + horseY, 50, 288 + horseY); fill(200, 164, 115); quad(49, 287 + horseY, 48, 288 + horseY, 48, 291 + horseY, 50, 291 + horseY); quad(50, 291 + horseY, 48, 291 + horseY, 45, 293 + horseY, 46, 295 + horseY); quad(46, 295 + horseY, 45, 293 + horseY, 41, 293 + horseY, 41, 295 + horseY); fill(56, 45, 29); triangle(41, 295 + horseY, 41, 293 + horseY, 38, 295 + horseY); //BACK right leg fill(234, 194, 139); ellipse(24, 283 + horseY, 9, 10); quad(27, 288 + horseY, 24, 288 + horseY, 24, 291 + horseY, 26, 294 + horseY); fill(200, 164, 115); quad(26, 294 + horseY, 24, 291 + horseY, 22, 296 + horseY, 25, 297 + horseY); fill(180, 147, 102); quad(25, 297 + horseY, 22, 296 + horseY, 24, 299 + horseY, 26, 299 + horseY); fill(56, 45, 29); quad(26, 299 + horseY, 24, 299 + horseY, 25, 302 + horseY, 29, 302 + horseY); } //sets up what happens when a key is pressed specifically key 'w' void keyPressed() { if (jump == false) { if (key == 'w' || key == 'W') { horseAcc = 8.5; jump = true; } } }