/* built with Studio Sketchpad:
* https://sketchpad.cc
*
* observe the evolution of this sketch:
* https://studio.sketchpad.cc/sp/pad/view/ro.qG4qR9RwqPa/rev.154
*
* authors:
* Nikhil S
*
*
* license (unless otherwise specified):
* creative commons attribution-share alike 3.0 license.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
float posX;
float posY;
float[] eX;
float[] eY;
int numberEnemies;
float[] pX;
float[] pY;
float speed;
float angle;
boolean dead = true;
PFont font;
int score;
boolean powerup = false;
boolean pickedPowerup = false;
int numberPowerups = 20;
int[] powerupType;
int pickedPowerupType;
boolean killMode = false;
int startKillTime;
PVector enemyColour = new PVector(0,0,0);
float FPS;
int ticks;
float FPSinterval1, FPSinterval2;
public void setup() {
background(0);
size(480,320);
posX = width/2;
posY = height/2;
fill(0, 0, 0, 100);
font = loadFont("Arial.vlw");
textFont(font, 20);
numberEnemies = 0;
speed = 2.3f;
enemyColour = new PVector(0,0,0);
if (!dead) {
generateEnemies();
}
}
public void generateEnemies() {
numberEnemies += 10;
eX = new float[numberEnemies];
eY = new float[numberEnemies];
for (int i = 0; i < numberEnemies; i+=1) {
{
eX[i] = int(random(-1000, 1000));
eY[i] = int(random(-1000, 1000));
while (abs (eX[i] - posX) < 150) {
eX[i] = int(random(-1000, 1000));
eY[i] = int(random(-1000, 1000));
}
}
}
generatePowerups();
}
public void generatePowerups() {
pX = new float[numberPowerups];
pY = new float[numberPowerups];
powerupType= new int[numberPowerups];
for (int i = 0; i < numberPowerups; i+=1) {
{
powerupType[i] = int(random(0, 3));
if (powerupType[i] >2) {
powerupType[i] = 2;
}
pX[i] = int(random(-800, 600));
pY[i] = int(random(-800, 600));
}
}
}
public void draw() {
strokeWeight(6);
stroke(0);
if (!dead) {
if(millis() % 1000 == 0){
ticks = 0;
}
else
{
ticks+=1;
}
FPS = ticks/millis();
imageMode(CENTER);
background(255);
//ORANGE background(255,140,20);
fill(0, 0, 0, 40);
text("score: "+score, 15, 50);
//text(FPS+"FPS", 15, 70);
//text(pickedPowerupType, 15, 100);
fill(170);
stroke(240,140,20);
ellipse(posX, posY, 10, 10);
stroke(200, 0, 0, sqrt(sq(mouseX - posX) + sq(mouseY - posY)));
line(posX, posY, mouseX, mouseY);
stroke(0);
if (pickedPowerup) {
fill(240, 0, 0, 80);
}
rect(0, height -50, 50, 50);
fill(enemyColour.x, enemyColour.y, enemyColour.z);
for (int i = 0; i < numberEnemies; i+=1) { //DRAWING THE ENEMIES
{
stroke((sqrt(sq(eX[i]-posX)+sq(eY[i]-posY))),0,0);
ellipse(eX[i], eY[i], 10, 10);
stroke(0);
}
}
controller();
powerups();
if (killMode) {
killModeRun();
}
collisions();
enemyMovement();
if (score % 1000 == 0) {
generateEnemies();
}
score++;
}
else
{
background(245);
menu();
}
}
public void controller() {
if (posY < mouseY) {
posX += speed * sin(atan((mouseX - posX)/(mouseY - posY)));
posY += speed * cos(atan((mouseX - posX)/(mouseY - posY)));
}
if (posY > mouseY) {
posX -= speed * sin(atan((mouseX - posX)/(mouseY - posY)));
posY -= speed * cos(atan((mouseX - posX)/(mouseY - posY)));
}
if (keyPressed) {
if (keyCode == SHIFT)
{
if (pickedPowerup) {
powerup =true;
width = 1000;
}
}
}
}
public void powerups() {
//GENERATING POWERUPSSSSS
if (score % 300 == 0) {
generatePowerups();
}
for (int i = 0; i < numberPowerups; i+=1) {//DRAW POWERUPS
{
switch(powerupType[i])
{
case 0:
fill(240, 140, 20);
stroke(240, 140, 20,50);
ellipse(pX[i], pY[i], 6, 6);
fill(0);
break;
case 1:
fill(20, 140, 240);
stroke(20, 140, 240,50);
ellipse(pX[i], pY[i], 6, 6);
fill(0);
break;
case 2:
fill(0, 240, 20);
stroke(0, 240, 20, 50);
ellipse(pX[i], pY[i], 6, 6);
fill(0);
break;
}
}
}
if (powerup) {
//GENERATE BLAST
switch(pickedPowerupType) {
case 0:
fill(240, 140, 20, 40);
ellipse(posX, posY, 200, 200);
generateEnemies();
score += 50;
powerup = false;
pickedPowerup = false;
break;
case 1:
killMode = true;
startKillTime = score;
powerup = false;
pickedPowerup = false;
break;
case 2:
fill(0, 240, 20, 40);
ellipse(posX, posY, 200, 200);
generateEnemies();
score += 50;
powerup = false;
pickedPowerup = false;
break;
case 3:
break;
}
}
}
public void killModeRun() {
if (score < startKillTime + 300) {
enemyColour = new PVector(250, 0, 0);
enemyColour.z = abs(-(startKillTime + 300) + score);
powerup = false;
pickedPowerup = false;
}
else
{
killMode = false;
enemyColour = new PVector(0, 0, 0);
pickedPowerupType = 0;
}
}
public void enemyMovement() {
if (!killMode) {
for (int i = 0; i < numberEnemies; i+=1) {
if (eY[i] < posY) {
eX[i] += speed * 0.85f * sin(atan((posX - eX[i])/(posY - eY[i])));
eY[i] += speed* 0.85f * cos(atan((posX - eX[i])/(posY - eY[i])));
}
if (eY[i] > posY) {
eX[i] -= speed * 0.85f * sin(atan((posX - eX[i])/(posY - eY[i])));
eY[i] -= speed * 0.85f * cos(atan((posX - eX[i])/(posY - eY[i])));
}
}
}
else
{
for (int i = 0; i < numberEnemies; i+=1) {
if (eY[i] < posY) {
eX[i] -= speed * 0.25f * sin(atan((posX - eX[i])/(posY - eY[i])));
eY[i] -= speed* 0.25f * cos(atan((posX - eX[i])/(posY - eY[i])));
}
if (eY[i] > posY) {
eX[i] += speed * 0.25f * sin(atan((posX - eX[i])/(posY - eY[i])));
eY[i] += speed * 0.25f * cos(atan((posX - eX[i])/(posY - eY[i])));
}
}
}
}
public void collisions() {
if (!killMode) {
for (int i = 0; i < numberEnemies; i+=1) {//ENEMIEHS
{
if (eX[i] > posX-5 & eX[i] < posX+5) {
if (eY[i] > posY-5 & eY[i] < posY+5) {
dead = true;
}
}
}
}
}
else
{
for (int i = 0; i < numberEnemies; i+=1) {//KILL MODE!!!!!!!!!!!!!!!
{
if (eX[i] > posX-10 & eX[i] < posX+10) {
if (eY[i] > posY-10 & eY[i] < posY+10) {
eX[i] = random(-1000, 1000);
eY[i] = random(-1000, 1000);
score += 150;
}
}
}
}
}
//BOUNDING THE PLAYER
if (posX<0) {
posX=2;
}
if (posY<0) {
posY=2;
}
if (posX>width) {
posX=width-2;
}
if (posY>height) {
posY=height-2;
}
//PICKUPS
for (int i = 0; i < numberPowerups; i+=1) {
{
if (pX[i] > posX-6 & pX[i] < posX+6) {
if (pY[i] > posY-6 & pY[i] < posY+6) {
pickedPowerup = true;
pickedPowerupType = powerupType[i];
generatePowerups();
}
}
}
}
}
public void menu() {
background(255);
fill(0);
textFont(font, 126);
text("dont", 0, 100);
fill(150, 0, 0);
text("die.", 0, 226);
textFont(font, 20);
fill(0, 0, 0, 50);
textFont(font, 45);
fill(0);
text("START", 0, (height-20));
textFont(font, 20);
fill(50);
text("previous score: ", 0, height);
textFont(font, 64);
fill(0);
text(score, width/3, height);
textFont(font, 20);
fill(0);
if(mousePressed) {
if(mouseX < 300 && mouseY > (height-50) && mouseY < height) {
dead = false;
score = 0;
posX = width/2;
posY = height/2;
numberEnemies= 0;
generateEnemies();
}
}
}