Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*/////////////////////////////////////////////////////////////////////////////////////////////////
 ** Dodge Balls! - Ken Ge
 **
 ** Coding format inspired by: Gone Fishing project - An interactive toy by Nicolas Hesler.
 **
 ** p1 movement: WASD         p2 movement: IJKL
/*////////////////////////////////////////////////////////////////////////////////////////////////

//player ball variables
float p1X=50;
float p1Y=350;
float p1Xspeed=(0);
float p1Yspeed=(0);

//player rect variables
float p2X=350;
float p2Y=50;
float p2Xspeed=(0);
float p2Yspeed=(0);

//enemy ball variables
float enemyX=200;
float enemyY=200;
float enemyX2=180;
float enemyY2=180;
float enemyX3=180;
float enemyY3=220;
float enemyX4=220;
float enemyY4=180;
float enemyX5=220;
float enemyY5=220;
float enemyXspeed=(random(-3, 3));
float enemyYspeed=(random(-3, 3));
float enemyX2speed=(random(-3, 3));
float enemyY2speed=(random(-3, 3));
float enemyX3speed=(random(-3, 3));
float enemyY3speed=(random(-3, 3));
float enemyX4speed=(random(-3, 3));
float enemyY4speed=(random(-3, 3));
float enemyX5speed=(random(-3, 3));
float enemyY5speed=(random(-3, 3));


void setup() {
size(400, 400);
frameRate(60);
smooth();
}


void draw() {  
///////////////////////////////////////////////
// DRAW
///////////////////////////////////////////////
background(0, 0, 0);
drawLine();
// coppied directly from "Cylon Lander" by Nicolas Hesler
drawStars();

//////////////////////////////////////////////
// UPDATE
//////////////////////////////////////////////
initializePlayerLocation();
initializeEnemyLocation();
updateP1();
constrainP1ToCanvasBounds();
updateP2();
constrainP2ToCanvasBounds();
constrainEnemyBallToCanvasBounds();
}


//set initial player location
void initializePlayerLocation() {
//set initial player ball location&speed
fill(172, 255, 179);
ellipse(p1X, p1Y, 20, 20);
//p1 location = previous location + p1 speed
p1X = p1X + p1Xspeed;
p1Y = p1Y + p1Yspeed;

//set initial player rect location&speed
rectMode(CENTER);
fill(134, 177, 255);
rect(p2X, p2Y, 20, 20);
//p2 velocity
p2X = p2X + p2Xspeed;
p2Y = p2Y + p2Yspeed;
}

// constrains
void constrainP1ToCanvasBounds() {
// if player crosses a certain point. * velocity by -1
if ((p1X > width) || (p1X < 0)) {
p1Xspeed = p1Xspeed * -1;
}
if ((p1Y > height-25) || (p1Y < 25)) {
p1Yspeed = p1Yspeed * -1;
}
}

//p1 movements
void updateP1() {
//key bindings
// if keypressed, change p1speed
if (keyPressed) {
if (key == 'w' || key == 'W') {
p1Yspeed=-2;
}
if (key == 's' || key == 'S') {
p1Yspeed=2;
}
if (key == 'a' || key == 'A') {
p1Xspeed=-2;
}
if (key == 'd' || key == 'D') {
p1Xspeed=2;
}
}
}

//constrain to p2
void constrainP2ToCanvasBounds() {
if ((p2X > width) || (p2X < 0)) {
p2Xspeed = p2Xspeed * -1;
}
if ((p2Y > height-25) || (p2Y < 25)) {
p2Yspeed = p2Yspeed * -1;
}
}

//p2 movements
void updateP2() {
//key bindings
if (keyPressed) {
if (key == 'i' || key == 'I') {
p2Yspeed=-2;
}
if (key == 'k'|| key == 'K') {
p2Yspeed=2;
}
if (key == 'j'|| key == 'J') {
p2Xspeed=-2;
}
if (key == 'l'|| key == 'L') {
p2Xspeed=2;
}
}
}


//set initial enemy location
void initializeEnemyLocation() {
// enemy ball spawns
noStroke();
fill(255, 170, 210);
ellipse(enemyX2, enemyY2, 20, 20);
ellipse(enemyX3, enemyY3, 20, 20);
ellipse(enemyX4, enemyY4, 20, 20);
ellipse(enemyX5, enemyY5, 20, 20);
ellipse(enemyX, enemyY, 20, 20);

// enemy location = previous enemy location + enemy speed
enemyX = enemyX + enemyXspeed;
enemyY = enemyY + enemyYspeed;
enemyX2 = enemyX2 + enemyX2speed;
enemyY2 = enemyY2 + enemyY2speed;
enemyX3 = enemyX3 + enemyX3speed;
enemyY3 = enemyY3 + enemyY3speed;
enemyX4 = enemyX4 + enemyX4speed;
enemyY4 = enemyY4 + enemyY4speed;
enemyX5 = enemyX5 + enemyX5speed;
enemyY5 = enemyY5 + enemyY5speed;
}


// constrain for enemy ball
void constrainEnemyBallToCanvasBounds() {
if ((enemyX > width) || (enemyX < 0)) {
enemyXspeed = enemyXspeed * -1;
}
if ((enemyY > height-25) || (enemyY < 25)) {
enemyYspeed = enemyYspeed * -1;
}
if ((enemyX2 > width) || (enemyX2 < 0)) {
enemyX2speed = enemyX2speed * -1;
}
if ((enemyY2 > height-25) || (enemyY2 < 25)) {
enemyY2speed = enemyY2speed * -1;
}
if ((enemyX3 > width) || (enemyX3 < 0)) {
enemyX3speed = enemyX3speed * -1;
}
if ((enemyY3 > height-25) || (enemyY3 < 25)) {
enemyY3speed = enemyY3speed * -1;
}
if ((enemyX4 > width) || (enemyX4 < 0)) {
enemyX4speed = enemyX4speed * -1;
}
if ((enemyY4 > height-25) || (enemyY4 < 25)) {
enemyY4speed = enemyY4speed * -1;
}
if ((enemyX5 > width) || (enemyX5 < 0)) {
enemyX5speed = enemyX5speed * -1;
}
if ((enemyY5 > height-25) || (enemyY5 < 25)) {
enemyY5speed = enemyY5speed * -1;
}
}


// two lines on bottom and top
void drawLine() {
float rectX=1;
noStroke();
fill(200, 171, 232, 150);

//while rectX < width, create more rects. new rect X = old rectX + 11
while (rectX<width) {
rect(rectX, 390, 10, 10);
rect(rectX, 10, 10, 10);
rectX=rectX+11;
}
}

// coppied directly from "Cylon Lander" by Nicolas Hesler
void drawStars() {
stroke(random(100, 255));
point(100, 100);
stroke(random(100, 255));
point(150, 150);
stroke(random(100, 255));
point(50, 300);
stroke(random(100, 255));
point(250, 250);
stroke(random(100, 255));
point(350, 200);
stroke(random(100, 255));
point(300, 100);
stroke(random(100, 255));
point(10, 180);
stroke(random(100, 255));
point(200, 50);
stroke(random(100, 255));
point(50, 20);
stroke(random(100, 255));
point(320, 70);
}