/* Controls: WASD Author: Nathan Faber-Good Date: Oct 3, 2017 Description: U R in heck. Survive. */ float pixlsX = 0; float pixlYPos; float charPos = 200; float lastCharPos; float enemyYPos; float enemyXLPos; float enemyXRPos; float enemyTopMove; float enemyLMove; float enemyRMove; float enemyTopSpeed = 1; float enemyRSpeed = 1; float enemyLSpeed = 1; float enemySpeed = 1; float textPos = 200; float playTime; float flameHeight = 0; boolean playerAlive = true; void setup() { size(400, 400); noStroke(); } void draw() { //Show time in console while player is alive if (playerAlive == true) { playTime = millis()/600; println("Time:"); println(playTime); } //Enemy Movement enemyRMove+=1; enemyLMove+=1; enemyTopMove+=1; //Conditions for enemy hit detections boolean doSwordUp = false; boolean doSwordRight = false; boolean doSwordLeft = false; // Fading background fill(0, 0, 60, 50); rect(0, 0, width, height); //Draw Flames fill(239, 0, 31); drawFlames(0, 30); //Instance Enemies fill(255); enemyTop(180, -200, 1); enemyLeft(-290, 260, 1); enemyRight(660, 260, -1); //Player Control fill(0, 255, 100); if (keyPressed) { if (key == 'd') { swordRight(); doSwordRight = true; } else if (key == 'a') { swordLeft(); doSwordLeft = true; } else if (key == 'w') { swordUp(); doSwordUp = true; } else { sword(); } } else { sword(); } //Enemy hit detection if (doSwordUp==true && enemyYPos >= 140 && enemyYPos <= 260) { enemyTopMove=0; enemyTopSpeed +=random(0.1, 0.5); } else if (doSwordLeft == true && enemyXLPos >= 90 && enemyXLPos <= 200) { enemyLMove=0; enemyLSpeed +=random(0.1, 0.5); } else if (doSwordRight == true && enemyXRPos <= 310 && enemyXRPos >= 200) { enemyRMove=0; enemyRSpeed += random(0.1, 0.5); } //Character hit by enemy detection if (enemyYPos >=250 || enemyXLPos >= 200 || enemyXRPos <= 200 ) { death(); playerAlive = false; } } //Death Function void death() { println("Score:"); println(playTime); charPos = 500; fill(0, 0, 60); rect(0, 0, width, height); fill(239, 0, 31); if(flameHeight <= 400){ flameHeight+=1; } drawFlames(0, 30); fill(0, 255, 100); deathText(); } void deathText(){ drawXYPixls(textPos-75,textPos-55,180,185);//D top drawXYPixls(textPos-75,textPos-65,190,225);//D Lside drawXYPixls(textPos-75,textPos-55,220,225);//D Bottom drawXYPixls(textPos-55,textPos-45,190,215);//D Rside drawXYPixls(textPos-35,textPos-5,180,185);//E Top drawXYPixls(textPos-35,textPos-25,190,215);//E side drawXYPixls(textPos-35,textPos-5,220,225);//E Bottom drawXYPixls(textPos-35,textPos-15,200,205);//E Middle drawXYPixls(textPos+15,textPos+25,180,185);//A Top drawXYPixls(textPos+5,textPos+15,190,220);//A Lside drawXYPixls(textPos+25,textPos+35,190,220);//A Rside drawXYPixls(textPos+5,textPos+35,200,205);//A Middle drawXYPixls(textPos+45,textPos+65,180,185);//D2 top drawXYPixls(textPos+45,textPos+55,190,225);//D2 Lside drawXYPixls(textPos+45,textPos+65,220,225);//D2 Bottom drawXYPixls(textPos+65,textPos+75,190,215);//D2 Rside } //Draw Flames void drawFlames(float startPos, float xDist ) { float flameTopPos; while (startPos >= -1 && startPos <= 400) { noStroke(); flameTopPos = random(350-flameHeight, 390-flameHeight); drawXYPixls(startPos, startPos+=xDist, flameTopPos, 400); } } //Function draws a line of rectangles(pixels) from one x position to another at a given y position. void drawXPixls(float startXPos, float endXPos, float pixlY) { for (float pixlX = startXPos; pixlX >= startXPos && pixlX < endXPos; pixlX += 10 ) { rect(pixlX, pixlY, 10, 5); } } //Takes the previous function, and vertically repeats it a given number of times. void drawXYPixls(float startXPos, float endXPos, float pixlYPosSet, float pixlYDist) { for (pixlYPos = pixlYPosSet; pixlYPos <= pixlYDist; pixlYPos+=10 ) { drawXPixls(startXPos, endXPos, pixlYPos); } } //Draws sword/character in neutral position void sword() { drawXYPixls(charPos-5, charPos, 190, 200);//tip drawXYPixls(charPos-10, charPos+10, 200, 260);//blade drawXYPixls(charPos-5, charPos, 260, 280);//handle drawXYPixls(charPos+20, charPos+40, 270, 270);//top/head drawXYPixls(charPos, charPos+20, 280, 280);//Lside drawXYPixls(charPos+40, charPos+50, 280, 280);//Rside drawXYPixls(charPos+10, charPos+50, 290, 300);//body } //Draws sword/character in right attack position void swordRight() { drawXYPixls(charPos+10, charPos+90, 280, 290);//bladee drawXYPixls(charPos+90, charPos+100, 285, 290);//tip drawXYPixls(charPos, charPos+10, 285, 290);//handle drawXYPixls(charPos-50, charPos, 290, 300);//body drawXYPixls(charPos-50, charPos-20, 280, 290);//side drawXYPixls(charPos-40, charPos, 270, 275);//top } //Draws sword/character in left attack position void swordLeft() { drawXYPixls(charPos-90, charPos-10, 280, 290);//bladee drawXYPixls(charPos-100, charPos-90, 285, 290);//tip drawXYPixls(charPos-10, charPos, 285, 290);//handle drawXYPixls(charPos+20, charPos+50, 280, 290);//side drawXYPixls(charPos, charPos+40, 270, 275);//topaaad drawXYPixls(charPos, charPos+50, 290, 300);//body } //Draws sword/character in upwards attack position void swordUp() { drawXYPixls(charPos-5, charPos, 160, 170);//tip drawXYPixls(charPos-10, charPos+10, 170, 230);//blade drawXYPixls(charPos-5, charPos, 230, 250);//handle drawXYPixls(charPos-10, charPos+10, 260, 265);//top drawXYPixls(charPos+10, charPos+20, 240, 290);//Rside drawXYPixls(charPos-20, charPos-10, 240, 290);//Lside drawXYPixls(charPos-20, charPos+20, 280, 300);//body } //Draws an enemy that falls from the top void enemyTop(float xPos, float yPos, float vertMoveControl) { enemyYPos = enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+40;//Variable for hit detection check drawXYPixls(xPos-5, xPos+45, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+10);//Top drawXYPixls(xPos-10, xPos+50, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+10, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+15);//MidTop drawXYPixls(xPos-10, xPos, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+20, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+25);//Lside drawXYPixls(xPos+40, xPos+50, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+20, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+25);//Rside drawXYPixls(xPos+15, xPos+20, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+20, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+25);//Mid drawXYPixls(xPos-5, xPos+10, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+30, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+35);//LMidBottom drawXYPixls(xPos+25, xPos+40, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+30, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+35);//RMidBottom drawXYPixls(xPos+10, xPos+25, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+40, enemyTopMove*enemyTopSpeed*vertMoveControl+yPos+50);//Bottom } //Draws an enemy that come from the right void enemyRight(float xPos, float yPos, float horizMoveControl) { enemyXRPos = enemyRMove*enemyRSpeed*horizMoveControl+xPos;//Variable for hit detection check drawXYPixls(enemyRMove*enemyRSpeed*horizMoveControl+xPos-5, enemyRMove*enemyRSpeed*horizMoveControl+xPos+45, yPos, yPos+10);//Top drawXYPixls(enemyRMove*enemyRSpeed*horizMoveControl+xPos-10, enemyRMove*enemyRSpeed*horizMoveControl+xPos+50, yPos+10, yPos+15);//MidTop drawXYPixls(enemyRMove*enemyRSpeed*horizMoveControl+xPos-10, enemyRMove*enemyRSpeed*horizMoveControl+xPos, yPos+20, yPos+25);//Lside drawXYPixls(enemyRMove*enemyRSpeed*horizMoveControl+xPos+40, enemyRMove*enemyRSpeed*horizMoveControl+xPos+50, yPos+20, yPos+25);//Rside drawXYPixls(enemyRMove*enemyRSpeed*horizMoveControl+xPos+15, enemyRMove*enemyRSpeed*horizMoveControl+xPos+20, yPos+20, yPos+25);//Mid drawXYPixls(enemyRMove*enemyRSpeed*horizMoveControl+xPos-5, enemyRMove*enemyRSpeed*horizMoveControl+xPos+10, yPos+30, yPos+35);//LMidBottom drawXYPixls(enemyRMove*enemyRSpeed*horizMoveControl+xPos+25, enemyRMove*enemyRSpeed*horizMoveControl+xPos+40, yPos+30, yPos+35);//RMidBottom drawXYPixls(enemyRMove*enemyRSpeed*horizMoveControl+xPos+10, enemyRMove*enemyRSpeed*horizMoveControl+xPos+25, yPos+40, yPos+50);//Bottom } //Draws an enemy that comes from the left void enemyLeft(float xPos, float yPos, float horizMoveControl) { enemyXLPos = enemyLMove*enemyLSpeed*horizMoveControl+xPos+40;//Variable for hit detection check drawXYPixls(enemyLMove*enemyLSpeed*horizMoveControl+xPos-5, enemyLMove*enemyLSpeed*horizMoveControl+xPos+45, yPos, yPos+10);//Top drawXYPixls(enemyLMove*enemyLSpeed*horizMoveControl+xPos-10, enemyLMove*enemyLSpeed*horizMoveControl+xPos+50, yPos+10, yPos+15);//MidTop drawXYPixls(enemyLMove*enemyLSpeed*horizMoveControl+xPos-10, enemyLMove*enemyLSpeed*horizMoveControl+xPos, yPos+20, yPos+25);//Lside drawXYPixls(enemyLMove*enemyLSpeed*horizMoveControl+xPos+40, enemyLMove*enemyLSpeed*horizMoveControl+xPos+50, yPos+20, yPos+25);//Rside drawXYPixls(enemyLMove*enemyLSpeed*horizMoveControl+xPos+15, enemyLMove*enemyLSpeed*horizMoveControl+xPos+20, yPos+20, yPos+25);//Mid drawXYPixls(enemyLMove*enemyLSpeed*horizMoveControl+xPos-5, enemyLMove*enemyLSpeed*horizMoveControl+xPos+10, yPos+30, yPos+35);//LMidBottom drawXYPixls(enemyLMove*enemyLSpeed*horizMoveControl+xPos+25, enemyLMove*enemyLSpeed*horizMoveControl+xPos+40, yPos+30, yPos+35);//RMidBottom drawXYPixls(enemyLMove*enemyLSpeed*horizMoveControl+xPos+10, enemyLMove*enemyLSpeed*horizMoveControl+xPos+25, yPos+40, yPos+50);//Bottom }