/* * PROG14998: INTRODUCTION TO MEDIA COMPUTING * FALL 2018, PROF: NICOLAS HESLER * * BY TING PEI CHEN (ZOE) * * ABOUT: * Move the block with your mouse to collect coins. * Avoid the spikes. * */ /* ALL VARIABLES */ boolean death = true; //if death is true, draw start screen /* PARTICLE VARIABLES */ //particles for coin A float particlePathA = 0; //particle path on the x-axis float particleFlingA = 15; //particle fling altitude //particles for coin B float particlePathB = 0; //particle path on the x-axis float particleFlingB = 15; //particle fling altitude //particles for coin C float particlePathC = 0; //particle path on the x-axis float particleFlingC = 15; //particle fling altitude //particles for coin D float particlePathD = 0; //particle path on the x-axis float particleFlingD = 15; //particle fling altitude /*COINS VARIABLES*/ //global coin variables float coinRadius = 10; //radius of the coins boolean flipped = true; //if flipped is true, span coin boolean coinCollision = false; //if true, call collision function int coinSpeedIncrement = 1; //the speed increment per level //coin A variables float randomYcoinA; //random y value for coin A float coinSpeedA = 0; //coinSpeed of coin A float flipSpeedA = 1; //coinSpeed of coin flip float fillA = 155; //fill of coin A boolean collectA = false; //true if coin has been collected //coin B variables float randomYcoinB; //random y value for coin B float coinSpeedB = 0; //coinSpeed of coin B float flipSpeedB = 1; //coinSpeed of coin flip float fillB = 255; //fill of coin A boolean collectB = false; //true if coin has been collected //coin C variables float randomYcoinC; //random y value for coin C float coinSpeedC = 0; //coinSpeed of coin C float flipSpeedC = 1; //coinSpeed of coin flip float fillC = 255; //fill of coin A boolean collectC = false; //true if coin has been collected //coin D variables float randomYcoinD; //random y value for coin D float coinSpeedD = 0; //coinSpeed of coin D float flipSpeedD = 1; //coinSpeed of coin flip float fillD = 255; //fill of coin A boolean collectD = false; //true if coin has been collected void setup() { size(400, 400); rectMode(CENTER); ellipseMode(CORNERS); fill(255); } void draw() { background(0); noStroke(); checkDeath(); //check if player is dead if (death == true) { //if player is dead, draw start screen drawScreen(); } else { drawSpikes(); collision(); collection(); updateCoinA(); drawCoinA(); updateCoinB(); drawCoinB(); updateCoinC(); drawCoinC(); updateCoinD(); drawCoinD(); drawHead(); } } /* EVENTS */ void mousePressed() { //on click, draw toy screen death = false; } void keyPressed() { //on press, add coin speed coinSpeedIncrement = coinSpeedIncrement + 1; } /*CHECK FUNCTIONS*/ void checkDeath() { //check death //if cursor goes above 370px or below 45px on the y-axis, set death to true and reset coin position if (mouseY < 45 || mouseY > 370) { death = true; coinSpeedIncrement = 1; } } void collision() { //check collision and set collection value to true if ( //coin must be within the cursor area by 20px on both x-axis and y-axis to be collected (((width + coinRadius - coinSpeedA) - mouseX) < 20) && ((mouseX - (width + coinRadius - coinSpeedA)) < 20) && (((randomYcoinA + coinRadius) - mouseY) < 20) && ((mouseY - (randomYcoinA + coinRadius)) < 20) ) { collectA = true; } if ( //coin must be within the cursor area by 20px on both x-axis and y-axis to be collected (((100 + width + coinRadius - coinSpeedB) - mouseX) < 20) && ((mouseX - (100 + width + coinRadius - coinSpeedB)) < 20) && (((randomYcoinB + coinRadius) - mouseY) < 20) && ((mouseY - (randomYcoinB + coinRadius)) < 20) ) { collectB = true; } if ( //coin must be within the cursor area by 20px on both x-axis and y-axis to be collected (((200 + width + coinRadius - coinSpeedC) - mouseX) < 20) && ((mouseX - (200 + width + coinRadius - coinSpeedC)) < 20) && (((randomYcoinC + coinRadius) - mouseY) < 20) && ((mouseY - (randomYcoinC + coinRadius)) < 20) ) { collectC = true; } if ( //coin must be within the cursor area by 20px on both x-axis and y-axis to be collected (((300 + width + coinRadius - coinSpeedD) - mouseX) < 20) && ((mouseX - (300 + width + coinRadius - coinSpeedD)) < 20) && (((randomYcoinD + coinRadius) - mouseY) < 20) && ((mouseY - (randomYcoinD + coinRadius)) < 20) ) { collectD = true; } } void collection() { //if collection of the coin is true, coin will disappear and fall off using particle if (collectA == true) { fillA = 0; //appear black drawParticlesA(); } else { fillA = 255; //appear white when false } if (collectB == true) { fillB = 0; //appear black drawParticlesB(); } else { fillB = 255; //appear white when false } if (collectC == true) { fillC = 0; //appear black drawParticlesC(); } else { fillC = 255; //appear white when false } if (collectD == true) { fillD = 0; //appear black drawParticlesD(); } else { fillD = 255; //appear white when false } } /* DRAW FUNCTIONS*/ void drawScreen() { background(0); textSize(32); text("Click to Start", 100, 200); //use text to tell player how to start } void drawSpikes() { fill(#392626); //for as long as i is inside canvas on the x-axis, continue to draw spikes for (int i = 0; i < height; i = i + 10) { triangle(i, 0, i+5, 45, i+10, 0); triangle(i, height, i+5, 370, i+10, height); } fill(255); //set fill back to white } void drawHead() { //make sure head is white fill(255); //head of worm will follow previous mouse position rect(pmouseX, pmouseY, 40, 40, 10); } //coin A void drawCoinA() { //draw the coin thickness and the coin ellipse //draw coin according to specified positions rect(width + coinRadius - coinSpeedA, randomYcoinA + coinRadius, 3, 2*coinRadius, 3); ellipse(width - coinSpeedA + flipSpeedB, randomYcoinA, width + 2*coinRadius - coinSpeedA - flipSpeedB, randomYcoinA + 2*coinRadius); } //coin B void drawCoinB() { //draw the coin thickness and the coin ellipse //offset coin by 100px and draw coin according to specified positions rect(100 + width + coinRadius - coinSpeedB, randomYcoinB + coinRadius, 3, 2*coinRadius, 3); ellipse(100 + width - coinSpeedB + flipSpeedB, randomYcoinB, 100 + width + 2*coinRadius - coinSpeedB - flipSpeedB, randomYcoinB + 2*coinRadius); } //coin C void drawCoinC() { //draw the coin thickness and the coin ellipse //offset coin by 200px and draw coin according to specified positions rect(200 + width + coinRadius - coinSpeedC, randomYcoinC + coinRadius, 3, 2*coinRadius, 3); ellipse(200 + width - coinSpeedC + flipSpeedC, randomYcoinC, 200 + width + 2*coinRadius - coinSpeedC - flipSpeedC, randomYcoinC + 2*coinRadius); } //coin D void drawCoinD() { //draw the coin thickness and the coin ellipse //offset coin by 300px and draw coin according to specified positions rect(300 + width + coinRadius - coinSpeedD, randomYcoinD + coinRadius, 3, 2*coinRadius, 3); ellipse(300 + width - coinSpeedD + flipSpeedD, randomYcoinD, 300 + width + 2*coinRadius - coinSpeedD - flipSpeedD, randomYcoinD + 2*coinRadius); } //particles void drawParticlesA() { //set mode to center ellipseMode(CENTER); //moving particle on path ellipse(width + coinRadius - coinSpeedA + particlePathA, randomYcoinA + coinRadius + (particlePathA*particlePathA)-(particleFlingA*particlePathA), 15, 15); particlePathA = particlePathA + 1; //set mode back to corners ellipseMode(CORNERS); } void drawParticlesB() { //set mode to center ellipseMode(CENTER); //moving particle on path ellipse(100 + width + coinRadius - coinSpeedB + particlePathB, randomYcoinB + coinRadius + (particlePathB*particlePathB)-(particleFlingB*particlePathB), 15, 15); particlePathB = particlePathB + 1; //set mode back to corners ellipseMode(CORNERS); } void drawParticlesC() { //set mode to center ellipseMode(CENTER); //moving particle on path ellipse(200 + width + coinRadius - coinSpeedC + particlePathC, randomYcoinC + coinRadius + (particlePathC*particlePathC)-(particleFlingC*particlePathC), 15, 15); particlePathC = particlePathC + 1; //set mode back to corners ellipseMode(CORNERS); } void drawParticlesD() { //set mode to center ellipseMode(CENTER); //moving particle on path ellipse(300 + width + coinRadius - coinSpeedD + particlePathD, randomYcoinD + coinRadius + (particlePathD*particlePathD)-(particleFlingD*particlePathD), 15, 15); particlePathD = particlePathD + 1; //set mode back to corners ellipseMode(CORNERS); } /*UPDATE FUNCTIONS*/ //coin A void updateCoinA() { fill(fillA); if (width - coinSpeedA + flipSpeedA == width + 1) { //everytime the coin repositions, assign new y-axis randomYcoinA = random(60, 350); } else if (width + 2*coinRadius - coinSpeedA - flipSpeedA < 0) { //if the coin has run out of screen, reposition and reset coinSpeedA = 0; collectA = false; particlePathA = 0; } if (flipSpeedA < coinRadius && flipped == true) { //if coin is flipped, unflip coin flipSpeedA++; } else if (flipSpeedA == 0) { //if coin becomes unflipped, proceed to flip coin again flipped = true; } else { //otherwise, continue to unflip coin flipSpeedA--; flipped = false; } //the coin shall move coinSpeedA = coinSpeedA + coinSpeedIncrement; } //coin B void updateCoinB() { fill(fillB); if (100 + width - coinSpeedB + flipSpeedB == width + 101) { //everytime the coin repositions, assign new y-axis randomYcoinB = random(60, 350); } else if (100 + width + 2*coinRadius - coinSpeedB - flipSpeedB < 0) { //if the coin has run out of screen, reposition and reset coinSpeedB = 100; collectB = false; particlePathB = 0; } if (flipSpeedB < coinRadius && flipped == true) { //if coin is flipped, unflip coin flipSpeedB++; } else if (flipSpeedB == 0) { //if coin becomes unflipped, proceed to flip coin again flipped = true; } else { //otherwise, continue to unflip coin flipSpeedB--; flipped = false; } //the coin shall move coinSpeedB = coinSpeedB + coinSpeedIncrement; } //coin C void updateCoinC() { fill(fillC); if (200 + width - coinSpeedC + flipSpeedC == width + 201) { //everytime the coin repositions, assign new y-axis randomYcoinC = random(60, 350); } else if (200 + width + 2*coinRadius - coinSpeedC - flipSpeedC < 0) { //if the coin has run out of screen, reposition and reset coinSpeedC = 200; collectC = false; particlePathC = 0; } if (flipSpeedC < coinRadius && flipped == true) { //if coin is flipped, unflip coin flipSpeedC++; } else if (flipSpeedC == 0) { //if coin becomes unflipped, proceed to flip coin again flipped = true; } else { //otherwise, continue to unflip coin flipSpeedC--; flipped = false; } //the coin shall move coinSpeedC = coinSpeedC + coinSpeedIncrement; } //coin D void updateCoinD() { fill(fillD); if (300 + width - coinSpeedD + flipSpeedD == width + 301) { //everytime the coin repositions, assign new y-axis randomYcoinD = random(60, 350); } else if (300 + width + 2*coinRadius - coinSpeedD - flipSpeedD < 0) { //if the coin has run out of screen, reposition and reset coinSpeedD = 300; collectD = false; particlePathD = 0; } if (flipSpeedD < coinRadius && flipped == true) { //if coin is flipped, unflip coin flipSpeedD++; } else if (flipSpeedD == 0) { //if coin becomes unflipped, proceed to flip coin again flipped = true; } else { //otherwise, continue to unflip coin flipSpeedD--; flipped = false; } //the coin shall move coinSpeedD = coinSpeedD + coinSpeedIncrement; }