Pong game menu with stages

Hi, I need help creating the menus with stages. Whenever I do it, voidKeypressed keeps getting highlighted. I’m not sure why. Also you can suggest any other changes.

//all major variables
int x,y,w,h,speedX,speedY;//circle variables
int paddleX, paddleY,paddlew,paddleH,paddleS,paddleX2,paddleY2,paddlew2,paddleH2,paddleS2;//left and right paddles variables
boolean up,down;//up down for right paddle
boolean positive, negative;//up down for left paddle
boolean a_pressed=false;//pauses game
boolean q_pressed=false;//unpauses game
int scoreL=0;
int scoreR=0;
int stage=1;
void setup() {
  size(600,600);
  //circle variables values
  x=width/2;
  y=height/2;
  w=50;
  h=50;
  speedX=3;
  speedY=3;
  //paddle 1 values
  paddleX=570;
  paddleY=height/2;
  paddlew=30;
  paddleH=100;
  paddleS=5;
  //paddle 2 values
  paddleX2=10;
  paddleY2=height/2;
  paddlew2=30;
  paddleH2=100;
  paddleS2=5;
  //switching screens
  print("Stage 1=Menu","Stage 2=Game","Stage 3=Instructions","Stage 4=End game");
}
  void draw() {
  if(stage==1) {
    background(255,255,0);
    textSize(40);
    fill(224);
    text("Ping Pong Game",250,300);
    text("Press 1 to play game",250,350);
    text("Press z for instructions",250,400);
  }
   

if(stage==2) {
 background(0);
fill(224);
rect(paddleX,paddleY,paddlew,paddleH);
rect(paddleX2,paddleY2,paddlew2,paddleH2);
fill(255,0,0);
ellipse(x,y,w,h);
textSize(30);
fill(0,255,255);
text(scoreL,250,50);
text("L SCORE:",100,50);
text(scoreR,500,50);
text("R SCORE:",350,50);
  
//moving circle
x=x+speedX;
y=y+speedY;
//preventing it leaving screen
if(x>width-w/2){
  speedX=-speedX;
  noLoop();// left paddle ,stops game if ball hits screen and player misses to hit it(end game)
}else if(x<0+w/2) {
  speedX=-speedX;
  noLoop();// right paddle ,stops game if ball hits screen and player misses to hit it(end game)
}
if(y>height-h/2){
  speedY=-speedY;
}else if(y<0+h/20){
  speedY=-speedY;
}
//moving paddle
if(up) {
paddleY=paddleY+paddleS;
}
if(positive) {
  paddleY2=paddleY2+paddleS2;
}
if(down) {
  paddleY=paddleY-paddleS;
  }
if(negative) {
  paddleY2=paddleY2-paddleS2;
}
//preventing paddle from going off screen
if(paddleY-paddleH/2<0) {
  paddleY=paddleY+paddleS;
}
if(paddleY2-paddleH2/2<0) {
  paddleY2=paddleY2+paddleS2;
}
if(paddleY+paddleH/2>height) {
  paddleY=paddleY-paddleS;
}
if(paddleY2+paddleH2/2>height) {
  paddleY2=paddleY2-paddleS2;
}
//ball bouncing off paddle
if(x>paddleX - w/2 && x < paddleX+paddlew - w/2 && y < paddleY + paddleH + h/2 && y > paddleY - h/2) {
speedX=-speedX;
scoreR=scoreR+10;
}
if(x>paddleX2 + w/2 && x < paddleX2 + paddlew2 + w/2 && y < paddleY2 + paddleH2 + h/2 && y > paddleY2 - h/2) {
speedX=-speedX;
scoreL=scoreL+10;
}

}
// key pressed/released variables (refer to variable tabble)

void keyPressed() {
  if(key=='d') {
    up=true;
  }
  if(key=='u') {
    down=true;
  }
  if(key=='m') {
    positive=true;
  }
  if(key=='p') {
    negative=true;
  }
  if(key=='a'){
  a_pressed=true;
  noLoop();
}
if(key=='q') {
  q_pressed=true;
  loop();
}
if(key=='1') {
  stage=2;
  }
}


void keyReleased() {
  if(key=='d') {
    up=false;
  }
  if(key=='u') {
    down=false;
  }
  if(key=='m') {
    positive=false;
  }
  if(key=='p') {
    negative=false;
  }
  if(key=='a'){
  a_pressed=true;
  noLoop();
}
if(key=='q') {
  q_pressed=true;
  loop();
}
if(key=='1') {
  stage=2;
} 
}


1 Like

Need more info here, not sure what menu you are talking about, I only have access to one menu, and only one menu option works, thats the one to start the game.

Note that you currently have an unclosed draw function, and the code exits with an error if you dont close it off. Just add a closing bracket, before void keyPressed.

1 Like

I believe you want to build multiple scenes in your game. Is that right?

  • a scene for credits
  • a scene for menu
  • a scene for main game

This can be done very easily using the p5.js SceneManager library: https://github.com/mveteanu/p5.SceneManager

1 Like

Just be aware that SceneManager is for p5.js – not Processing (Java)!