# Create another window accessible with a key from the menu

**URL:** https://discourse.processing.org/t/create-another-window-accessible-with-a-key-from-the-menu/28108
**Category:** Coding Questions
**Created:** [February 27, 2021, 10:22am UTC](https://discourse.processing.org/t/create-another-window-accessible-with-a-key-from-the-menu/28108 "2021-02-27T10:22:46Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Torikusu](https://avatars.discourse-cdn.com/v4/letter/t/9f8e36/32.png) [@Torikusu](https://discourse.processing.org/u/Torikusu)
#### Post date: [February 27, 2021, 10:22am UTC](https://discourse.processing.org/t/create-another-window-accessible-with-a-key-from-the-menu/28108/1 "2021-02-27T10:22:46Z")

</div>

Hello,  
I would like to create a third page (I have the menu and the games) except that it does not work here is the code with the error:

```auto
float wait2 = 1000 - floor(millis()/1000)*90;
int lastTime = 0; 
int score = 0; 
int score2 = 0;
int bonus = 1;
int square_size = 50;
float square_x;
float square_y;
final int menu = 0;
final int jeux = 1;
final int setting = 2;
int state = menu;
PFont font;
PImage img;
PFont police;

void setup() {
  size(900,600); //feunetre 900x600
  smooth(); //dessine la geometrie avec des arretes lisses
  police = loadFont("Arial-Black-48.vlw"); //charger police d'écriture 
  img=loadImage("Sans titre-67.jpg"); //quel image je dois charger (au prealable mis dans data)
}

// **********Changement de fenetre********* \\

void draw() {
  switch (state) {
  case menu:
    showMenu(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case setting:
    showSetting(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case jeux:
    handlejeux(); //developpement plus bas
    break; //passer a l'instruction suivante 
  default:
    println ("Unknown state (in draw) "
      + state
      + " ++++++++++++++++++++++");
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  } 
}

//**********Multiplicateur de score (score de base + bonus)*********\\

void mousePressed() {
  if (state!=jeux)
    return; 

 if ( over_square() ) {     
    score += bonus; //plus j'appuye plus je gagne du score
    bonus++;

    score2 += 1;         
  } else {
    score = 0; //score de base
    bonus = 1; //score +1 par combo

    score2 = 0; //autre score mais avance de 1
  }
  randomize_square_position();
}

void keyPressed() {
  switch (state) {
  case menu:
    keyPressedForMenu(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case setting:
    keyPressedForSetting(); //developpement plus bas
    break;          
  case jeux:
    keyPressedForjeux(); //developpement plus bas
    break; //passer a l'instruction suivante 
  default:
    println ("Unknown state (in keypressed) "
      + state
      + " ++++++++++++++++++++++");
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  } 
} 

//**********Action si touche pressé (changement de background)*********\\

void keyPressedForMenu() {

  switch(key) {
  case '1': //si j'appuye sur 1....
    state = jeux; //changer ecran sur jeux
    break; //passer a l'instruction suivante 
    
  case 'x': //si j'appuye sur x....
  case 'X': //ou X
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  }
} 

void keyPressedForSetting() {
  
  switch(key) {
  case '2':
    state = setting;
    break;
  }

void keyPressedForjeux() {
  switch(key) {
  default:
    key=0; 
    state = menu;
    break; //passer a l'instruction suivante 
  }
} 

//**********Apparence visuel du menu (emplacement des textes...etc)**********\\

void showMenu() { //Mon ecran menu
  image (img,0,0); //joli photo fais pas mes soins ;)
} 

void showMenu() {
  image (img,0,0);
}

// **********Mon jeux********** \\

void handlejeux() { //mon ecran jeux
  background(78, 61, 40); //couleur du fond noir 
  fill(255); //couleur blanche
  if (lastTime + wait2 < millis()) { //si j'ai pas click au bout de X temps
    randomize_square_position(); //alors nouveau carré
  }
  rect(square_x, square_y, square_size, square_size); //dessin du carré
  textFont(police,32); //mettre la police d'écriture
  text("Score = ", 680,50, height-25); //Afficher "Score =" a certaine coo
  textFont(police,32); //mettre la police d'écriture
  textSize(32); //taille du texte
  textFont(police,32); //mettre la police d'écriture
  text(score, 830,50, height-25); //coordonnée du score
  textFont(police,32); //mettre la police d'écriture
  text("X ", 30,570, height-25); //Afficher "X" a certaine coo
  textFont(police,32); //mettre la police d'écriture
  text(score2, 60,570, height-25); //coordonnée du score
}

void randomize_square_position() { //commande du random spawn
  square_x = random(width - square_size); //Spawn random de carré sur les coo X
  square_y = random(height - square_size); //Spawn random de carré sur les coo Y
  lastTime = millis()- floor(millis()/10000)*90; //depop au bout de x temps (le temps change au bout de X secondes en ms)
}

boolean over_square() {
  return(
    mouseX > square_x && //si je click sur le carré, alors disparition  
    mouseX < square_x + square_size &&      
    mouseY > square_y && 
    mouseY < square_y + square_size
    );
}

```

Here is the base code

```auto
float wait2 = 1000 - floor(millis()/1000)*90; //sharp decrease (`-_)
int lastTime = 0; 
int score = 0; 
int score2 = 0;
int bonus = 1;
int square_size = 50;
float square_x;
float square_y;
final int menu = 0;
final int jeux = 1;
int state = menu;
PFont font;
PImage img;
PFont police;

void setup() {
  size(900,600); //feunetre 900x600
  smooth(); //dessine la geometrie avec des arretes lisses
  police = loadFont("Arial-Black-48.vlw"); //charger police d'écriture 
  img=loadImage("Sans titre-67.jpg"); //quel image je dois charger (au prealable mis dans data)
}

// **********Changement de fenetre********* \\

void draw() {
  switch (state) {
  case menu:
    showMenu(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case jeux:
    handlejeux(); //developpement plus bas
    break; //passer a l'instruction suivante 
  default:
    println ("Unknown state (in draw) "
      + state
      + " ++++++++++++++++++++++");
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  } 
}

//**********Multiplicateur de score (score de base + bonus)*********\\

void mousePressed() {
  if (state!=jeux)
    return; 

 if ( over_square() ) {     
    score += bonus; //plus j'appuye plus je gagne du score
    bonus++;

    score2 += 1;         
  } else {
    score = 0; //score de base
    bonus = 1; //score +1 par combo

    score2 = 0; //autre score mais avance de 1
  }
  randomize_square_position();
}

void keyPressed() {
  switch (state) {
  case menu:
    keyPressedForMenu(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case jeux:
    keyPressedForjeux(); //developpement plus bas
    break; //passer a l'instruction suivante 
  default:
    println ("Unknown state (in keypressed) "
      + state
      + " ++++++++++++++++++++++");
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  } 
} 

//**********Action si touche pressé (changement de background)*********\\

void keyPressedForMenu() {

  switch(key) {
  case '1': //si j'appuye sur 1....
    state = jeux; //changer ecran sur jeux
    break; //passer a l'instruction suivante 
    
  case 'x': //si j'appuye sur x....
  case 'X': //ou X
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  }
} 

void keyPressedForjeux() {
  switch(key) {
  default:
    key=0; 
    state = menu;
    break; //passer a l'instruction suivante 
  }

} 

//**********Apparence visuel du menu (emplacement des textes...etc)**********\\

void showMenu() { //Mon ecran menu
  image (img,0,0); //joli photo fais pas mes soins ;)
} 

// **********Mon jeux********** \\

void handlejeux() { //mon ecran jeux
  background(78, 61, 40); //couleur du fond noir 
  fill(255); //couleur blanche
  if (lastTime + wait2 < millis()) { //si j'ai pas click au bout de X temps
    randomize_square_position(); //alors nouveau carré
  }
  rect(square_x, square_y, square_size, square_size); //dessin du carré
  textFont(police,32); //mettre la police d'écriture
  text("Score = ", 680,50, height-25); //Afficher "Score =" a certaine coo
  textFont(police,32); //mettre la police d'écriture
  textSize(32); //taille du texte
  textFont(police,32); //mettre la police d'écriture
  text(score, 830,50, height-25); //coordonnée du score
  textFont(police,32); //mettre la police d'écriture
  text("X ", 30,570, height-25); //Afficher "X" a certaine coo
  textFont(police,32); //mettre la police d'écriture
  text(score2, 60,570, height-25); //coordonnée du score
}

void randomize_square_position() { //commande du random spawn
  square_x = random(width - square_size); //Spawn random de carré sur les coo X
  square_y = random(height - square_size); //Spawn random de carré sur les coo Y
  lastTime = millis()- floor(millis()/10000)*90; //depop au bout de x temps (le temps change au bout de X secondes en ms)
}

boolean over_square() {
  return(
    mouseX > square_x && //si je click sur le carré, alors disparition  
    mouseX < square_x + square_size &&      
    mouseY > square_y && 
    mouseY < square_y + square_size
    );
}

```

---

<div class="post-metadata">

### Author: ![Chrisir](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/chrisir/32/45_2.png) [@Chrisir](https://discourse.processing.org/u/Chrisir)
#### Post date: [March 1, 2021, 9:25am UTC](https://discourse.processing.org/t/create-another-window-accessible-with-a-key-from-the-menu/28108/2 "2021-03-01T09:25:50Z")

</div>

> [@Torikusu](#):
>
> `keyPressedForSetting() {`

Check the brackets here

Missing }

---

<div class="post-metadata">

### Author: ![Torikusu](https://avatars.discourse-cdn.com/v4/letter/t/9f8e36/32.png) [@Torikusu](https://discourse.processing.org/u/Torikusu)
#### Post date: [March 1, 2021, 11:52am UTC](https://discourse.processing.org/t/create-another-window-accessible-with-a-key-from-the-menu/28108/3 "2021-03-01T11:52:01Z")

</div>

Its said “The function showSetting() does not exist.”

```auto
float wait2 = 1000 - floor(millis()/1000)*90;
int lastTime = 0; 
int score = 0; 
int score2 = 0;
int bonus = 1;
int square_size = 50;
float square_x;
float square_y;
final int menu = 0;
final int jeux = 1;
final int setting = 2;
int state = menu;
PFont font;
PImage img;
PFont police;

void setup() {
  size(900,600); //feunetre 900x600
  smooth(); //dessine la geometrie avec des arretes lisses
  police = loadFont("Arial-Black-48.vlw"); //charger police d'écriture 
  img=loadImage("Sans titre-67.jpg"); //quel image je dois charger (au prealable mis dans data)
}

// **********Changement de fenetre********* \\

void draw() {
  switch (state) {
  case menu:
    showMenu(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case setting:
    showSetting(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case jeux:
    handlejeux(); //developpement plus bas
    break; //passer a l'instruction suivante 
  default:
    println ("Unknown state (in draw) "
      + state
      + " ++++++++++++++++++++++");
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  } 
}

//**********Multiplicateur de score (score de base + bonus)*********\\

void mousePressed() {
  if (state!=jeux)
    return; 

 if ( over_square() ) {     
    score += bonus; //plus j'appuye plus je gagne du score
    bonus++;

    score2 += 1;         
  } else {
    score = 0; //score de base
    bonus = 1; //score +1 par combo

    score2 = 0; //autre score mais avance de 1
  }
  randomize_square_position();
}

void keyPressed() {
  switch (state) {
  case menu:
    keyPressedForMenu(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case setting:
    keyPressedForSetting(); //developpement plus bas
    break;          
  case jeux:
    keyPressedForjeux(); //developpement plus bas
    break; //passer a l'instruction suivante 
  default:
    println ("Unknown state (in keypressed) "
      + state
      + " ++++++++++++++++++++++");
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  } 
} 

//**********Action si touche pressé (changement de background)*********\\

void keyPressedForMenu() {

  switch(key) {
  case '1': //si j'appuye sur 1....
    state = jeux; //changer ecran sur jeux
    break; //passer a l'instruction suivante 
    
  case 'x': //si j'appuye sur x....
  case 'X': //ou X
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  }
} 

void keyPressedForSetting() {
  
  switch(key) {
  case '2':
    state = setting;
    break;
  }
}

void keyPressedForjeux() {
  switch(key) {
  default:
    key=0; 
    state = menu;
    break; //passer a l'instruction suivante 
  }
}

//**********Apparence visuel du menu (emplacement des textes...etc)**********\\

void showMenu() { //Mon ecran menu
  image (img,0,0); //joli photo fais pas mes soins ;)
} 

void showMenu() {
  image (img,0,0);
}

// **********Mon jeux********** \\

void handlejeux() { //mon ecran jeux
  background(78, 61, 40); //couleur du fond noir 
  fill(255); //couleur blanche
  if (lastTime + wait2 < millis()) { //si j'ai pas click au bout de X temps
    randomize_square_position(); //alors nouveau carré
  }
  rect(square_x, square_y, square_size, square_size); //dessin du carré
  textFont(police,32); //mettre la police d'écriture
  text("Score = ", 680,50, height-25); //Afficher "Score =" a certaine coo
  textFont(police,32); //mettre la police d'écriture
  textSize(32); //taille du texte
  textFont(police,32); //mettre la police d'écriture
  text(score, 830,50, height-25); //coordonnée du score
  textFont(police,32); //mettre la police d'écriture
  text("X ", 30,570, height-25); //Afficher "X" a certaine coo
  textFont(police,32); //mettre la police d'écriture
  text(score2, 60,570, height-25); //coordonnée du score
}

void randomize_square_position() { //commande du random spawn
  square_x = random(width - square_size); //Spawn random de carré sur les coo X
  square_y = random(height - square_size); //Spawn random de carré sur les coo Y
  lastTime = millis()- floor(millis()/10000)*90; //depop au bout de x temps (le temps change au bout de X secondes en ms)
}

boolean over_square() {
  return(
    mouseX > square_x && //si je click sur le carré, alors disparition  
    mouseX < square_x + square_size &&      
    mouseY > square_y && 
    mouseY < square_y + square_size
    );
}

```

---

<div class="post-metadata">

### Author: ![Chrisir](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/chrisir/32/45_2.png) [@Chrisir](https://discourse.processing.org/u/Chrisir)
#### Post date: [March 1, 2021, 11:54am UTC](https://discourse.processing.org/t/create-another-window-accessible-with-a-key-from-the-menu/28108/4 "2021-03-01T11:54:00Z")

</div>

> [@Torikusu](#):
>
> ```auto
> case setting:
> showSetting(); //developpement plus bas
> break;  
> 
> ```

you call showSetting() in draw() now you have to write the function showSetting()

---

<div class="post-metadata">

### Author: ![Torikusu](https://avatars.discourse-cdn.com/v4/letter/t/9f8e36/32.png) [@Torikusu](https://discourse.processing.org/u/Torikusu)
#### Post date: [March 1, 2021, 2:34pm UTC](https://discourse.processing.org/t/create-another-window-accessible-with-a-key-from-the-menu/28108/5 "2021-03-01T14:34:55Z")

</div>

Ahh great thank you but on the other hand when I press the “2” key it does not change the window, it is an error in the keys?

```auto
void keyPressedForShowSetting() {
  
  switch(key) {
  case '2':
    state = setting;
    break;
  }
}

```

```auto
float wait2 = 1000 - floor(millis()/1000)*90;
int lastTime = 0; 
int score = 0; 
int score2 = 0;
int bonus = 1;
int square_size = 50;
float square_x;
float square_y;
final int menu = 0;
final int jeux = 1;
final int setting = 2;
int state = menu;
PFont font;
PImage img;
PFont police;

void setup() {
  size(900,600); //feunetre 900x600
  smooth(); //dessine la geometrie avec des arretes lisses
  police = loadFont("Arial-Black-48.vlw"); //charger police d'écriture 
  img=loadImage("Sans titre-67.jpg"); //quel image je dois charger (au prealable mis dans data)
}

// **********Changement de fenetre********* \\

void draw() {
  switch (state) {
  case menu:
    showMenu(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case setting:
    showSetting(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case jeux:
    handlejeux(); //developpement plus bas
    break; //passer a l'instruction suivante 
  default:
    println ("Unknown state (in draw) "
      + state
      + " ++++++++++++++++++++++");
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  } 
}

//**********Multiplicateur de score (score de base + bonus)*********\\

void mousePressed() {
  if (state!=jeux)
    return; 

 if ( over_square() ) {     
    score += bonus; //plus j'appuye plus je gagne du score
    bonus++;

    score2 += 1;         
  } else {
    score = 0; //score de base
    bonus = 1; //score +1 par combo

    score2 = 0; //autre score mais avance de 1
  }
  randomize_square_position();
}

void keyPressed() {
  switch (state) {
  case menu:
    keyPressedForMenu(); //developpement plus bas
    break; //passer a l'instruction suivante 
  case setting:
    showSetting(); //developpement plus bas
    break;         
  case jeux:
    keyPressedForjeux(); //developpement plus bas
    break; //passer a l'instruction suivante 
  default:
    println ("Unknown state (in keypressed) "
      + state
      + " ++++++++++++++++++++++");
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  } 
} 

//**********Action si touche pressé (changement de background)*********\\

void keyPressedForMenu() {

  switch(key) {
  case '1': //si j'appuye sur 1....
    state = jeux; //changer ecran sur jeux
    break; //passer a l'instruction suivante 
    
  case 'x': //si j'appuye sur x....
  case 'X': //ou X
    exit(); //quitter le programme
    break; //passer a l'instruction suivante 
  }
} 

void keyPressedForShowSetting() {
  
  switch(key) {
  case '2':
    state = setting;
    break;
  }
}

void keyPressedForjeux() {
  switch(key) {
  default:
    key=0; 
    state = menu;
    break; //passer a l'instruction suivante 
  }
} 

//**********Apparence visuel du menu (emplacement des textes...etc)**********\\

void showMenu() { //Mon ecran menu
  image (img,0,0); //joli photo fais pas mes soins ;)
} 

void showSetting(){
  background(255);
}

// **********Mon jeux********** \\

void handlejeux() { //mon ecran jeux
  background(78, 61, 40); //couleur du fond noir 
  fill(255); //couleur blanche
  if (lastTime + wait2 < millis()) { //si j'ai pas click au bout de X temps
    randomize_square_position(); //alors nouveau carré
  }
  rect(square_x, square_y, square_size, square_size); //dessin du carré
  textFont(police,32); //mettre la police d'écriture
  text("Score = ", 680,50, height-25); //Afficher "Score =" a certaine coo
  textFont(police,32); //mettre la police d'écriture
  textSize(32); //taille du texte
  textFont(police,32); //mettre la police d'écriture
  text(score, 830,50, height-25); //coordonnée du score
  textFont(police,32); //mettre la police d'écriture
  text("X ", 30,570, height-25); //Afficher "X" a certaine coo
  textFont(police,32); //mettre la police d'écriture
  text(score2, 60,570, height-25); //coordonnée du score
}

void randomize_square_position() { //commande du random spawn
  square_x = random(width - square_size); //Spawn random de carré sur les coo X
  square_y = random(height - square_size); //Spawn random de carré sur les coo Y
  lastTime = millis()- floor(millis()/10000)*90; //depop au bout de x temps (le temps change au bout de X secondes en ms)
}

boolean over_square() {
  return(
    mouseX > square_x && //si je click sur le carré, alors disparition  
    mouseX < square_x + square_size &&      
    mouseY > square_y && 
    mouseY < square_y + square_size
    );
}

```

---

<div class="post-metadata">

### Author: ![Chrisir](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/chrisir/32/45_2.png) [@Chrisir](https://discourse.processing.org/u/Chrisir)
#### Post date: [March 1, 2021, 2:42pm UTC](https://discourse.processing.org/t/create-another-window-accessible-with-a-key-from-the-menu/28108/6 "2021-03-01T14:42:56Z")

</div>

> [@Torikusu](#):
>
> ```auto
> case '2':
> state = setting;
> 
> ```

err… when you are already in state setting,  
it makes no sense to set state to setting again.

Instead say `state=menu;`
