/*
//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;
}