How to restart from within an if-statement?

Hello,

I am about to make a two player LED reaction game with my Arduino which basically is about being the first to push a button when an LED lights up at a random time. Your points are displayed in three point-LEDS, and when all three are lit up, you have won. The game works all fine, however I need it to restart from "void loop();" when one of the players has won in order to make the point system work as I want it.

I have tried to make a goto-function within the if-statement that controls wether one of the players has won. I am directing the "goto" to a label just after "void loop();. However it doesn't restart the game from scratch. So my question is, how do I best break out from the if-statement and start from the top?

I'm sorry if this is a stupid question, but I'm a newbie and I've already tried to google it... Hope somebody has advice for me!

This is the code for one of the players:

void loop() {
[b]restart:[/b]

  delay(random(5000)); // Sets the time delay radomly, up to 5 seconds.

  // Check to make sure nobody has jumped the gun.
  // If either button is already pressed, re-start the loop
  if (digitalRead(Button) || digitalRead(Button2))

    return;

  digitalWrite (GO, HIGH);

  // Read buttons until one has gone HIGH
  do {
    PLAYER1BUTTON = digitalRead(Button); 
    PLAYER2BUTTON = digitalRead(Button2);
  } 
  while (!PLAYER1BUTTON && !PLAYER2BUTTON);

  digitalWrite (GO, LOW);

  // If player 1 has pressed, light their light.
  
  if (PLAYER1BUTTON) {
    digitalWrite(player1, HIGH);
    delay (1000);
    digitalWrite (player1, LOW);
    digitalWrite(p1point1, HIGH);
    if (player1Round == 2) {
      digitalWrite(p1point2, HIGH);
    }
    if (player1Round == 3) {
      digitalWrite(p1point3, HIGH);
      delay(500);

//three points lit = player1 won the game

[b]     goto restart; //now restart the game[/b]
    }
    player1Round += 1;
  }

Perhaps something like:

  if (condition)
  {
    // cleanup
    setup () ;
    return ;
  }

with appropriate code to clean up before restarting.

To ommit goto statement why not use a variable e.g restart

Bool restart; .. Void loop() { Restart = false; .. if (player1Round == 3) { .. Restart = true; } If (!restart) player1Round += 1;

To ommit goto statement why not use a variable e.g restart

Bool restart;
..
Void loop()  {
Restart = false;
..
if (player1Round == 3) {
..
Restart = true;
}
If (!restart)
 player1Round += 1;

a variation on markT 's work

void setup()
{
  ... the really only once things here

  initialize();
}

void loop()
{
  ...
  if (condition) 
  {
    intialize();
    return;
  }
  ...
}