//Survive 60 seconds Created by yulin Wang //Rules: Move mouse to controll the blue ball, avoid red balls as long as possible //yellow bar shows the time, when it extends fully to the edge. It is 60 seconds. //Dark red ball is the mother ball, mother ball doesn't change speed. //Light red balls are children, children can increase the speed by hitting left and right side wall and // hit mother ball, the direction will change as well. //Set up windows size, and shape mode and color mode. void setup() { size(600, 600); ellipseMode(CENTER); smooth(); noCursor(); colorMode(RGB); } // Set up different variables // variable for enemy1 float e1X=0; float e1Y=random(120, 480); float x1Direction=1; float y1Direction=1; float e1Speed=4; //variable for enemy2(mother ball) float e2X=10; float e2Y=random(150, 450); float x2Direction=1; float y2Direction=1; float e2Speed=4; //variable for enemy3 float e3X=600; float e3Y=random(220, 380); float x3Direction=1; float y3Direction=1; float e3Speed=3.5; //variable for mouse moving area int areaDown=500; int areaUp=100; float narrowSpeed=0.01; //variable for ball size int sizeAmount=30; //variable for game over boolean gameOver=false; //Draw background, scorebar, wall, player //Draw enemy2 at the begining, show enemy1 10 seconds, show enemy3 at 20 second void draw() { back(); scoreBar(); wall(); player(); if (frameCount/60>10) { enemy1(); } enemy2(); if (frameCount/60>20) { enemy3(); } doGameOver(); overScreen(); } //Game Over If player hit any of the enemy, game over. Show black screen and text void doGameOver() { //Game over if (frameCount/60>10 && mouseX<e1X+20 && mouseX>e1X-20 && mouseY<e1Y+20 && mouseY>e1Y-20) { gameOver=true; } if (mouseX<e2X+20 && mouseX>e2X-20 && mouseY<e2Y+20 && mouseY>e2Y-20) { gameOver=true; } if (frameCount/60>30 && mouseX<e3X+20 && mouseX>e3X-20 && mouseY<e3Y+20 && mouseY>e3Y-20) { gameOver=true; } } //If game is over, show the over screen void overScreen() { if (gameOver==true) { background(0); textSize(50); text("GameOver", 185, 300); } else { //println(frameCount/60); } } //Player, mouse location is limited within the wall. void player() { while ( mouseY>areaDown) { mouseY=areaDown; } while ( mouseY<areaUp) { mouseY=areaUp; } fill(50, 50, 50, 150); ellipse(pmouseX, pmouseY, sizeAmount+2, sizeAmount+2); noStroke(); fill(68, 123, 216, 150); ellipse(mouseX, mouseY, sizeAmount+5, sizeAmount+5); fill(68, 123, 216); ellipse(mouseX, mouseY, sizeAmount-3, sizeAmount-3); stroke(255); strokeWeight(5); line(mouseX, mouseY, pmouseX, pmouseY); } //Enemy1 ,speed increase and change direction when hit side walls or mother ball. When the hit player, game over. void enemy1() { noStroke(); fill(230, 62, 62); ellipse(e1X, e1Y, sizeAmount-5, sizeAmount-5); e1X=e1X+(e1Speed*x1Direction); e1Y=e1Y+(e1Speed*y1Direction); if (e1Y>areaDown) { e1Y=areaDown; y1Direction*=-1; } if (e1Y<areaUp) { e1Y=areaUp; y1Direction*=-1; } if (e1X>600 || e1X<0 ) { x1Direction*=-1; } if ( abs(e1Y-e2Y)<15 && abs(e1X-e2X)<15) { y1Direction*=-1; x1Direction*=-1; } if (abs(e1Y-e2Y)<15 && abs(e1X-e2X)<15 || e1X>600 || e1X<0 ) { e1Speed=e1Speed+0.2; } if (e1Speed>=13) { e1Speed=13; } } //Enemy2 Mother ball show at the beginning of the game Speed doesn't change void enemy2() { noStroke(); fill(120, 12, 12); ellipse(e2X, e2Y, sizeAmount-2, sizeAmount-2); e2X=e2X+(e2Speed*x2Direction); e2Y=e2Y-(e2Speed*y2Direction); if (e2Y>areaDown) { e2Y=areaDown; y2Direction*=-1; } if (e2Y<areaUp) { e2Y=areaUp; y2Direction*=-1; } if (e2X>600 || e2X<0) { x2Direction*=-1; } } //Enemy3 ,speed increase and change direction when hit side walls or mother ball. When the hit player, game over. void enemy3() { noStroke(); fill(230, 62, 62); ellipse(e3X, e3Y, sizeAmount-5, sizeAmount-5); e3X=e3X+(e3Speed*x3Direction); e3Y=e3Y+(e3Speed*y3Direction); if (e3Y>areaDown) { e3Y=areaDown; y3Direction*=-1; } if (e3Y<areaUp) { e3Y=areaUp; y3Direction*=-1; } if (e3X>600 || e3X<0 ) { x3Direction*=-1; } if ( abs(e3Y-e2Y)<15 && abs(e3X-e2X)<15) { y3Direction*=-1; x3Direction*=-1; } if (abs(e3Y-e2Y)<150 && abs(e3X-e2X)<15 || e3X>600 || e3X<0 ) { e3Speed=e3Speed+0.2; } if (e3Speed>=13) { e3Speed=13; } } // set background void back(){ background(100, 116, 100); rectMode(CORNER); } //Set function wall void wall() { rectMode(CORNER); fill(72, 90, 118); rect(0, 0, 600, areaUp-sizeAmount+10); rectMode(CORNER); fill(72, 90, 118); rect(0, areaDown+sizeAmount-10, 600, 600); if (frameCount/60>=10) { areaUp=120; areaDown=480; } if (frameCount/60>=20) { areaUp=150; areaDown=450; } if (frameCount/60>=30) { areaUp=175; areaDown=425; } if (frameCount/60>=40) { areaUp=190; areaDown=410; } } //Set function score bar, it extend when time moves on void scoreBar() { rectMode(CENTER); fill(250, 222, 60); rect(300, 300, frameCount/6, 500); }