Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
      WE COME IN HATE
 by Mustafa Kirgul
 
 The world is occupied by aliens. They come through a wormhole.
 You manage to steal a UFO. It is time to attack back. Try to close the
 wormhole, and save the earth.
 
 Control UFO by keys "W,A,S,D". You can also move diagonally.
 Control UFO's laser by left click. You have limited ammo and range. Ammo regenerates.
 Beam your UFO to anywhere on screen by right click. You have limited beam power. It regenerates in time.
 
 Kill enemies.
 
 Collect Blue Boxes of Energy to gain health and shrink Wormhole.
 
 You have 8 seconds to collect each box, other wise the wormhole will use the box's energy to grow.
 
 Close the wormhole, save the earth.
 
 */

//-----------------------------------------------GLOBAL_VARIABLES
boolean waveDown=true;
boolean startSign=false;
boolean edge=false;
boolean NORTH, SOUTH, WEST, EAST;
boolean playGame=false;
boolean startable=false;
boolean enemy1Active=false;
boolean enemy2Active=false;
boolean enemy3Active=false;
boolean enemy4Active=false;
boolean enemy5Active=false;
boolean powerBox=false;

int ECGy=-200;
int text=0;
int textY=0;
int textX=0;
int returnAlpha=0;
int millisCheck=0;
int beamLimit=5;
int beam=beamLimit;
int beamtime=millis();
int laserLimit=50;
int laser=laserLimit;
int lasertime=millis();
int laserRange=200;
int holeSize=20;
int mainCounter=0;
int enemy1Alpha=0;
int enemy2Alpha=0;
int enemy3Alpha=0;
int enemy4Alpha=0;
int enemy5Alpha=0;
int enemy1Laser=6;
int enemy2Laser=6;
int enemy3Laser=6;
int enemy4Laser=6;
int enemy5Laser=6;
int enemy1LaserCounter=millis();
int enemy2LaserCounter=millis();
int enemy3LaserCounter=millis();
int enemy4LaserCounter=millis();
int enemy5LaserCounter=millis();
int enemyNumber=0;
int powerBoxAlpha=0;
int UFOLifeLimit=50;
int laserPrecision=12;
int gameResult=0;

float xoff = 0.0;
float yoff = 0.0;
float enemy1x, enemy1y, enemy2x, enemy2y, enemy3x, enemy3y, enemy4x, enemy4y, enemy5x, enemy5y;
float easing1 = 0.01;
float easing2 = 0.01;
float easing3 = 0.01;
float easing4 = 0.01;
float easing5 = 0.01;
float UFOx=25.0;
float UFOy=25.0;
float wormholex;
float wormholey;
float lx1, ly1, lx2, ly2;
float UFOLife=UFOLifeLimit;
float UFOSpeed=2.0;
float powerBoxX, powerBoxY, powerBoxDestX, powerBoxDestY;

void setup() {
  size(400, 400);
  frameRate(60);
  background(255);
  ellipseMode(CENTER);
}

void draw() {
  if (playGame==false&&gameResult==0) {  //--------Display Intro Screen
    startBG();
    introStars();
    ECGLine();
    displayStartSign();
  } else if (playGame==false&&gameResult==1) { //--Display 'Game Lost' Screen       
    noStroke();
    fill(255, 0, 0);
    rect(0, 0, width, height);
    pressEnter();
  } else if (playGame==false&&gameResult==2) { //--Display 'Game Won' Screen
    noStroke();
    fill(0, 255, 0);
    rect(0, 0, width, height);
    pressEnter();
  } else { // Display Game Screen
    gameBG();
    gameStars();
    fill(255);
    noStroke();
    rect(0, 0, width, 13);
    wormHole(width-holeSize, height-holeSize);
    moveUFO();
    enemies();
    laserCharge();
    beamCharge();
    blueBox();
    endGame();
  }
}

void startBG() { // Draw Background For Intro Screen
  int lineheight=height/2-1;
  noStroke();
  fill(0, 20);
  rect(0, 0, width, height);
  strokeWeight(1);
  stroke(255);
  //-----------------DRAW THE GRID------------------------
  for (int b=-10; b<10; b++) {
    line((width/2)-(20*b), height/2, (width/2)-(100*b)+(int(((width/2)+mouseX)/10)), height);
  }
  for (int b=0; b<17; b++) {
    lineheight = lineheight + int(lineheight*(b*.005));
    line(0, lineheight, width, lineheight);
  }
  //------------------------------------------------------
}

void ECGLine() { //--------------------------------Move the animated ECG Line down on the Intro Screen
  if (waveDown==true) {
    if (ECGy<0) {
      int x1=0;
      int y1=100+ECGy;
      int x2=100;
      int y2=100+ECGy;
      int x3=150;
      float y3=random(30, 170)+ECGy;
      int x4=200;
      float y4=random(30, 170)+ECGy;
      int x5=250;
      float y5=random(30, 170)+ECGy;
      int x6=300;
      int y6=100+ECGy;
      int x7=400;
      int y7=100+ECGy;
      stroke(255, 0, 0);
      strokeWeight(3);
      line(x1, y1, x2, y2);
      line(x2, y2, x3, y3);
      line(x3, y3, x4, y4);
      line(x4, y4, x5, y5);
      line(x5, y5, x6, y6);
      line(x6, y6, x7, y7);
      ECGy++;
    } else {
      waveDown=false;
      startSign=true;
    }
  } else { //---------------------------------------Keep animating the ECG Line after it is down on the Intro Screen      
    int x1=0;
    int y1=100+ECGy;
    int x2=100;
    int y2=100+ECGy;
    int x3=150;
    float y3=random(30, 170)+ECGy;
    int x4=200;
    float y4=random(30, 170)+ECGy;
    int x5=250;
    float y5=random(30, 170)+ECGy;
    int x6=300;
    int y6=100+ECGy;
    int x7=400;
    int y7=100+ECGy;
    stroke(255, 0, 0);
    strokeWeight(3);
    line(x1, y1, x2, y2);
    line(x2, y2, x3, y3);
    line(x3, y3, x4, y4);
    line(x4, y4, x5, y5);
    line(x5, y5, x6, y6);
    line(x6, y6, x7, y7);
  }
}

void displayStartSign() { //--------------------------------Draw the neon START text on the intro screen by using lines
  if (startSign==true) {
    if (text<255) {      
      text++;
    } else {
      pressEnter();
    }
    textY=height-int(text/1.5);
    textX=58;
    strokeWeight(3+(sin(millis())));
    stroke(0, 255, 0, text);
    //---------------------------------------------- The Letter 'S'
    line(textX, textY, textX+45, textY);
    line(textX+45, textY, textX+45, textY+15);
    line(textX+45, textY+15, textX+15, textY+15);
    line(textX+15, textY+15, textX+15, textY+30);
    line(textX+15, textY+30, textX+45, textY+30);
    line(textX+45, textY+30, textX+45, textY+75);
    line(textX+45, textY+75, textX, textY+75);
    line(textX, textY+75, textX, textY+60);
    line(textX, textY+60, textX+30, textY+60);
    line(textX+30, textY+60, textX+30, textY+45);
    line(textX+30, textY+45, textX, textY+45);
    line(textX, textY+45, textX, textY);
    //---------------------------------------------- The Letter 'T'
    line(textX+60, textY, textX+105, textY);
    line(textX+105, textY, textX+105, textY+15);
    line(textX+105, textY+15, textX+90, textY+15);
    line(textX+90, textY+15, textX+90, textY+75);
    line(textX+90, textY+75, textX+75, textY+75);
    line(textX+75, textY+75, textX+75, textY+15);
    line(textX+75, textY+15, textX+60, textY+15);
    line(textX+60, textY+15, textX+60, textY);
    //---------------------------------------------- The Letter 'A'
    line(textX+120, textY, textX+165, textY);
    line(textX+165, textY, textX+165, textY+75);
    line(textX+165, textY+75, textX+150, textY+75);
    line(textX+150, textY+75, textX+150, textY+45);
    line(textX+150, textY+45, textX+135, textY+45);
    line(textX+135, textY+45, textX+135, textY+75);
    line(textX+135, textY+75, textX+120, textY+75);
    line(textX+120, textY+75, textX+120, textY);
    line(textX+135, textY+15, textX+150, textY+15);
    line(textX+150, textY+15, textX+150, textY+30);
    line(textX+150, textY+30, textX+135, textY+30);
    line(textX+135, textY+30, textX+135, textY+15);
    //---------------------------------------------- The Letter 'R'
    line(textX+180, textY, textX+225, textY);
    line(textX+225, textY, textX+225, textY+45);
    line(textX+225, textY+45, textX+210, textY+45);
    line(textX+210, textY+45, textX+225, textY+60);
    line(textX+225, textY+60, textX+225, textY+75);
    line(textX+225, textY+75, textX+210, textY+75);
    line(textX+210, textY+75, textX+195, textY+45);
    line(textX+195, textY+45, textX+195, textY+75);
    line(textX+195, textY+75, textX+180, textY+75);
    line(textX+180, textY+75, textX+180, textY);
    line(textX+195, textY+15, textX+210, textY+15);
    line(textX+210, textY+15, textX+210, textY+30);
    line(textX+210, textY+30, textX+195, textY+30);
    line(textX+195, textY+30, textX+195, textY+15);
    //---------------------------------------------- The Letter 'T'
    line(textX+240, textY, textX+285, textY);
    line(textX+285, textY, textX+285, textY+15);
    line(textX+285, textY+15, textX+270, textY+15);
    line(textX+270, textY+15, textX+270, textY+75);
    line(textX+270, textY+75, textX+255, textY+75);
    line(textX+255, textY+75, textX+255, textY+15);
    line(textX+255, textY+15, textX+240, textY+15);
    line(textX+240, textY+15, textX+240, textY);
  }
}

void pressEnter() { //--------------------------- Animate the Return Button on the Intro Screen
  if (returnAlpha<255) {
    returnAlpha=returnAlpha+5;
  } else {
    returnAlpha=0;
    startable=true;
  }
  stroke(255, returnAlpha);
  strokeWeight(4);
  //--------------------------------------------- Draw Return Button by Lines
  line(185, textY+100, 215, textY+100);
  line(215, textY+100, 215, textY+145);
  line(215, textY+145, 170, textY+145);
  line(170, textY+145, 170, textY+115);
  line(170, textY+115, 185, textY+115);
  line(185, textY+115, 185, textY+100);
  line(200, textY+107, 200, textY+130);
  line(200, textY+130, 177, textY+130);
  line(177, textY+130, 185, textY+123);
  line(177, textY+130, 185, textY+137);
}

void mousePressed() { //---------------------------Check the Mouse Buttons and call related functions
  if (playGame==true) {
    if (mouseButton == LEFT) {
      fireLaser();
    } else if (mouseButton == RIGHT) {
      ufoBeam();
    }
  }
}

void moveUFO() { //-------------------------------- Move the UFO on the screen
  if (checkEdge()==false) {
    if (NORTH==true) {
      UFOy-=UFOSpeed;
    }
    if (WEST==true) {
      UFOx-=UFOSpeed;
    }
    if (SOUTH==true) {
      UFOy+=UFOSpeed;
    }
    if (EAST==true) {
      UFOx+=UFOSpeed;
    }
  }
  saucerDraw();
}

void gameBG() {//-----------------------------------Fill background with a black rectangle with low alpha to create old school ghosting effect
  fill(0, 0, 0, 100);
  rect(0, 0, width, height);
}

void saucerDraw() { //-------------------------------Draw the UFO
  noStroke();
  fill(255);
  ellipse(UFOx, UFOy, 25, 25);
  stroke(0);
  line(UFOx, UFOy, (UFOx+(13*cos(millis()))), (UFOy+(13*sin(millis())))); //The animated line creates the illusion of a revolving UFO
  noStroke();
  fill(255*sin(millis()));
  ellipse(UFOx, UFOy, 10, 10);
  stroke(0, 155, 0);
  strokeWeight(3);
  line(0, 10, (width/UFOLifeLimit)*UFOLife, 10);//Shows the life of UFO on top of the screen
  noStroke();
}

boolean checkEdge() { //--------------------------------Check if the UFO is within the screen limits, if not constrain it.
  if (UFOx<15) {
    UFOx=15;
    return(true);
  } else if (UFOx>385) {
    UFOx=385
      ;
    return(true);
  } else if (UFOy<28) {
    UFOy=28;
    return(true);
  } else if (UFOy>385) {
    UFOy=385;
    return(true);
  } else {
    return(false);
  }
}

void fireLaser() { //------------------------------UFO shoots the enemies with its laser.
  if (laser>0 && distance(UFOx, UFOy, mouseX, mouseY)<laserRange) {
    laser--;
    lx1=UFOx;
    ly1=UFOy;
    lx2=mouseX;
    ly2=mouseY;
    checkHit(mouseX, mouseY);
    for (int i=0; i<=60; i++) {
      stroke(255, 0, 0, (255-(i*2)));
      strokeWeight(1);
      line(lx1, ly1, lx2, ly2);
    }
    lasertime=millis();
  }
}

void ufoBeam() {//-------------------------------UFO beams itself anywhere on the screen.
  if (beam>0) {
    lx2=mouseX;
    ly2=mouseY;
    for (int i=0; i<=60; i++) {
      fill(0, 0, 255, (255-(i*4)));
      ellipse(UFOx, UFOy, 30, 30);
      fill(0, 255, 0, (i*4));
      ellipse(lx2, ly2, 40, 40);
      UFOx=mouseX;
      UFOy=mouseY;
    }
    beamtime=millis();
    beam--;
  } else {
    fill(255, 0, 0);
    ellipse(UFOx, UFOy, 30, 30);
  }
}

void laserCharge() {//--------------------------UFO's Laser charges 4 times a second.
  if (laser<=laserLimit) {
    if (millis() > lasertime + 250)
    {
      laser++;
      lasertime = millis();
    }
  }
  stroke(255, 0, 0);
  strokeWeight(3);
  line(0, 2, (width/laserLimit)*laser, 2);
  noStroke();
}

void beamCharge() {//--------------------------UFO's Beaming System charges every 3 seconds.
  if (beam<beamLimit) {
    if (millis() > beamtime + 3000)
    {
      beam++;
      beamtime = millis();
    }
  }
  stroke(0, 0, 255);
  strokeWeight(3);
  line(0, 6, (width/beamLimit)*beam, 6);
  noStroke();
}

void keyPressed() { //--------------------------Check keys to send moving commands through booleans.
  if (playGame==true) {
    if (key == 'w') {  
      NORTH = true;
    } else if (key== 's') {   
      SOUTH = true;
    } else if (key== 'a') {  
      WEST  = true;
    } else if (key== 'd') { 
      EAST  = true;
    }
  }
  if (startable==true) {//---------------------Starts game when you press Return Key, after the intro is loaded completely.
    if (keyCode==ENTER|keyCode== RETURN) {
      mainCounter=millis();
      playGame=true;
    }
  }
  if (key == 'm') {  //--------------------------Shortcut to Skip Intro
    reset();
    playGame=true;
    gameResult=0;
  }
  if (key == 'n') { //---------------------------Shortcut to Intro Screen 
    reset();
    playGame=false;
    gameResult=0;
  }
}

void keyReleased() { //--------------------- Update Booleans when keys are released
  if (playGame==true) {
    if (key == 'w') {  
      NORTH = false;
    } else if (key== 's') {  
      SOUTH = false;
    } else if (key== 'a') { 
      WEST  = false;
    } else if (key== 'd') {
      EAST  = false;
    }
  }
}

void wormHole(int wormholeX, int wormholeY) { //Draw wormhole animation using perlin noise
  wormholex=wormholeX;
  wormholey=wormholeY;
  noStroke();
  fill(random(0, 255), random(0, 255), random(0, 255));
  ellipse(wormholeX, wormholeY, (holeSize*2)+4, (holeSize*2)+4);
  for (int y=-holeSize; y<=holeSize; y++) {
    for (int x=-holeSize; x<=holeSize; x++) {
      if (x*x+y*y <= holeSize*holeSize) {
        strokeWeight(1);
        stroke((noise(xoff, yoff)*255), (noise(xoff, yoff)*255)+100, (noise(xoff, yoff)*255)+200, 155);
        point(wormholeX+x, wormholeY+y);
        xoff += .1;
      }
    }
    xoff=0.0;
    yoff += .01;
  }
}

void enemies() {//------------------------------------------Summon 5 Enemies with animation of coming out of the wormhole
  if (playGame) {

    //----------------------------------------------------- Enemy1

    if (enemy1Active==false) {
      if (enemy1x==0 &&enemy1y==0) {
        enemy1x=wormholex;
        enemy1y=wormholey;
        easing1=random(.01, .03);
      }
      if (enemy1Alpha<255) {
        enemy1Alpha+=int(random(1, 5));
        enemy1x--;
        strokeWeight(1);
        fill(255, 255, 0, enemy1Alpha);
        ellipse(enemy1x, enemy1y, 10, 10);
      } else {
        enemy1Alpha=255;
        enemy1Active=true;
        enemyNumber++;
        enemy1LaserCounter=millis();
        enemy1Laser=int(random(1, 5));
      }
    } else {      
      enemy1();
    }

    //-----------------------------------------------------Enemy 2  

    if (enemy2Active==false) {
      if (enemy2x==0 &&enemy2y==0) {
        enemy2x=wormholex;
        enemy2y=wormholey;
        easing2=random(.01, .03);
      }
      if (enemy2Alpha<255) {
        enemy2Alpha+=int(random(1, 5));
        enemy2x--;
        enemy2y--;
        strokeWeight(1);
        fill(255, 255, 50, enemy2Alpha);
        ellipse(enemy2x, enemy2y, 10, 10);
      } else {
        enemy2Alpha=255;
        enemy2Active=true;
        enemyNumber++;
        enemy2LaserCounter=millis();
        enemy2Laser=int(random(1, 5));
      }
    } else {      
      enemy2();
    }

    //-----------------------------------------------------Enemy 3

    if (enemy3Active==false) {
      if (enemy3x==0 &&enemy3y==0) {
        enemy3x=wormholex;
        enemy3y=wormholey;
        easing3=random(.01, .03);
      }
      if (enemy3Alpha<255) {
        enemy3Alpha+=int(random(1, 5));
        enemy3x--;
        enemy3y-=2;
        strokeWeight(1);
        fill(255, 255, 100, enemy3Alpha);
        ellipse(enemy3x, enemy3y, 10, 10);
      } else {
        enemy3Alpha=255;
        enemy3Active=true;
        enemyNumber++;
        enemy3LaserCounter=millis();
        enemy3Laser=int(random(1, 5));
      }
    } else {      
      enemy3();
    }

    //-----------------------------------------------------Enemy 4

    if (enemy4Active==false) {
      if (enemy4x==0 &&enemy4y==0) {
        enemy4x=wormholex;
        enemy4y=wormholey;
        easing4=random(.01, .03);
      }
      if (enemy4Alpha<255) {
        enemy4Alpha+=int(random(1, 5));
        enemy4x-=2;
        enemy4y--;
        strokeWeight(1);
        fill(255, 255, 150, enemy4Alpha);
        ellipse(enemy4x, enemy4y, 10, 10);
      } else {
        enemy4Alpha=255;
        enemy4Active=true;
        enemyNumber++;
        enemy4LaserCounter=millis();
        enemy4Laser=int(random(1, 5));
      }
    } else {      
      enemy4();
    }

    //-----------------------------------------------------Enemy 5

    if (enemy5Active==false) {
      if (enemy5x==0 &&enemy5y==0) {
        enemy5x=wormholex;
        enemy5y=wormholey;
        easing5=random(.01, .03);
      }
      if (enemy1Alpha<255) {
        enemy5Alpha+=int(random(1, 5));
        enemy5y--;
        strokeWeight(1);
        fill(255, 255, 200, enemy5Alpha);
        ellipse(enemy5x, enemy5y, 10, 10);
      } else {
        enemy5Alpha=255;
        enemy5Active=true;
        enemyNumber++;
        enemy5LaserCounter=millis();
        enemy5Laser=int(random(1, 5));
      }
    } else {      
      enemy5();
    }
  }
}
//------------------------------------------------------Artificial Intelligence code for the enemies
void enemy1() {//---------------------------------------Enemy 1 AI
  if (enemy1Active) {
    if (distance(UFOx, UFOy, enemy1x, enemy1y)<15) {//--if enemy collides with the UFO, it explodes and disappears.
      enemyNumber--;
      UFOLife--;
      noFill();
      strokeWeight(20);       
      stroke(255, 0, 0, 150);       
      rect(0, 0, width, height);       
      noStroke();
      for (int i=0; i<=30; i++) {
        fill(255, random(150, 255), random(150, 255), 255-(i*9));
        noStroke();
        ellipse(enemy1x, enemy1y, 15-(i/2), 15-(i/2));
      }
      enemy1Active=false;
      enemy1x=wormholex;
      enemy1y=wormholey;
      enemy1Alpha=0;
    }
    if (powerBox==false) {//----------------------------if power box is not on the play screen chase the UFO
      if (distance(UFOx, UFOy, enemy1x, enemy1y)>40) {
        if (enemyCollision(1)==false) {//---------------if very close to UFO and colliding each other then stop moving
          float dx = UFOx - enemy1x;
          enemy1x += dx * easing1;
          float dy = UFOy - enemy1y;
          enemy1y += dy * easing1;
        } else if (distance(UFOx, UFOy, enemy1x, enemy1y)>80) {//if UFO starts to get far away, restart chasing          
          float dx = UFOx - enemy1x;
          enemy1x += dx * easing1;
          float dy = UFOy - enemy1y;
          enemy1y += dy * easing1;
        }
      }
      if (distance(UFOx, UFOy, enemy1x, enemy1y)<80) {//Shoot at random intervals if UFO is in range
        if (int((millis()-enemy1LaserCounter)/1000)==enemy1Laser) {
          for (int i=0; i<=60; i++) {
            stroke(0, 200, 200, 150);
            strokeWeight(1);
            line(enemy1x, enemy1y, UFOx, UFOy);
          }
          UFOLife--;  
          noFill();
          strokeWeight(20);       
          stroke(255, 0, 0, 150);       
          rect(0, 0, width, height);       
          noStroke();
          enemy1LaserCounter=millis();
          enemy1Laser=int(random(1, 2));
        }
      }
    } else {//--------------------------------------if power box is on the playscreen go to protect powerbox
      if (distance(enemy1x, enemy1y, powerBoxX, powerBoxY)<30) {//when reached power box, start drawing circles around it
        enemy1x=powerBoxX+10+(18*cos((second()*6)));
        enemy1y=powerBoxY+10+(18*sin((second()*6)));
      } else {//----------------------------------go to the powerbox to protect it
        float dx = powerBoxX - enemy1x;
        enemy1x += dx * easing1;
        float dy = powerBoxY - enemy1y;
        enemy1y += dy * easing1;
      }
    }
    if (distance(UFOx, UFOy, enemy1x, enemy1y)<80) {//if UFO is in range while protecting the power box, shoot at random intervals
      if (int((millis()-enemy1LaserCounter)/1000)==enemy1Laser) {
        for (int i=0; i<=60; i++) {
          stroke(0, 200, 200, 150);
          strokeWeight(1);
          line(enemy1x, enemy1y, UFOx, UFOy);
        }
        UFOLife--;   
        noFill();
        strokeWeight(20);       
        stroke(255, 0, 0, 150);       
        rect(0, 0, width, height);       
        noStroke();
        enemy1LaserCounter=millis();
        enemy1Laser=int(random(1, 2));
      }
    }  
    strokeWeight(1);//---------------------------------Draw enemy ship on calculated coordinates
    fill(255, 255, 0);
    ellipse(enemy1x, enemy1y, 10, 10);
  }
}

void enemy2() {//Enemy 2 AI
  if (enemy2Active) {
    if (distance(UFOx, UFOy, enemy2x, enemy2y)<15) {//if enemy collides with the UFO, it explodes and disappears.
      enemyNumber--;
      UFOLife--; 
      noFill();
      strokeWeight(20);       
      stroke(255, 0, 0, 150);       
      rect(0, 0, width, height);       
      noStroke();
      for (int i=0; i<=30; i++) {
        fill(255, random(150, 255), random(150, 255), 255-(i*9));
        noStroke();
        ellipse(enemy2x, enemy2y, 15-(i/2), 15-(i/2));
      }
      enemy2Active=false;
      enemy2x=wormholex;
      enemy2y=wormholey;
      enemy2Alpha=0;
    }
    if (powerBox==false) {//----------------------------if power box is not on the play screen chase the UFO
      if (distance(UFOx, UFOy, enemy2x, enemy2y)>40) {
        if (enemyCollision(2)==false) {//---------------if very close to UFO and colliding each other then stop moving
          float dx = UFOx - enemy2x;
          enemy2x += dx * easing2;
          float dy = UFOy - enemy2y;
          enemy2y += dy * easing2;
        } else if (distance(UFOx, UFOy, enemy2x, enemy2y)>80) {//if UFO starts to get far away, restart chasing 
          float dx = UFOx - enemy2x;
          enemy2x += dx * easing2;
          float dy = UFOy - enemy2y;
          enemy2y += dy * easing2;
        }
      }
      if (distance(UFOx, UFOy, enemy2x, enemy2y)<80) {//Shoot at random intervals if UFO is in range
        if (int((millis()-enemy2LaserCounter)/1000)==enemy2Laser) {
          for (int i=0; i<=60; i++) {
            stroke(0, 200, 200, 150);
            strokeWeight(1);
            line(enemy2x, enemy2y, UFOx, UFOy);
          }
          UFOLife--;
          noFill();
          strokeWeight(20);       
          stroke(255, 0, 0, 150);       
          rect(0, 0, width, height);       
          noStroke();
          enemy2LaserCounter=millis();
          enemy2Laser=int(random(1, 2));
        }
      }
    } else {//--------------------------------------if power box is on the playscreen go to protect powerbox
      if (distance(enemy2x, enemy2y, powerBoxX, powerBoxY)<30) {//when reached power box, start drawing circles around it
        enemy2x=powerBoxX+10+(18*cos((second()*6)+72));
        enemy2y=powerBoxY+10+(18*sin((second()*6)+72));
      } else {//----------------------------------go to the powerbox to protect it
        float dx = powerBoxX - enemy2x;
        enemy2x += dx * easing1;
        float dy = powerBoxY - enemy2y;
        enemy2y += dy * easing1;
      }
    }
    if (distance(UFOx, UFOy, enemy2x, enemy2y)<80) {//if UFO is in range while protecting the power box, shoot at random intervals
      if (int((millis()-enemy2LaserCounter)/1000)==enemy2Laser) {
        for (int i=0; i<=60; i++) {
          stroke(0, 200, 200, 150);
          strokeWeight(1);
          line(enemy2x, enemy2y, UFOx, UFOy);
        }
        UFOLife--;  
        noFill();
        strokeWeight(20);       
        stroke(255, 0, 0, 150);       
        rect(0, 0, width, height);       
        noStroke();
        enemy2LaserCounter=millis();
        enemy2Laser=int(random(1, 2));
      }
    }  
    strokeWeight(1);//---------------------------------Draw enemy ship on calculated coordinates
    fill(255, 255, 50);
    ellipse(enemy2x, enemy2y, 10, 10);
  }
}

void enemy3() {//Enemy 3 AI
  if (enemy3Active) {
    if (distance(UFOx, UFOy, enemy3x, enemy3y)<15) {//if enemy collides with the UFO, it explodes and disappears.
      enemyNumber--;
      UFOLife--;    
      noFill();
      strokeWeight(20);       
      stroke(255, 0, 0, 150);       
      rect(0, 0, width, height);       
      noStroke();
      for (int i=0; i<=30; i++) {
        fill(255, random(150, 255), random(150, 255), 255-(i*9));
        noStroke();
        ellipse(enemy3x, enemy3y, 15-(i/2), 15-(i/2));
      }
      enemy3Active=false;
      enemy3x=wormholex;
      enemy3y=wormholey;
      enemy3Alpha=0;
    }
    if (powerBox==false) {//----------------------------if power box is not on the play screen chase the UFO
      if (distance(UFOx, UFOy, enemy3x, enemy3y)>40) {
        if (enemyCollision(3)==false) {//---------------if very close to UFO and colliding each other then stop moving
          float dx = UFOx - enemy3x;
          enemy3x += dx * easing3;
          float dy = UFOy - enemy3y;
          enemy3y += dy * easing3;
        } else if (distance(UFOx, UFOy, enemy3x, enemy3y)>40) {//if UFO starts to get far away, restart chasing 
          float dx = UFOx - enemy3x;
          enemy3x += dx * easing3;
          float dy = UFOy - enemy3y;
          enemy3y += dy * easing3;
        }
      }
      if (distance(UFOx, UFOy, enemy3x, enemy3y)<80) {//Shoot at random intervals if UFO is in range
        if (int((millis()-enemy3LaserCounter)/1000)==enemy3Laser) {
          for (int i=0; i<=60; i++) {
            stroke(0, 200, 200, 150);
            strokeWeight(1);
            line(enemy3x, enemy3y, UFOx, UFOy);
          }
          UFOLife--;  
          noFill();
          strokeWeight(20);       
          stroke(255, 0, 0, 150);       
          rect(0, 0, width, height);       
          noStroke();
          enemy3LaserCounter=millis();
          enemy3Laser=int(random(1, 2));
        }
      }
    } else {//--------------------------------------if power box is on the playscreen go to protect powerbox 
      if (distance(enemy3x, enemy3y, powerBoxX, powerBoxY)<30) {//when reached power box, start drawing circles around it
        enemy3x=powerBoxX+10+(18*cos((second()*6)+144));
        enemy3y=powerBoxY+10+(18*sin((second()*6)+144));
      } else {//----------------------------------go to the powerbox to protect it
        float dx = powerBoxX - enemy3x;
        enemy3x += dx * easing1;
        float dy = powerBoxY - enemy3y;
        enemy3y += dy * easing1;
      }
    }
    if (distance(UFOx, UFOy, enemy3x, enemy3y)<80) {//if UFO is in range while protecting the power box, shoot at random intervals
      if (int((millis()-enemy3LaserCounter)/1000)==enemy3Laser) {
        for (int i=0; i<=60; i++) {
          stroke(0, 200, 200, 150);
          strokeWeight(1);
          line(enemy3x, enemy3y, UFOx, UFOy);
        }
        UFOLife--;
        noFill();
        strokeWeight(20);       
        stroke(255, 0, 0, 150);       
        rect(0, 0, width, height);       
        noStroke();
        enemy3LaserCounter=millis();
        enemy3Laser=int(random(1, 2));
      }
    }      
    strokeWeight(1);//---------------------------------Draw enemy ship on calculated coordinates
    fill(255, 255, 100);
    ellipse(enemy3x, enemy3y, 10, 10);
  }
}

void enemy4() {//Enemy 4 AI
  if (enemy4Active) {
    if (distance(UFOx, UFOy, enemy4x, enemy4y)<15) {//if enemy collides with the UFO, it explodes and disappears.
      enemyNumber--;
      UFOLife--; 
      noFill();
      strokeWeight(20);       
      stroke(255, 0, 0, 150);       
      rect(0, 0, width, height);       
      noStroke();
      for (int i=0; i<=30; i++) {
        fill(255, random(150, 255), random(150, 255), 255-(i*9));
        noStroke();
        ellipse(enemy4x, enemy4y, 15-(i/2), 15-(i/2));
      }
      enemy4Active=false;
      enemy4x=wormholex;
      enemy4y=wormholey;
      enemy4Alpha=0;
    }
    if (powerBox==false) {//----------------------------if power box is not on the play screen chase the UFO
      if (distance(UFOx, UFOy, enemy4x, enemy4y)>40) {
        if (enemyCollision(4)==false) {//---------------if very close to UFO and colliding each other then stop moving
          float dx = UFOx - enemy4x;
          enemy4x += dx * easing4;
          float dy = UFOy - enemy4y;
          enemy4y += dy * easing4;
        } else if (distance(UFOx, UFOy, enemy4x, enemy4y)>50) {//if UFO starts to get far away, restart chasing           
          float dx = UFOx - enemy4x;
          enemy4x += dx * easing4;
          float dy = UFOy - enemy4y;
          enemy4y += dy * easing4;
        }
      }
      if (distance(UFOx, UFOy, enemy4x, enemy4y)<80) {//Shoot at random intervals if UFO is in range
        if (int((millis()-enemy4LaserCounter)/1000)==enemy4Laser) {
          for (int i=0; i<=60; i++) {
            stroke(0, 200, 200, 150);
            strokeWeight(1);
            line(enemy4x, enemy4y, UFOx, UFOy);
          }
          UFOLife--;    
          noFill();
          strokeWeight(20);       
          stroke(255, 0, 0, 150);       
          rect(0, 0, width, height);       
          noStroke();
          enemy4LaserCounter=millis();
          enemy4Laser=int(random(1, 2));
        }
      }
    } else {//--------------------------------------if power box is on the playscreen go to protect powerbox         
      if (distance(enemy4x, enemy4y, powerBoxX, powerBoxY)<30) {//when reached power box, start drawing circles around it
        enemy4x=powerBoxX+10+(18*cos((second()*6)+216));
        enemy4y=powerBoxY+10+(18*sin((second()*6)+216));
      } else {//----------------------------------go to the powerbox to protect it
        float dx = powerBoxX - enemy4x;
        enemy4x += dx * easing1;
        float dy = powerBoxY - enemy4y;
        enemy4y += dy * easing1;
      }
    }
    if (distance(UFOx, UFOy, enemy4x, enemy4y)<80) {//if UFO is in range while protecting the power box, shoot at random intervals
      if (int((millis()-enemy4LaserCounter)/1000)==enemy4Laser) {
        for (int i=0; i<=60; i++) {
          stroke(0, 200, 200, 150);
          strokeWeight(1);
          line(enemy4x, enemy4y, UFOx, UFOy);
        }
        UFOLife--;  
        noFill();
        strokeWeight(20);       
        stroke(255, 0, 0, 150);       
        rect(0, 0, width, height);       
        noStroke();
        enemy4LaserCounter=millis();
        enemy4Laser=int(random(1, 2));
      }
    }  
    strokeWeight(1);//---------------------------------Draw enemy ship on calculated coordinates
    fill(255, 255, 150);
    ellipse(enemy4x, enemy4y, 10, 10);
  }
}

void enemy5() {//Enemy 5 AI
  if (enemy5Active) {
    if (distance(UFOx, UFOy, enemy5x, enemy5y)<15) {//if enemy collides with the UFO, it explodes and disappears.
      enemyNumber--;
      UFOLife--; 
      noFill();
      strokeWeight(20);       
      stroke(255, 0, 0, 150);       
      rect(0, 0, width, height);       
      noStroke();
      for (int i=0; i<=30; i++) {
        fill(255, random(150, 255), random(150, 255), 255-(i*9));
        noStroke();
        ellipse(enemy5x, enemy5y, 15-(i/2), 15-(i/2));
      }
      enemy5Active=false;
      enemy5x=wormholex;
      enemy5y=wormholey;
      enemy5Alpha=0;
    }
    if (powerBox==false) {//----------------------------if power box is not on the play screen chase the UFO
      if (distance(UFOx, UFOy, enemy5x, enemy5y)>40) {
        if (enemyCollision(5)==false) {//---------------if very close to UFO and colliding each other then stop moving
          float dx = UFOx - enemy5x;
          enemy5x += dx * easing5;
          float dy = UFOy - enemy5y;
          enemy5y += dy * easing5;
        } else if (distance(UFOx, UFOy, enemy5x, enemy5y)>50) {//if UFO starts to get far away, restart chasing 
          float dx = UFOx - enemy5x;
          enemy5x += dx * easing5;
          float dy = UFOy - enemy5y;
          enemy5y += dy * easing5;
        }
      }
      if (distance(UFOx, UFOy, enemy5x, enemy5y)<80) {//Shoot at random intervals if UFO is in range
        if (int((millis()-enemy5LaserCounter)/1000)==enemy5Laser) {
          for (int i=0; i<=60; i++) {
            stroke(0, 200, 200, 150);
            strokeWeight(1);
            line(enemy5x, enemy5y, UFOx, UFOy);
          }
          UFOLife--;  
          noFill();
          strokeWeight(20);       
          stroke(255, 0, 0, 150);       
          rect(0, 0, width, height);       
          noStroke();
          enemy5LaserCounter=millis();
          enemy5Laser=int(random(1, 2));
        }
      }
    } else {//--------------------------------------if power box is on the playscreen go to protect powerbox      
      if (distance(enemy5x, enemy5y, powerBoxX, powerBoxY)<30) {//when reached power box, start drawing circles around it
        enemy5x=powerBoxX+10+(18*cos((second()*6)+288));
        enemy5y=powerBoxY+10+(18*sin((second()*6)+288));
      } else {//----------------------------------go to the powerbox to protect it
        float dx = powerBoxX - enemy5x;
        enemy5x += dx * easing1;
        float dy = powerBoxY - enemy5y;
        enemy5y += dy * easing1;
      }
    }
    if (distance(UFOx, UFOy, enemy5x, enemy5y)<80) {//if UFO is in range while protecting the power box, shoot at random intervals
      if (int((millis()-enemy5LaserCounter)/1000)==enemy5Laser) {
        for (int i=0; i<=60; i++) {
          stroke(0, 200, 200, 150);
          strokeWeight(1);
          line(enemy5x, enemy5y, UFOx, UFOy);
        }
        UFOLife--;   
        noFill();
        strokeWeight(20);       
        stroke(255, 0, 0, 150);       
        rect(0, 0, width, height);       
        noStroke();
        enemy5LaserCounter=millis();
        enemy5Laser=int(random(1, 2));
      }
    }
    strokeWeight(1);//---------------------------------Draw enemy ship on calculated coordinates
    fill(255, 255, 200);
    ellipse(enemy5x, enemy5y, 10, 10);
  }
}

float distance (float x1, float y1, float x2, float y2) {
  float distance=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
  return distance;
}

boolean enemyCollision (int SubjectEnemy) {// Check if enemy disks are colliding
  boolean result=false;
  if (SubjectEnemy==1) { //Check for enemy 1
    if (distance(enemy1x, enemy1y, enemy2x, enemy2y)<12) {
      result=true;
    } else if (distance(enemy1x, enemy1y, enemy3x, enemy3y)<12) {
      result=true;
    } else if (distance(enemy1x, enemy1y, enemy4x, enemy4y)<12) {
      result=true;
    } else if (distance(enemy1x, enemy1y, enemy5x, enemy5y)<12) {
      result=true;
    }
  } else if (SubjectEnemy==2) { //Check for enemy 2
    if (distance(enemy1x, enemy1y, enemy2x, enemy2y)<12) {
      result=true;
    } else if (distance(enemy2x, enemy2y, enemy3x, enemy3y)<12) {
      result=true;
    } else if (distance(enemy2x, enemy2y, enemy4x, enemy4y)<12) {
      result=true;
    } else if (distance(enemy2x, enemy2y, enemy5x, enemy5y)<12) {
      result=true;
    }
  } else if (SubjectEnemy==3) { //Check for enemy 3
    if (distance(enemy1x, enemy1y, enemy3x, enemy3y)<12) {
      result=true;
    } else if (distance(enemy2x, enemy2y, enemy3x, enemy3y)<12) {
      result=true;
    } else if (distance(enemy3x, enemy3y, enemy4x, enemy4y)<12) {
      result=true;
    } else if (distance(enemy3x, enemy3y, enemy5x, enemy5y)<12) {
      result=true;
    }
  } else if (SubjectEnemy==4) { //Check for enemy 4
    if (distance(enemy1x, enemy1y, enemy4x, enemy4y)<12) {
      result=true;
    } else if (distance(enemy2x, enemy2y, enemy4x, enemy4y)<12) {
      result=true;
    } else if (distance(enemy3x, enemy3y, enemy4x, enemy4y)<12) {
      result=true;
    } else if (distance(enemy4x, enemy4y, enemy5x, enemy5y)<12) {
      result=true;
    }
  } else if (SubjectEnemy==5) { //Check for enemy 5
    if (distance(enemy1x, enemy1y, enemy5x, enemy5y)<12) {
      result=true;
    } else if (distance(enemy2x, enemy2y, enemy5x, enemy5y)<12) {
      result=true;
    } else if (distance(enemy3x, enemy3y, enemy5x, enemy5y)<12) {
      result=true;
    } else if (distance(enemy4x, enemy4y, enemy5x, enemy5y)<12) {
      result=true;
    }
  } 
  return result;
}

void checkHit(int laserX, int laserY) {//----------------Check if enemy ships are hit bythe UFO laser.
  if (distance(laserX, laserY, enemy1x, enemy1y)<laserPrecision) {//Check for enemy 1
    for (int i=0; i<=30; i++) {
      fill(255, random(150, 255), random(150, 255), 255-(i*9));
      noStroke();
      ellipse(enemy1x, enemy1y, 15-(i/2), 15-(i/2));
    }
    enemy1Active=false;
    enemy1x=wormholex;
    enemy1y=wormholey;
    enemy1Alpha=0;
    enemyNumber--;
  } else if (distance(laserX, laserY, enemy2x, enemy2y)<laserPrecision) {//Check for enemy 2      
    for (int i=0; i<=30; i++) {
      fill(255, random(150, 255), random(150, 255), 255-(i*9));
      noStroke();
      ellipse(enemy2x, enemy2y, 15-(i/2), 15-(i/2));
    }
    enemy2Active=false;
    enemy2x=wormholex;
    enemy2y=wormholey;
    enemy2Alpha=0;
    enemyNumber--;
  } else if (distance(laserX, laserY, enemy3x, enemy3y)<laserPrecision) {//Check for enemy 3     
    for (int i=0; i<=30; i++) {
      fill(255, random(150, 255), random(150, 255), 255-(i*9));
      noStroke();
      ellipse(enemy3x, enemy3y, 15-(i/2), 15-(i/2));
    }
    enemy3Active=false;
    enemy3x=wormholex;
    enemy3y=wormholey;
    enemy3Alpha=0;
    enemyNumber--;
  } else if (distance(laserX, laserY, enemy4x, enemy4y)<laserPrecision) {//Check for enemy 4
    for (int i=0; i<=30; i++) {
      fill(255, random(150, 255), random(150, 255), 255-(i*9));
      noStroke();
      ellipse(enemy4x, enemy4y, 15-(i/2), 15-(i/2));
    }
    enemy4Active=false;
    enemy4x=wormholex;
    enemy4y=wormholey;
    enemy4Alpha=0;
    enemyNumber--;
  } else if (distance(laserX, laserY, enemy5x, enemy5y)<laserPrecision) {//Check for enemy 5
    for (int i=0; i<=30; i++) {
      fill(255, random(150, 255), random(150, 255), 255-(i*9));
      noStroke();
      ellipse(enemy5x, enemy5y, 15-(i/2), 15-(i/2));
    }
    enemy5Active=false;
    enemy5x=wormholex;
    enemy5y=wormholey;
    enemy5Alpha=0;
    enemyNumber--;
  }
}

void blueBox() {//---------------------------------------Blue Power Box that comes out of the wormhole every 8 seconds.
  if (powerBox) {
    if (distance(UFOx, UFOy, powerBoxX+10, powerBoxY+10)<26) {// Check if the player collected the Blue Power Box
      strokeWeight(20);
      stroke(150, 150, 255, 150);
      rect(0, 0, width, height);
      noStroke();
      powerBox=false;
      powerBoxX=wormholex;
      powerBoxY=wormholey;
      powerBoxAlpha=0;
      if (holeSize>3) {//------------------------------Shrink wormhole if power box collected
        holeSize-=1;
      }
      if (UFOLife<UFOLifeLimit) {//--------------------Give lifepoints to the UFO if power box collected
        UFOLife+=5;
      }
    } else {//-----------------------------------------Draw the blue power box.
      fill(155, 155, random(150, 255), powerBoxAlpha);
      stroke(0);
      strokeWeight(1);
      rect(powerBoxX, powerBoxY, 20, 20);
    }
  }
  if (millis()-mainCounter>7990 && millis()-mainCounter<8010) {//create new power box every 8 seconds
    if (powerBox==false) {//--------------------------If box was collected just create a new one
      enemy1LaserCounter=millis();
      enemy2LaserCounter=millis();
      enemy3LaserCounter=millis();
      enemy4LaserCounter=millis();
      enemy5LaserCounter=millis();
      enemy1Laser=int(random(1, 4));
      enemy2Laser=int(random(1, 4));
      enemy3Laser=int(random(1, 4));
      enemy4Laser=int(random(1, 4));
      enemy5Laser=int(random(1, 4));
      powerBox=true;
      mainCounter=millis();
      powerBoxDestX=random(0, 400);
      powerBoxDestY=random(50, 350);
      powerBoxX=wormholex;
      powerBoxY=wormholey;
      powerBoxAlpha=0;
      for (int i=0; i<255; i++) {
        powerBoxAlpha++;
        float dx = powerBoxDestX - powerBoxX;
        powerBoxX += dx/255;
        float dy = powerBoxDestY - powerBoxY;
        powerBoxY += dy/255;
        fill(155, 155, random(150, 255), powerBoxAlpha);
        stroke(0);
        strokeWeight(1);
        rect(powerBoxX, powerBoxY, 20, 20);
      }
    } else {//--------------------------------------If box is not collected destroy existing and grow wormhole
      strokeWeight(20);
      stroke(255, 255, 255, 150);
      rect(0, 0, width, height);
      noStroke();
      holeSize+=1;
      powerBoxX=wormholex;
      powerBoxY=wormholey;
      powerBoxAlpha=0;
      powerBox=false;
      mainCounter=millis();
      enemy1LaserCounter=millis();
      enemy2LaserCounter=millis();
      enemy3LaserCounter=millis();
      enemy4LaserCounter=millis();
      enemy5LaserCounter=millis();
      enemy1Laser=int(random(1, 4));
      enemy2Laser=int(random(1, 4));
      enemy3Laser=int(random(1, 4));
      enemy4Laser=int(random(1, 4));
      enemy5Laser=int(random(1, 4));
    }
  }
}

void endGame() {//----------------------------------Check and update game end condtitons and intervals
  if (holeSize>50 || UFOLife<0) {//-----------------Player loose conditions
    if (playGame) {
      for (int i=0; i<180; i++) {
        noStroke();
        fill(75+i, 0, 0);
        rect(0, 0, width, height);//---------------Paint screen Red.
      }
    }      
    reset();
    playGame=false;
    gameResult=1;
  }
  if (holeSize<8) {//------------------------------Player win condition
    if (playGame) {
      for (int i=0; i<180; i++) {
        noStroke();
        fill(0, 75+i, 0);
        rect(0, 0, width, height);//---------------Paint screen Green.
      }    
      reset();
      playGame=false;
      gameResult=2;
    }
  }
}
void reset() {//-----------------------------------Reset game start intervals
  holeSize=20;
  laser=laserLimit;
  beam=beamLimit;
  UFOLife=UFOLifeLimit;
  UFOx=25.0;
  UFOy=25.0;
  enemy1x=0;
  enemy1y=0;
  enemy2x=0;
  enemy2y=0;
  enemy3x=0;
  enemy3y=0;
  enemy4x=0;
  enemy4y=0;
  enemy5x=0;
  enemy5y=0;
  enemy1Active=false;
  enemy2Active=false;
  enemy3Active=false;
  enemy4Active=false;
  enemy5Active=false;
  mainCounter=millis();
  powerBox=false;
  powerBoxX=-50;
  powerBoxY=-50;
  NORTH=false;
  SOUTH=false;
  EAST=false;
  WEST=false;
}

void gameStars() {//--------------------------- Draw stars for game background
  stroke(random(200, 255));
  strokeWeight(1);
  point(  323, 246  );
  point(  64, 103  );
  point(  374, 194  );
  point(  219, 8  );
  point(  361, 200  );
  point(  322, 2  );
  point(  31, 226  );
  point(  316, 46  );
  point(  390, 326  );
  point(  319, 128  );
  point(  65, 89  );
  point(  244, 21  );
  point(  11, 391  );
  point(  339, 272  );
  point(  71, 390  );
  point(  271, 93  );
  point(  237, 36  );
  point(  125, 162  );
  point(  172, 171  );
  point(  397, 28  );
  point(  41, 287  );
  point(  274, 329  );
  point(  136, 156  );
  point(  47, 5  );
  point(  39, 378  );
  point(  171, 196  );
  point(  244, 255  );
  point(  261, 100  );
  point(  292, 60  );
  point(  175, 126  );
  point(  202, 327  );
  point(  102, 128  );
  point(  291, 213  );
  point(  339, 133  );
  point(  10, 248  );
  point(  163, 140  );
  point(  57, 35  );
  point(  172, 159  );
  point(  67, 83  );
  point(  98, 261  );
  point(  215, 87  );
  point(  110, 149  );
  point(  352, 70  );
  point(  161, 25  );
  point(  354, 311  );
  point(  369, 190  );
  point(  154, 54  );
  point(  66, 255  );
  point(  236, 51  );
  point(  111, 157  );
  point(  35, 152  );
  point(  308, 195  );
  point(  67, 324  );
  point(  44, 280  );
  point(  306, 139  );
  point(  146, 58  );
  point(  38, 356  );
  point(  102, 233  );
  point(  127, 398  );
  point(  110, 60  );
  point(  131, 312  );
  point(  323, 310  );
  point(  191, 134  );
  point(  34, 234  );
  point(  34, 228  );
  point(  144, 297  );
  point(  74, 316  );
  point(  8, 18  );
  point(  1, 90  );
  point(  235, 381  );
  point(  66, 300  );
  point(  28, 160  );
  point(  157, 133  );
  point(  119, 166  );
  point(  56, 264  );
  point(  367, 124  );
  point(  71, 53  );
  point(  253, 359  );
  point(  7, 253  );
  point(  151, 187  );
  point(  226, 335  );
  point(  365, 305  );
  point(  256, 213  );
  point(  330, 64  );
  point(  47, 388  );
  point(  118, 308  );
  point(  128, 395  );
  point(  48, 2  );
  point(  207, 122  );
  point(  212, 261  );
  point(  76, 339  );
  point(  261, 63  );
  point(  115, 193  );
  point(  324, 175  );
  point(  284, 114  );
  point(  27, 48  );
  point(  160, 194  );
  point(  222, 151  );
  point(  382, 178  );
  point(  44, 134  );
  point(  173, 321  );
  point(  391, 21  );
  point(  379, 23  );
  point(  10, 114  );
  point(  166, 181  );
  point(  102, 96  );
  point(  10, 53  );
  point(  283, 354  );
  point(  107, 9  );
  point(  35, 16  );
  point(  323, 20  );
  point(  356, 301  );
  point(  157, 26  );
  point(  310, 101  );
  point(  327, 80  );
  point(  100, 287  );
  point(  172, 392  );
  point(  353, 181  );
  point(  98, 211  );
  point(  21, 207  );
  point(  276, 220  );
  point(  357, 4  );
  point(  23, 68  );
  point(  125, 121  );
  point(  278, 251  );
  point(  42, 280  );
  point(  113, 284  );
  point(  56, 216  );
  point(  154, 20  );
  point(  4, 109  );
  point(  21, 387  );
  point(  373, 127  );
  point(  277, 398  );
  point(  15, 387  );
  point(  55, 166  );
  point(  240, 245  );
  point(  274, 326  );
  point(  344, 393  );
  point(  66, 116  );
  point(  260, 388  );
  point(  169, 310  );
  point(  253, 238  );
  point(  134, 148  );
  point(  358, 124  );
  point(  263, 120  );
  point(  204, 194  );
  point(  50, 166  );
  point(  181, 78  );
  point(  99, 1  );
  point(  262, 321  );
  point(  315, 390  );
  point(  135, 114  );
  point(  219, 294  );
  point(  222, 20  );
  point(  361, 165  );
  point(  209, 386  );
  point(  196, 160  );
  point(  23, 264  );
  point(  388, 72  );
  point(  261, 190  );
  point(  37, 364  );
  point(  35, 228  );
  point(  152, 390  );
  point(  47, 204  );
  point(  118, 124  );
  point(  343, 352  );
  point(  123, 246  );
  point(  17, 270  );
  stroke(random(200, 255));
  strokeWeight(2);
  point(  235, 344  );
  point(  369, 340  );
  point(  164, 347  );
  point(  348, 311  );
  point(  121, 358  );
  point(  133, 107  );
  point(  177, 93  );
  point(  282, 306  );
  point(  120, 296  );
  point(  235, 330  );
  point(  293, 174  );
  point(  234, 103  );
  point(  21, 291  );
  point(  158, 211  );
  point(  55, 210  );
  point(  326, 75  );
  point(  316, 189  );
  point(  298, 138  );
  point(  184, 318  );
  point(  361, 242  );
  point(  169, 201  );
  point(  275, 137  );
  point(  317, 37  );
  point(  335, 361  );
  point(  271, 383  );
  point(  252, 91  );
  point(  178, 217  );
  point(  266, 264  );
  point(  169, 251  );
  point(  8, 175  );
  point(  76, 296  );
  point(  286, 195  );
  point(  366, 296  );
  point(  174, 298  );
  point(  48, 215  );
  point(  311, 251  );
  point(  349, 29  );
  point(  200, 14  );
  point(  335, 399  );
  point(  379, 275  );
  point(  35, 61  );
  point(  259, 392  );
  point(  285, 212  );
  point(  252, 17  );
  point(  291, 2  );
  point(  227, 66  );
  point(  33, 92  );
  point(  343, 389  );
  point(  106, 243  );
  point(  7, 295  );
  point(  94, 86  );
  point(  129, 239  );
  point(  261, 199  );
  point(  92, 81  );
  point(  304, 266  );
  point(  136, 216  );
  point(  172, 368  );
  point(  251, 11  );
  point(  211, 286  );
  point(  264, 145  );
  point(  381, 245  );
  point(  290, 334  );
  point(  387, 231  );
  point(  75, 168  );
  point(  171, 348  );
  point(  41, 81  );
  point(  326, 103  );
  point(  71, 117  );
  stroke(random(200, 255));
  strokeWeight(3);
  point(  37, 278  );
  point(  282, 215  );
  point(  357, 105  );
  point(  155, 231  );
  point(  314, 54  );
  point(  44, 324  );
  point(  388, 124  );
  point(  251, 79  );
  point(  56, 6  );
  point(  1, 291  );
  point(  5, 87  );
  point(  72, 247  );
  point(  144, 35  );
  point(  311, 313  );
}

void introStars() { //--------------------------Draw stars for Intro Screen Background (Size 1)
  stroke(255);
  strokeWeight(1);
  for (int i=0; i<8; i++) {//-------------------Because you asked for at least one loop to create a repeating graphic pattern
    point(random(0, 400), random(0, 400));
  }
  point(  316, 27  );
  point(  96, 11  );
  point(  385, 157  );
  point(  300, 143  );
  point(  234, 84  );
  point(  82, 194  );
  point(  93, 200  );
  point(  105, 158  );
  point(  108, 181  );
  point(  378, 175  );
  point(  374, 113  );
  point(  21, 192  );
  point(  79, 126  );
  point(  194, 158  );
  point(  31, 38  );
  point(  191, 1  );
  point(  367, 155  );
  point(  154, 178  );
  point(  289, 14  );
  point(  256, 139  );
  point(  343, 100  );
  point(  125, 50  );
  point(  98, 76  );
  point(  146, 85  );
  point(  71, 21  );
  point(  354, 123  );
  point(  171, 110  );
  point(  324, 173  );
  point(  200, 59  );
  point(  98, 68  );
  point(  275, 28  );
  point(  243, 7  );
  point(  289, 55  );
  point(  44, 120  );
  point(  345, 50  );
  point(  5, 198  );
  point(  30, 192  );
  point(  216, 17  );
  point(  223, 135  );
  point(  258, 181  );
  point(  196, 181  );
  point(  73, 68  );
  point(  2, 152  );
  point(  9, 63  );
  point(  246, 139  );
  point(  69, 149  );
  point(  357, 141  );
  point(  358, 71  );
  point(  305, 82  );
  point(  226, 67  );
  point(  0, 28  );
  point(  101, 73  );
  point(  111, 100  );
  point(  16, 42  );
  point(  381, 61  );
  point(  261, 122  );
  point(  143, 5  );
  point(  133, 123  );
  point(  380, 183  );
  point(  213, 156  );
  point(  39, 43  );
  point(  73, 71  );
  point(  18, 173  );
  point(  12, 128  );
  point(  45, 123  );
  point(  57, 39  );
  point(  327, 54  );
  point(  297, 152  );
  point(  307, 30  );
  point(  362, 166  );
  point(  400, 46  );
  point(  109, 70  );
  point(  37, 33  );
  point(  51, 80  );
  point(  341, 106  );
  point(  375, 33  );
  point(  26, 121  );
  point(  400, 53  );
  point(  174, 22  );
  point(  149, 39  );
  point(  266, 104  );
  point(  375, 11  );
  point(  69, 91  );
  point(  153, 185  );
  point(  131, 120  );
  point(  2, 56  );
  point(  298, 133  );
  point(  17, 181  );
  point(  241, 40  );
  point(  302, 157  );
  point(  88, 176  );
  point(  33, 20  );
  point(  235, 90  );
  point(  88, 15  );
  point(  308, 91  );
  point(  297, 171  );
  point(  332, 15  );
  point(  267, 124  );
  point(  74, 180  );
  point(  312, 118  );
  point(  379, 154  );
  point(  370, 14  );
  point(  326, 189  );
  point(  328, 126  );
  point(  191, 180  );
  point(  280, 164  );
  point(  69, 99  );
  point(  307, 182  );
  point(  72, 6  );
  point(  174, 88  );
  strokeWeight(2);//----------------------------Draw stars for Intro Screen Background (Size 2)
  point(  365, 191  );
  point(  366, 11  );
  point(  324, 25  );
  point(  292, 35  );
  point(  254, 189  );
  point(  71, 185  );
  point(  80, 98  );
  point(  127, 107  );
  point(  173, 199  );
  point(  57, 101  );
  point(  389, 176  );
  point(  99, 92  );
  point(  184, 76  );
  point(  242, 154  );
  point(  130, 73  );
  point(  368, 11  );
  point(  225, 30  );
  point(  82, 179  );
  point(  98, 95  );
  point(  242, 18  );
  point(  379, 36  );
  point(  178, 173  );
  point(  177, 118  );
  point(  283, 158  );
  strokeWeight(3);//------------------------------Draw stars for Intro Screen Background (Size 3)
  point(  241, 4  );
  point(  63, 99  );
  point(  150, 86  );
  point(  367, 173  );
  point(  283, 59  );
  point(  41, 117  );
  point(  206, 81  );
  point(  15, 75  );
  point(  152, 127  );
  point(  338, 3  );
  point(  391, 6  );
  point(  185, 53  );
  point(  155, 11  );
  point(  197, 48  );
  point(  0, 196  );
  point(  94, 169  );
}