// THE PONG GAME.
int p1x = 50;
int p1y = 300;
int p2x = 750;
int p2y = 300;
int pw = 10;
int ph = 50;
boolean p1Up = false;
boolean p1Down = false;
boolean p2Up = false;
boolean p2Down = false;
float puckX = 400;
float puckY = 300;
float puckVX = 15;
float puckVY = 0;
int score1 = 0;
int score2 = 0;
int screen = 0;
int AI = 0;
int play = 0;
void setup() {
size(800, 600);
rectMode(CENTER);
resetPuck();
}
void draw() {
if(screen == 0) {
drawGame();
}
if(screen == 1) {
background(0, 0, 0);
text("Player 1 Wins", 400, 300);
}
if(screen == 2) {
background(0, 0, 0);
text("Player 2 Wins", 400, 300);
}
}
void drawGame() {
background(0, 0, 0);
stroke(255);
line(width/2, 0, width/2, height);
noFill();
ellipse(width/2, height/2, 200, 200);
rect(0, height/2, 400, 300);
rect(width, height/2, 400, 300);
textSize(50);
text("ARENA", width/2 - 85, 320);
text("PONG", width/2 - 75, 280);
ellipse(400, 400, 50, 50);
ellipse(400, 200, 50, 50);
fill(0, 0, 0);
fill(225, 225, 225);
p1();
p2();
puck();
textSize(30);
text(score1, 100, 100);
text(score2, 700, 100);
}
void resetPuck() {
puckX = 400;
puckY = 300;
float angle = random(-PI/4, +PI/4);
if(random(0,2) < 1) {
angle = angle + PI;
}
float totalSpeed = 5;
puckVX = totalSpeed * cos(angle);
puckVY = totalSpeed * sin(angle);
}
void puck() {
ellipse(puckX, puckY, 15, 15);
puckX = puckX + puckVX;
puckY = puckY + puckVY;
if(puckY > 600 || puckY < 0) {
puckVY = -puckVY;
}
float dx2 = abs(p2x - puckX);
float dy2 = abs(p2y - puckY);
float dx1 = abs(p1x - puckX);
float dy1 = abs(p1y - puckY);
boolean touching2 = dx2 < pw / 2 && dy2 < ph / 2;
boolean touching1 = dx1 < pw / 2 && dy1 < ph / 2;
if(touching2) {
puckVX = -puckVX;
puckVX = 1.1 * puckVX;
puckVY = 1.1 * puckVY;
}
if(touching1) {
puckVX = -puckVX;
puckVX = 1.1 * puckVX;
puckVY = 1.1 * puckVY;
}
}
void p1() {
rect(p1x, p1y, pw, ph);
if(p1Up && p1y > ph / 2) {
p1y = p1y - 7;
}
if(p1Down && p1y < 600 - ph / 2) {
p1y = p1y + 7;
}
if(puckX < 0) {
resetPuck();
score2 = score2 + 1;
if(score2 == 10) {
screen = 2;
}
}
}
void p2() {
rect(p2x, p2y, pw, ph);
if(p2Up && p2y > ph / 2) {
p2y = p2y - 7;
}
if(p2Down && p2y < 600 - ph / 2) {
p2y = p2y + 7;
}
if(puckX > 800) {
resetPuck();
score1 = score1 + 1;
if(score1 == 10) {
screen = 1;
}if(score1 == 10) {
screen = 1;
}
}
}
void keyPressed() {
if(key == 'w') {
p1Up = true;
}
if(key == 's') {
p1Down = true;
}
if(keyCode == UP) {
p2Up = true;
}
if(keyCode == DOWN) {
p2Down = true;
}
if(key == 'r') {
resetPuck();
p1y = 300;
p2y = 300;
score1 = 0;
score2 = 0;
}
}
void keyReleased() {
if(key == 'w') {
p1Up = false;
}
if(key == 's') {
p1Down = false;
}
if(keyCode == UP) {
p2Up = false;
}
if(keyCode == DOWN) {
p2Down = false;
}
}