Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
//Block Collection Sim//
 
 Use arrow keys to move to bring the block to the win point and avoid the lasers
 */


//Sets up variables for the blocks
int block1X = 175;
int block1Y = 225;
int block1W = 50;
int block1H = 50;
int block1LeftSpeed = 50;
int block1RightSpeed = 50;
int block1DownSpeed = 50;
int block1UpSpeed = 50;

int block2X = 75;
int block2Y = 75;
int block2W = 50;
int block2H = 50;
int block2LeftSpeed = 10;
int block2RightSpeed = 10;
int block2DownSpeed = 10;
int block2UpSpeed = 10;

int block5X = 350;
int block5Y = 100;
int block5W = 50;
int block5H = 50;
int block5LeftSpeed = 50;
int block5RightSpeed = 50;
int block5DownSpeed = 50;
int block5UpSpeed = 50;

int block6X = 75;
int block6Y = 75;
int block6W = 50;
int block6H = 50;
int block6LeftSpeed = 50;
int block6RightSpeed = 50;
int block6DownSpeed = 50;
int block6UpSpeed = 50;

int right = block1X + block1W/2;
int top = block1Y - block1H/2;
int left = block1X - block1W/2;
int bottom = block1Y + block1H/2;

//Sets up variables for laser
int laserX1 = -25;
int laserY1 = 425;

boolean shootBullet;

//Sets up time check
int lastTimeCheck;
int timeIntervalFlag = 1000;

//Setup with time check
void setup() {
  lastTimeCheck=millis();
  size(400, 400);
  
}

//Main draw function
void draw() {
  background(155);
  grid();
  fill(255);
  //Sets up blocks and collision
  block1();
  block2();
  collision2();
  collision1();
  //Sets up block addtion
  addBlock();
  addBlock2();
  //Sets up win
  win();
  //Sets up laser
  getHurt();
  loop();
  bullet();
  laserShark1();
  bulletCount();
}

//Movement functions
void keyPressed() {

  //First block movement
  if (key == CODED) {
    if (keyCode == UP) {
      block1Y -= block1UpSpeed;
    } else if (keyCode == DOWN) {
      block1Y += block1DownSpeed;
    } else if (keyCode == LEFT) {
      block1X -= block1LeftSpeed;
    } else if (keyCode == RIGHT) {
      block1X += block1RightSpeed;
    }
  }
  //Movement for added block
  if (key == CODED) {
    if (keyCode == UP) {
      block6Y -= block6UpSpeed;
    } else if (keyCode == DOWN) {
      block6Y += block6DownSpeed;
    } else if (keyCode == LEFT) {
      block6X -= block6LeftSpeed;
    } else if (keyCode == RIGHT) {
      block6X += block6RightSpeed;
    }
  }
}

//Draws grid
void grid() {
  //
  line(50, 0, 50, 400);
  line(100, 0, 100, 400);
  line(150, 0, 150, 400);
  line(200, 0, 200, 400);
  line(250, 0, 250, 400);
  line(300, 0, 300, 400);
  line(350, 0, 350, 400);

  line(0, 50, 400, 50);
  line(0, 100, 400, 100);
  line(0, 150, 400, 150);
  line(0, 200, 400, 200);
  line(0, 250, 400, 250);
  line(0, 300, 400, 300);
  line(0, 350, 400, 350);
}

//Sets up block functions
void block1() {
  rectMode(CENTER);
  rect(block1X, block1Y, block1W, block1H);
}
void block2() {
  fill(255, 0, 0);
  rectMode(CENTER);
  rect(block2X, block2Y, block2W, block2H);
  fill(255);
}

void block6() {
  rectMode(CENTER);
  rect(block6X, block6Y, block6W, block6H);
  fill(255);
}

//Sets up first part of collision function that detects if a corner is in another block
void collision1() {

  int right = block1X + block1W/2;
  int top = block1Y - block1H/2;
  int left = block1X - block1W/2;
  int bottom = block1Y + block1H/2;

  //top right corner
  if (pointIsInBlock( right, top, block2X, block2Y, block2W, block2H)) 
  { 
    trCollide=true;
    println("Collision: TR1!");
  } else {
    trCollide=false;
  }

  //top left corner
  if (pointIsInBlock( left, top, block2X, block2Y, block2W, block2H)) 
  { 
    tlCollide=true;
    println("Collision: TL1!");
  } else {
    tlCollide=false;
  }

  //bottom right corner
  if (pointIsInBlock( right, bottom, block2X, block2Y, block2W, block2H))
  { 
    brCollide=true;
    println("Collision: BR1!");
  } else {
    brCollide=false;
  }

  //bottom left corner
  if (pointIsInBlock( left, bottom, block2X, block2Y, block2W, block2H)) 
  { 
    blCollide=true;
    println("Collision: BL1!");
  } else {
    blCollide=false;
  }
}

//Sets up second part of collision function that detects if a side of a block is coliding with another side of a block and changes variables
void collision2() {

  if (trCollide && tlCollide)
  { 
    addBlock1=true;
    block1UpSpeed=0;
  } else {
    block1UpSpeed=50;
  }
  if (brCollide && trCollide)
  { 
    addBlock2=true;
    block1RightSpeed=0;
  } else {
    block1RightSpeed=50;
  }
  if (brCollide && blCollide)
  { 
    addBlock3=true;
    block1DownSpeed=0;
  } else {
    block1DownSpeed=50;
  }
  if (tlCollide && blCollide)
  { 
    addBlock4=true;
    block1LeftSpeed=0;
  } else {
    block1LeftSpeed=50;
  }
}

//Sets up the block add function with directional imput
void addBlock() {
  if (addBlock1) {
    placeCollectBlock=true;
    block2Y=(1000);
    block6X = 75;
    block6Y = 75;
    addBlock1=false;
  }
  if (addBlock2) {
    placeCollectBlock=true;
    block2Y=(1000);
    block6X = 75;
    block6Y = 75;
    addBlock2=false;
  }
  if (addBlock3) {
    placeCollectBlock=true;
    block2Y=(1000);
    block6X = 75;
    block6Y = 75;
    addBlock3=false;
  }
  if (addBlock4) {
    placeCollectBlock=true;
    block2Y=(1000);
    block6X = 75;
    block6Y = 75;
    addBlock4=false;
  }
}

void addBlock2() {
  if (placeCollectBlock) {
    fill( random(255), random(255), random(255), random(255));
    block6();
  }
}

//Sets up win function that only activates with the added block
void win() {
  winBlocks();

  if (winSquare(block6X, block6Y, 325, 275)) {
    block6X = 1000;
    block6Y = 1000;
    block2Y=75;
    block1X=175;
    block1Y=225;
  }
}

void winBlocks() {
  rectMode(CENTER);
  fill( random(255), random(255), random(255), random(255));
  rect(325, 275, 50, 50);
  fill(255);
}



//Sets up the laser
void laserShark1() {
  fill(140, 0, 142);
  rect(0, laserY1, 25, 25);  
  laserY1 = laserY1 - 1; 
  if (laserY1 < 0) { 
    laserY1 = 425;
  }
  noFill();
}

//Sets up getting hurt by setting the player back to the middle of the screen
void getHurt() { 
  if (pointIsInBlock( laserX1, laserY1, block1X, block1Y, block1W, block1H)) 
  { 
    block1X = 175;
    block1Y = 225;
    block6X = 1000;
    block6Y = 1000;
    block2Y=75;
  } else {
  }
}

//Sets up bullet counter
void bulletCount() {
  if ( millis() > lastTimeCheck + timeIntervalFlag ) {
    lastTimeCheck = millis();
    shootBullet=true;
  }
}

//Sets up bullet using the universal collision function 
void bullet() {
  if (shootBullet==(true)) {
    //println("oh boi");
    fill((255), random(255), random(255));
    rect(laserX1, laserY1, 10, 10);  
    laserX1 = laserX1 + 5;
  }
  if (laserX1 > 400) { 
    laserX1 = -25;
  }
}

//Universal collision function and booleans
boolean pointIsInBlock(int px, int py, int rx, int ry, int rw, int rh) {
  if (px >= rx-rw/2 && px <= rx+rw/2 && py >= ry-rh/2 && py <= ry+rh/2) {
    return true;
  } else {
    return false;
  }
}

boolean trCollide = pointIsInBlock(right, top, block2X, block2Y, block2W, block2H);  
boolean tlCollide = pointIsInBlock(left, top, block2X, block2Y, block2W, block2H); 
boolean brCollide = pointIsInBlock(right, bottom, block2X, block2Y, block2W, block2H); 
boolean blCollide = pointIsInBlock(left, bottom, block2X, block2Y, block2W, block2H);

//Win square collision booleans
boolean winSquare(int x1, int y1, int x2, int y2) {
  if (x1 == x2 && y1 == y2) {
    return true;
  } else {           
    return false;
  }
}

//Add block booleans
boolean addBlock1 = (trCollide && tlCollide);
boolean addBlock2 =(brCollide && trCollide);
boolean addBlock3 =(brCollide && blCollide);
boolean addBlock4 =(tlCollide && blCollide);

boolean placeCollectBlock;
{
  block6X = 0;
  block6Y = 0;
}