//Variables for the Player's X and Y position and the Player speed //<>// float PlayerX; float PlayerY; float PlayerSpeed; //Variables for the Enemy's X and Y positions and Enemy's speed float EnemyX; float EnemyY; float EnemySpeed; float EnemyX2; float EnemyY2; float EnemySpeed2; float EnemyX3; float EnemyY3; float EnemySpeed3; //Variable for the timer int Timer; //Variables for the Player shot's X and Y position and it's speed float PlayerbulletX; float PlayerbulletY; float PlayerbulletSpeed; //Variable for the score int score; //Boolean variables the Enemy's visibility boolean enemyvis; boolean enemy2vis; boolean enemy3vis; void setup(){ size(400, 400); // Set the size of the window background(255); // Draw a white background smooth(); //Player X and Y set positions PlayerX = 190; PlayerY = 350; //Speed of the Player PlayerSpeed = 4; //Player shot's set positions PlayerbulletX = PlayerX; PlayerbulletY = PlayerY; //Speed of the Player's shot PlayerbulletSpeed = 20; //X position of all enemies are spawned at random spots at the top EnemyX = (int)(random(0,400)); EnemyX2= (int)(random(0,400)); EnemyX3= (int)(random(0,400)); //Y position of all enemies are set to 40 EnemyY = 40; EnemyY2 = EnemyY; EnemyY3 = EnemyY; //The speed of all enemies are also randomized between 1 - 3 EnemySpeed = (int)(random(1,3)); EnemySpeed2= (int)(random(1,3)); EnemySpeed3= (int)(random(1,3)); //Timer is set to 5000 Timer = 5000; //The Player's Score is set to 0 score = 0; //Enemies are automatically visible enemyvis = true; enemy2vis = true; enemy3vis = true; } void draw(){ drawbg(); //Draw the background drawPlayer(); //Draws Player playermove(); //Moves Player BulletCollision(); //Collision function of the player's bullets and enemies fire(); //Player's fire function updateTimer(); //Timer function } void updateTimer(){ //The interactive toy functions under a timer. Once the timer stops, the interactive toy ends. //When the timer hasn't hit zero: if(Timer > 0){ //The timer begins counting down and the score increases text("Timer:" + Timer, 20, 40); text("Score:" + score, 20, 80); textSize(18); //Timer goes down by an increment Timer-=1; //When the timer is active, all enemies are visible if(enemyvis == true && enemy2vis == true && enemy3vis == true){ drawEnemy(); drawEnemy2(); drawEnemy3(); } } //When the timer hits zero: else if(Timer <= 0){ //The "GAME OVER" text displays text("GAME OVER", 160, 200); textSize(18); //The timer displays as zero and the total score is displayed text("Timer:" + Timer, 20, 40); text("Score:" + score, 160, 230); textSize(18); Timer=0; //Everything but the player disappears when the timer hits zero and the interactive game ends } } //The following functions below draws all the enemies. They all move down the screen by an increment, //but when they reach the bottom of the screen they respawn at different co-ordinates and //at different speeds. void drawEnemy(){ noStroke(); fill(255, 36, 99); ellipse(EnemyX, EnemyY, 50,50); fill(255, 230, 237); ellipse(EnemyX, EnemyY, 30, 30); fill(0, 0, 0); ellipse(EnemyX, EnemyY, 10, 10); fill(255, 255, 255); ellipse(EnemyX-10, EnemyY, 10, 10); EnemyY += EnemySpeed; if(EnemyY > height){ EnemyX = (int)(random(0,400)); EnemyY = 40; EnemySpeed = (int)(random(1,3)); } } void drawEnemy2(){ noStroke(); fill(91, 164, 241); ellipse(EnemyX2, EnemyY2, 50,50); fill(139, 195, 255); ellipse(EnemyX2, EnemyY2, 30, 30); fill(0, 0, 0); ellipse(EnemyX2, EnemyY2, 10, 10); fill(255, 255, 255); ellipse(EnemyX2-10, EnemyY2, 10, 10); EnemyY2 += EnemySpeed2; if(EnemyY2 > height){ EnemyX2 = (int)(random(0,400)); EnemyY2 = 40; EnemySpeed2 = (int)(random(1,3)); } } void drawEnemy3(){ noStroke(); fill(92, 201, 43); ellipse(EnemyX3, EnemyY3, 50,50); fill(173, 255, 136); ellipse(EnemyX3, EnemyY3, 30, 30); fill(0, 0, 0); ellipse(EnemyX3, EnemyY3, 10, 10); fill(255, 255, 255); ellipse(EnemyX3-10, EnemyY3, 10, 10); EnemyY3+= EnemySpeed3; if(EnemyY3 > height){ EnemyX3 = (int)(random(0,400)); EnemyY3 = 40; EnemySpeed3 = (int)(random(1,3)); } } //This function draws the Player void drawPlayer(){ //Ears noStroke(); fill(255, 255, 255); rect(PlayerX-10,PlayerY-30,5,30); rect(PlayerX+5,PlayerY-30,5,30); //Skirt noStroke(); fill(244, 209, 195); triangle(PlayerX, PlayerY+10, PlayerX-10, PlayerY+30, PlayerX+10, PlayerY+30); //Legs noStroke(); fill(255, 255, 255); triangle(PlayerX, PlayerY+30, PlayerX-10, PlayerY+30, PlayerX, PlayerY+50); triangle(PlayerX+10, PlayerY+30, PlayerX-10, PlayerY+30, PlayerX, PlayerY+50); //Shoes noStroke(); fill(94, 0, 0); triangle(PlayerX, PlayerY+40, PlayerX-5, PlayerY+40, PlayerX, PlayerY+50); triangle(PlayerX+10, PlayerY+40, PlayerX-5, PlayerY+40, PlayerX, PlayerY+50); //Hands noStroke(); fill(250, 245, 226); triangle(PlayerX, PlayerY+10, PlayerX-10, PlayerY+10, PlayerX-10, PlayerY+30); triangle(PlayerX, PlayerY+10, PlayerX+10, PlayerY+10, PlayerX+10, PlayerY+30); //Head noStroke(); fill(187, 153, 205); ellipse(PlayerX, PlayerY, 20, 20); rect(PlayerX-10, PlayerY, 20, 20); //Tail noStroke(); fill(255, 255, 255); ellipse(PlayerX, PlayerY+20, 10, 10); } //This function moves the player and makes sure the player shots move along with the player void playermove(){ //If a specific key is pressed, they move in the direction of that key if(keyPressed){ if(keyCode == LEFT){ PlayerX = PlayerX - PlayerSpeed; PlayerbulletX = PlayerX-5; PlayerbulletY = PlayerY-5; } else if(keyCode == RIGHT){ PlayerX = PlayerX + PlayerSpeed; PlayerbulletX = PlayerX-5; PlayerbulletY = PlayerY-5; } else if(keyCode == UP){ PlayerY = PlayerY - PlayerSpeed; PlayerbulletX = PlayerX-5; PlayerbulletY = PlayerY-5; } else if(keyCode == DOWN){ PlayerY = PlayerY + PlayerSpeed; PlayerbulletX = PlayerX-5; PlayerbulletY = PlayerY-5; } //This makes sure the Player stays within the screen boundaries PlayerY= constrain(PlayerY, 15, 350); PlayerX= constrain(PlayerX, 20, 380); } } //This function allows for the Player to fire the Player shots when 'z' is pressed void fire(){ if(keyPressed){ if(key == 'z'){ //This creates the shape of the bullet stroke(255, 255, 255); fill(255, 255, 255); rect(PlayerX-5, PlayerbulletY-50, 10, 20); PlayerbulletY = PlayerbulletY - PlayerbulletSpeed; } } //This makes sure the bullet stays within the screen boundaries PlayerbulletY= constrain(PlayerbulletY, 0, height); } //This function sets the collision between the Player's bullets and the enemies themselves. void BulletCollision(){ //The hitbox of the enemies to put it simply is rect(EnemyX-15, EnemyY-15, 30, 30). It is a rectangular hitbox to make the collision //detection easier to find. //If the Player's bullets hit that rectangular hitbox, the Enemies disappear and respawns at the top of the screen with different //co-ordinates and different speeds if(PlayerbulletX >= EnemyX-15 && PlayerbulletX <= EnemyX-15 + 30 && PlayerbulletY >= EnemyY-15 && PlayerbulletY <= EnemyY-15 + 30){ enemyvis = false; EnemyX = (int)(random(0,400)); EnemyY = 40; EnemySpeed = (int)(random(1,3)); score += 10; } else if(PlayerbulletX > EnemyX2-15 && PlayerbulletX < EnemyX2-15 + 30 && PlayerbulletY > EnemyY2-15 && PlayerbulletY < EnemyY2-15 + 30){ enemy2vis = false; EnemyX2 = (int)(random(0,400)); EnemyY2 = 40; EnemySpeed2 = (int)(random(1,3)); score += 100; } else if(PlayerbulletX > EnemyX3-15 && PlayerbulletX < EnemyX3-15 + 30 && PlayerbulletY > EnemyY3-15 && PlayerbulletY < EnemyY3-15 + 30){ enemy3vis = false; EnemyX3 = (int)(random(0,400)); EnemyY3 = 40; EnemySpeed3 = (int)(random(1,3)); score += 1000; } //If the Player's bullets has not hit the Enemies, they will remain visible. else{ enemyvis = true; enemy2vis = true; enemy3vis = true; } } //This draws the sky background void drawbg(){ noStroke(); fill(29, 42, 97, 50); rect(0, 0, width, height); //sky shades: noStroke(); fill(25, 33, 68, 50); rect(0, 0, width+100, height-100); noStroke(); fill(10, 16, 41, 50); rect(0, 0, width+200, height-200); noStroke(); fill(0, 0, 0, 50); rect(0, 0, width+300, height-300); //This overlays the purple image over the background PImage img = loadImage("purpleoverlay.jpg"); image(img, 0, 0); tint(255, 30); //The image is a free public-domain image: //MaxPixel.net. (n.d.). Purple Background Gradient Teal Texture Colorful [Digital image]. //Retrieved from https://www.maxpixel.net/Purple-Background-Gradient-Teal-Texture-Colorful-1741713 }