class Player
{
private int mySize;
private float speed;
private float easing;
public float x;
public float y;
private float arcX;
private float arcY;
private float targetX;
private float targetY;
private float theta;
public Player(float xPos, float yPos, float sp, float ease, int pSize)
{
x = xPos;
y = yPos;
speed = sp;
easing = ease;
mySize = pSize;
arcX = 0;
arcY = 0;
targetX = xPos;
targetY = yPos;
theta = 0.0;
}
public void draw()
{
move();
}
public void move()
{
if (keyPressed) {
if (key == CODED) {
progress = sORp;
if (keyCode == UP) {
targetY -= speed;
if (targetY < 0) targetY = 0;
}
if (keyCode == DOWN) {
targetY += speed;
if (targetY > height) targetY = height;
}
if (keyCode == LEFT) {
targetX -= speed;
if (targetX < 0) targetX = 0;
}
if (keyCode == RIGHT) {
targetX += speed;
if (targetX > width) targetX = width;
}
}
}
else
{
progress = !sORp;
}
float d = dist(centerX, centerY, targetX, targetY);
if (d > 1.0) {
x += (targetX - x) * easing;
y += (targetY - y) * easing;
}
theta += .1;
if (theta > TWO_PI) {
theta = 0;
if (!progress) {
time++;
}
else {
tick.trigger();
}
fill(255);
text(time, width - 75, 50);
}
arcX = x + mySize*cos(theta);
arcY = y + mySize*sin(theta);
fill(255, 255, 255);
ellipse(arcX, arcY, mySize, mySize);
}
public void collide(float x1, float y1)
{
if (dist(x1, y1, arcX, arcY) <= (mySize + enemySize)/2) {
collided = true;
setupGame();
}
}
public void reset()
{
time = 0;
x = centerX;
y = centerY;
targetX = x;
targetY = y;
}
}
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;
AudioSample tick;
AudioOutput out;
PFont font;
boolean sORp;
boolean progress;
boolean collided = true;
int centerX;
int centerY;
int playerSize = 8;
float playerSpeed = 2.0;
float playerEasing = 0.05;
int enemySize = 4;
int time = 0;
int timePreviousProgress = 0;
int timePreviousSurvive = 0;
int timeRecordProgress = 0;
int timeRecordSurvive = 0;
int numEnemies = 25;
int numWaves = 5;
int numTotalEnemies = (int)(numEnemies*(pow(2, numWaves) - 1));
int enemyRadii;
Enemy[] enemies = new Enemy[numTotalEnemies];
Player player;
void setup() {
size(800, 600);
centerX = width/2;
centerY = height/2;
noStroke();
smooth();
ellipseMode(CENTER);
font = loadFont("Krungthep-48.vlw");
int rand = int(random(2));
if (rand == 1) sORp = true; else sORp = false;
progress = sORp;
minim = new Minim(this);
tick = minim.loadSample("hospital_monitor_beep.mp3", 8192);
if ( tick == null ) println("Didn't get tick!");
out = minim.getLineOut(Minim.STEREO);
player = new Player(centerX, centerY, playerSpeed, playerEasing, playerSize);
}
void draw() {
fill(0, 12);
rect(0, 0, width, height);
if (!collided)
{
player.draw();
moveEnemies();
}
else
{
fill(255);
textFont(font, 45);
if (sORp)
{
text("Use Arrow Keys to SURVIVE", centerX - 350, centerY - 50);
}
else
{
text("Use Arrow Keys to PROGRESS", centerX - 350, centerY - 50);
}
textFont(font, 25);
text("Press 'M' to Switch Game Modes", centerX - 200, centerY);
text("Press 'S' to Start a New Game", centerX - 200, centerY + 30);
if (sORp)
{
text("Previous time was " + timePreviousSurvive, centerX-200, centerY + 60);
text("Record time is " + timeRecordSurvive, centerX - 200, centerY + 90);
}
else
{
text("Previous time was " + timePreviousProgress, centerX-200, centerY + 60);
text("Record time is " + timeRecordProgress, centerX - 200, centerY + 90);
}
}
}
void keyReleased()
{
if (key == 's' || key == 'S') {
collided = false;
setupGame();
}
if (key == 'm' || key == 'M') {
if (sORp) sORp = false; else sORp = true;
}
}
void createEnemies()
{
numEnemies = 25;
enemyRadii = 200;
float increment = TWO_PI/numEnemies;
float theta = 0;
int i = 0;
int iterations = 1;
int speed = 1000;
for (i = 0; i < numTotalEnemies; i++)
{
float nx = enemyRadii*cos(theta) + centerX;
float ny = enemyRadii*sin(theta) + centerY;
enemies[i] = new Enemy(nx, ny, random(speed) + 100);
theta += increment;
if (theta > TWO_PI)
{
theta = 0;
numEnemies *= 2;
enemyRadii *= 4;
increment = TWO_PI/numEnemies;
speed -= 250/iterations;
iterations++;
}
}
}
void moveEnemies() {
fill(255);
for (int i = 0; i < numTotalEnemies; i++) {
if (!progress) {
float dx = enemies[i].x - player.x;
float dy = enemies[i].y - player.y;
enemies[i].x -= dx/enemies[i].speed;
enemies[i].y -= dy/enemies[i].speed;
}
enemies[i].draw();
player.collide(enemies[i].x, enemies[i].y);
}
}
void setupGame() {
if (sORp)
{
timePreviousSurvive = time;
if (timePreviousSurvive > timeRecordSurvive) timeRecordSurvive = timePreviousSurvive;
}
else
{
timePreviousProgress = time;
if (timePreviousProgress > timeRecordProgress) timeRecordProgress = timePreviousProgress;
}
player.reset();
createEnemies();
}
void stop()
{
tick.close();
out.close();
minim.stop();
super.stop();
}