///////////////////////////////////////////////////////////////// // // // // // // // Helicopter vs Alien // // // // // // - Move the helicopter up and down by pressing 'w' and 's' - // // // // - Move to the right by pressing 'd' - // // // // - Shoot by pressing 'SPACE' - // // // // // // // // by: Joshua Jewer // // // // // // // ///////////////////////////////////////////////////////////////// float river = 0; float streamX = 0; float streamXRandom = random(0, 200); float streamY = random(height*2-12.5, height*2-25); float streamYRandom = random(height*2, height*2+25); float streamLength = random(0, 100); float streamLengthPt2 = random(0, 100); float streamFat = random(5, 25); float streamFatty = random(5, 25); float cloudXRandom = random (0, 250); float cloudX = 0; float cloudY = random(0, 400); float cloudYRandom = random (0, height); float cloudSizeX = random (75, 175); float cloudSizeXx = random (75, 175); float cloudSizeY = random (50, 150); float cloudSizeYy = random (50, 150); float alienX = 0; float alienY = random(height/4+25, height-25); float heliFlicker = random (200, 255); float heliFlickerPt2 = random(175, 150); int heliX = 0; int heliY = 0; void setup() { size (400, 400); smooth(); } void keyPressed() { moveAll(); resetAll(); moveHeli(); shootGun(); shootGun(); } void draw() { frameRate(90); rectMode(CENTER); ellipseMode(CENTER); background(113, 175, 21); alienShot(); //Draw the river fill(200); for (int riverOut= 0; riverOut <= width/2; riverOut++) { //Shore of river strokeWeight(5); stroke(206, 135, 53); fill(0, 202, 221); rect(river+riverOut, height/2, width*2, 100); } for (int riverIn = 0; riverIn <= width/2; riverIn++) { //River body noStroke(); fill(175); fill(0, 233, 255); rect(river+riverIn, height/2, width*2, 80); } //Draw the streams in river for (int streamL = 0; streamL <= width/4; streamL++) { streamL += 10; strokeWeight(streamFat); stroke(214, 255, 241, 200); line(streamX+width, streamY+sin(frameCount/22.5)*2.5+cos(frameCount/22.5)*2.5, streamX+width+streamLength, streamY+sin(frameCount/22.5)*2.5+cos(frameCount/22.5)*2.5); strokeWeight(1); } for (int streamL = 0; streamL <= width/4; streamL++) { streamL += 10; strokeWeight(streamFatty); stroke(214, 255, 241, 200); line(streamX+streamXRandom+width, streamYRandom+sin(frameCount/22.5)*2.5+cos(frameCount/22.5)*2.5, streamX+streamXRandom+width+streamLengthPt2, streamYRandom+sin(frameCount/22.5)*2.5+cos(frameCount/22.5)*2.5); //the streams sway up and down strokeWeight(1); } if (streamX >= -275-width) { streamX -= 0.125; } //Draw the helicopter fill(99, 99, 99); stroke(0); rect(heliX+width/10+sin(frameCount/22.5)*2.5, heliY+height/2+cos(frameCount/22.5)*5, 10, 15); rect(heliX+width/10-2+sin(frameCount/22.5)*2.5, heliY+height/2+cos(frameCount/22.5)*5, 35, 5); strokeWeight(1); line(heliX+width/10+15+sin(frameCount/22.5)*2.5, heliY+height/2+cos(frameCount/22.5)*5, heliX+width/10+20+sin(frameCount/22.5)*2.5, heliY+height/2+cos(frameCount/22.5)*5); //sin and cos make helicopter sway up and down noStroke(); fill(heliFlickerPt2, heliFlickerPt2, heliFlickerPt2, heliFlicker); ellipse(heliX+width/10+sin(frameCount/22.5)*2.5, heliY+height/2+cos(frameCount/22.5)*5, 25, 25); ellipse(heliX+width/18.5+sin(frameCount/22.5)*2.5, heliY+height/2+4.5+cos(frameCount/22.5)*5, 10, 4); heliFlicker = random(200, 255); heliFlickerPt2 = random(175, 150); //Draw the alien strokeWeight(2); stroke(38, 255, 164); fill(167, 170, 169); ellipse(alienX+width, alienY+sin(frameCount/22.5)*2.5+cos(frameCount/22.5)*2.5, 50, 50); //alien sways up and down strokeWeight(1); stroke(0); fill(38, 255, 164); ellipse(alienX+width, alienY+sin(frameCount/22.5)*2.5+cos(frameCount/22.5)*2.5, 10, 10); if (alienX >= -100-width) { //Alien moves closer alienX -= 0.75; } //Draw the clouds fill(255, 200); noStroke(); ellipse(cloudX+width, cloudY, cloudSizeX, cloudSizeY); ellipse(cloudX+width+cloudXRandom, cloudYRandom, cloudSizeXx, cloudSizeYy); stroke(0); if (cloudX >= -275-width) { //clouds move with wind cloudX -= 0.25; cloudY += 0.05; cloudYRandom += 0.05; } } //Move the Helicopter right (but actually moving all of the background to the left) void moveAll() { if (key == 'd') { river -= 2.5; streamX -= 2.5; cloudX -= 5; alienX -= 5; } } void moveHeli() { if (key == 'w') { heliY -= 5; } if (key == 's') { heliY += 5; } //Helicopter Constraints heliY = constrain(heliY, -175, 175); } //Reset everything that passes the left of the screen void resetAll() { if (river <= -width/2) { river = 0; } if (streamX <= -width-275) { streamX = width/4; //make it all random again streamXRandom = random(0, 200); streamYRandom = random(height/2, height/2+25); streamFat = random(5, 25); streamFatty = random(5, 25); } if (alienX <= -600) { alienX = 50; //random again alienY = random(height/4+25, height-25); } if (cloudX <= -275-width) { cloudX = 100; //random again cloudXRandom = random (0, 250); cloudY = random(0, 400); cloudSizeX = random (75, 175); cloudSizeY = random (50, 150); } } //Shoot your guns void shootGun() { if (key == ' ') { frameRate(15); stroke(255, 187, 0, 125); fill(255, 212, 0, 150); ellipse(heliX+width/10-2+sin(frameCount/22.5)*2.5+190, heliY+height/2+cos(frameCount/22.5)*5, 340, 5); stroke(0); } } //Gun collision void alienShot() { if (heliY+175 >= (alienY)-(45) && heliY+175 <= (alienY)+(10) && (key == ' ')) { alienX = 50; alienY = random(height/4+25, height-25); } }