//**------ Defeat Oculi Magni ------**// //------------------------------------// //-------- Jordan Baltich --------// //---- A and D to move, W to fire ----// //global variables for enemy float enemyX = 0; float enemyY = 10; float enemyW = 100; float enemyH = 100; float moveSpeed = 2; float enemyShotX = 50; float enemyShotY = 50; float enemyShotSpeed = 8; float enemyXSpeed = 2; float enemyHealth = 20; boolean isHit = false; boolean isDead = false; boolean hasShot = false; boolean stage2 = false; // gloabal variables for player float playerX = 180; float playerY = 365; float playerW = 30; float playerH = 30; float pMoveX = 5; boolean playerHit = false; boolean isLeft = false; boolean isRight = false; float pshotY = 375; float pshotX; float pshotMoveX = 5; boolean isShot = false; float lives = 3; // global variables for enemy health bar float eBarWidth = 200; float eBarHit = 10; // gloabl variables for player health bar float playerLifeW = 10; float playerLifeH = 10; float spacing = 15; //minion global variables float minionX = random(10, 350); float minionY = -800; float minionW = 40; float minionH = 40; float minionXSpeed = 1.25; float minionYSpeed = 6; boolean minionHit = false; boolean onScreen = false; // set screen size and frame rate void setup() { size(400, 400); frameRate (60); } void draw() { background(65, 63, 70); displayBackground(); checkDead(); } // draw the background void displayBackground() { noStroke(); rectMode(CORNER); fill(96,91,108); rect(0,height-100,width,100); fill(48,46,55); rect(0,0,width,25); fill(55,53,60); rect(0,height-120,width,20); fill(86,81,98); rect(0,height-100,width,30); } // if player is alive run game, if player or enemy has died show proper screen void checkDead() { if (isDead == false) { displayPlayer(); playerShoot(8); playerMovement(); playerCollision(); playerHitDetect(); playerHealthBar(350, 380); displayEnemy(enemyX, enemyY, enemyW, enemyH); moveEnemy(); enemyShoot(10); enemyHitDetect(); enemyHealthBarDisplay(5, 5, eBarWidth, 10); enemyHealthBarHit(); minionMovement(); minionHitDetect(); } else if (isDead == true) { gameOver(70,100); } } //**---------- All code for Enemy / Boss Eye ----------**// // draw the enemy, if hit flash red, if dead do not draw enemy void displayEnemy(float x, float y, float w, float h ) { ellipseMode(CORNER); noStroke(); fill(200, 100, 100); ellipse(x, y, w, h); fill(255); ellipse(x+25, y+25, w-50, h-50); fill(0); ellipse(x+35, y+45, w-70, h-70); fill(255); ellipse(x+55, y+45, w-90, h-90); if (isHit == true) { fill(255, 0, 0, 100); ellipse(x, y, w, h); ellipse(x+25, y+25, w-50, h-50); ellipse(x+35, y+35, w-70, h-70); ellipse(x+55, y+35, w-90, h-90); isHit =false; } else if (isHit == false) { } } // move enemy on x-axis back and forth void moveEnemy() { enemyX = enemyX + moveSpeed; if (enemyX > width - 100 || enemyX < 0) { moveSpeed *= -1; } } // display the enemy's projectile, or if dead, do not void displayShot() { ellipseMode(CORNER); noStroke(); fill(206, 44, 59); ellipse(enemyShotX, enemyShotY+50, 20, 20); } //enemy shoot a projectile after a set amount of time void enemyShoot(float shotDelay) { enemyShotX += enemyXSpeed; if (enemyShotX >= width - 20 || enemyShotX <= 0) { enemyXSpeed *= -1; } if (enemyShotY <= height + shotDelay) { enemyShotY += enemyShotSpeed; enemyXSpeed = 0; displayShot(); } else if (enemyShotY > shotDelay) { enemyShotX = enemyX + 50; enemyXSpeed += 2.5; enemyShotY = 50; } } //detect if the enemy has been hit and track its health, if health 5 enter stage 2 movement void enemyHitDetect() { if ((pshotX >= enemyX && pshotX <= enemyX+enemyW)&&(pshotY >= enemyY && pshotY <=enemyY+enemyH)&& isShot == true) { enemyHealth += - 1; isHit = true; isShot = false; if (enemyHealth == 5) { stage2 = true; if (stage2 == true) { moveSpeed *= 2; enemyXSpeed *= 2; enemyShotSpeed *= 1.5; } } } if (enemyHealth <= 0) { isDead = true; } } //display the enemy health bar void enemyHealthBarDisplay(float x, float y, float w, float h) { noStroke(); fill(218, 56, 102); rectMode(CORNER); rect(x, y, w, h); } // shrink health bar if hit void enemyHealthBarHit() { if (isHit == true) { eBarWidth += -eBarHit; } } //**---------- All code for Player Character ----------**// // draw the player void displayPlayer() { noStroke(); ellipseMode(CORNER); fill(150, 150, 250); ellipse(playerX, playerY, playerW, playerH); fill(255); ellipse(playerX+5, playerY+5, playerW-25, playerH-20); ellipse(playerX+20, playerY+5, playerW-25, playerH-20); fill(0); ellipse(playerX+5, playerY+5, playerW-25, playerH-25); ellipse(playerX+20, playerY+5, playerW-25, playerH-25); } //shoot a projectile if a projectile is not already being shot void playerShoot(float shotSpeed) { if (isShot == true) { pshotMoveX = 0; noStroke(); fill(117, 141, 187); ellipse(pshotX + 10, pshotY, 5, 5); if (pshotY >= 0) { pshotY += - shotSpeed; } else if (pshotY <= 0) { isShot = false; } } else if (isShot == false) { pshotY = 350; pshotX = playerX; pshotMoveX = 5; fill(0, 0, 0, 0); } } //moves player left or right depending on keypresses, also allows player to shoot void playerMovement() { if (keyPressed) { if (key == 'd' || key == 'D') { isRight = true; if (isRight == true) { isLeft = false; keyReleased(); playerX += pMoveX; pshotX += pshotMoveX; } } else if (key == 'a' || key =='A') { isLeft = true; if (isLeft == true) { isRight = false; keyReleased(); playerX += -pMoveX; pshotX += -pshotMoveX; } } else if (key == 'w' || key == 'W') { isShot = true; } } } void keyReleased() { if (isLeft == true){ isRight = true; isLeft = false; } else if (isRight == true){ isLeft = true; isRight = false; } } //check to see if player is going off screen and correct it void playerCollision() { if (playerX >= width - 20) { playerX = width - 20; } else if (playerX <= 0) { playerX = 0; } } //check to see if the player has been hit, lower lives if hit void playerHitDetect() { if ((enemyShotX >= playerX && enemyShotX <= playerX + playerW) && (enemyShotY >= playerY && enemyShotY <= playerY + playerH) || (enemyShotX+20 >= playerX && enemyShotX+20 <= playerX+playerW) && (enemyShotY+20 >= playerY && enemyShotY+20 <= playerY+playerH)) { lives += -1; playerHit = true; if (playerHit == true) { enemyShotX = enemyX + 50; enemyShotY = 50; playerX = 200; } if (lives <= 0) { isDead = true; } } else if ((minionX >= playerX && minionX <= playerX + playerW) && (minionY >= playerY && minionY <= playerY + playerH) || (minionX+minionW >= playerX && minionX+minionW <= playerX+playerW) && (minionY+minionH >= playerY && minionY+minionH <= playerY+playerH)) { lives += -1; playerX = 200; } if (lives <= 0) { isDead = true; } } //draw health bar whith while loop on screen according to player's lives void playerHealthBar(float x, float y) { noStroke(); fill(74, 110, 204); rectMode(CORNER); if (lives == 3) { while (x < 390) { rect(x,y,playerLifeW,playerLifeH); x += spacing; } } else if (lives == 2) { while (x < 370){ rect(x,y,playerLifeW,playerLifeH); x += spacing; } } else if (lives == 1) { rect(x, y, playerLifeW, playerLifeH); } else { } } //**----------- All code for Minion / Small Eye -----------**// //draw the minion on the screen void displayMinion(float x, float y, float w, float h) { ellipseMode(CORNER); noStroke(); fill(100, 200, 150); ellipse(x, y, w, h); fill(255); ellipse(x+7, y+7, w-15, h-15); fill(0); ellipse(x+12, y+14, w-25, h-25); fill(255); ellipse(x+20, y+14, w-35, h-35); } //set minion to slowy move towards the player once on screen void minionMovement() { if (minionY <= height + minionH) { displayMinion(minionX, minionY, minionW, minionH); minionY += minionYSpeed; if (minionY >= 0) { minionXSpeed = 1.5; onScreen = true; if (onScreen == true) { if (playerX > minionX) { minionX += minionXSpeed; } else if (playerX < minionX) { minionX += -minionXSpeed; } } } else if (minionY < 0) { onScreen = false; if (onScreen == false) { minionXSpeed = 0; } } } else if (minionY >= height + minionH) { minionX = random(10, 350); minionY = -800; } } //detect if minion was hit, if so reset void minionHitDetect() { if ((pshotX >= minionX && pshotX <= minionX+minionW)&&(pshotY >= minionY && pshotY <=minionY+enemyH)&& isShot == true) { isShot = false; minionX = random(10, 350); minionY = -800; } } //**---------- Game Over Screens ----------**// // if player has won or lost display proper screen void gameOver(float x , float y) { if (lives > 0) { rectMode(CORNER); noStroke(); fill(100,69,125); rect(x,y,20,100); rect(x+20,y + 80,20,20); rect(x+40,y+60,20,20); rect(x+60,y+80,20,20); rect(x+80,y,20,100); rect(x+120,y,20,100); rect(x+160,y,20,100); rect(x+180,y,20,40); rect(x+200,y+40,20,20); rect(x+220,y+60,20,40); rect(x+240,y,20,100); tryAgain(x+100,y+140,60,60); } else if (lives <= 0) { rectMode(CORNER); noStroke(); fill(100,69,125); rect(x-20,y,20,100); rect(x,y+80,40,20); rect(x+60,y,20,100); rect(x+80,y,40,20); rect(x+80,y+80,40,20); rect(x+100,y,20,100); rect(x+140,y,60,20); rect(x+140,y+80,60,20); rect(x+140,y+20,20,20); rect(x+160,y+40,20,20); rect(x+180,y+60,20,20); rect(x+220,y,20,100); rect(x+220,y,60,20); rect(x+220,y+80,60,20); rect(x+220,y+40,40,20); tryAgain(x+100,y+140,60,60); } } // if button clicked reset variables to try again void tryAgain(float x ,float y, float w, float h){ ellipseMode(CORNER); noStroke(); fill(50,200,50); ellipse(x,y,w,h); if ((mouseX >= x && mouseX <= x+w) && (mouseY >= y && mouseY <= y+h) && mousePressed){ lives = 3; enemyHealth = 20; eBarWidth = 200; enemyX = 0; enemyShotX = 50; minionY = -800; playerX = 170; isShot = false; moveSpeed = 2; enemyShotSpeed = 8; enemyXSpeed = 2; isDead = false; } }