Simon says code

I'm having trouble with figuring out what code I'd need to use and how to get it to wait a specific amount of time, then check to see if the correct button or sequence of buttons is pressed. If there's no input or a wrong input it terminates the sequence and starts over.

int static randomNumA;
int static randomNumB;
int static randomNumC;
int static randomNumD;
int thingy1;
int thingy2;
int thingy3;

void setup()
 {
  Serial.begin(9600);
  randomSeed(analogRead(0));
  //pinMode(2,INPUT); //red button
  //pinMode(4,INPUT); //blue button
 //pinMode(7,INPUT); //green button
  pinMode(9,OUTPUT); //redLED
  pinMode(10,OUTPUT); //blueLED
  pinMode(11,OUTPUT); //greenLED
  }
  
void loop()
{
 randomNumA = random(9,12);
 randomNumB = random(9,12);
 randomNumC = random(9,12);

 for(int i=0;i<6;i++)
 {
  if (i>0)//numA
  {
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   delay(250);
   Serial.println(randomNumA);
   digitalWrite(randomNumA,HIGH);
   delay(250);
   digitalWrite(randomNumA,LOW);
   }
  delay(250);    
  if (i>1)//numA and numB
  {
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   delay(250);
   Serial.println(randomNumB);
   digitalWrite(randomNumB,HIGH);  
   delay(250);
   digitalWrite(randomNumB,LOW);
   }
  delay(250);
  if (i>2)//numA,numB,and numC
  {
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   delay(250);
   Serial.println(randomNumC);
   digitalWrite(randomNumC,HIGH);
   delay(250);
   digitalWrite(randomNumC,LOW);
   }
 /*    if (i>3)//numA
  {
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   delay(500);
   Serial.println(randomNumA);
   digitalWrite(randomNumA,HIGH);
   delay(500);
   digitalWrite(randomNumA,LOW);
   }
  delay(500);    
  if (i>4)//numA and numB
  {
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   delay(500);
   Serial.println(randomNumB);
   digitalWrite(randomNumB,HIGH);  
   delay(500);
   digitalWrite(randomNumB,LOW);
   }
  delay(500);
  if (i>5)//numA,numB,and numC
  {
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   delay(500);
   Serial.println(randomNumC);
   digitalWrite(randomNumC,HIGH);
   delay(500);
   digitalWrite(randomNumC,LOW);
   }*/
  
   
   
   
   
   
   
   
   
   
   
   
  //delay(1000);   
  /*if (i>3)//numA,numB,numC,and numD
  {
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   delay(2000);
   Serial.println(randomNumD);
   digitalWrite(randomNumD,HIGH);    
   }*/
  delay(2000);    
       		            
       
   /*digitalWrite(9,LOW);
  digitalWrite(10,LOW);
  digitalWrite(11,LOW);
  delay(2500);
  /*input buttons*/
  //for(int i=0;i<10;i++){
  /*Serial.println(randomNum);
  Serial.println(randomNum1);
  Serial.println(randomNum2);
  Serial.println(randomNum3);
  Serial.println(randomNum4);*/
  if(/*randomNum==1||*/randomNumA==1||randomNumB==1||randomNumC==1||randomNumD==1) // 1=red
  {
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   digitalWrite(9,HIGH);
   Serial.println("red");
//digitalWrite(randomNum,HIGH);
   }
  delay(500);
  if(/*randomNum==2||*/randomNumA==2||randomNumB==2||randomNumC==2||randomNumD==2) // 2=blue
  {
   digitalWrite(9,LOW);
   digitalWrite(11,LOW);
   digitalWrite(10,HIGH);
   Serial.println("blue");
   }
  delay(500);
  if(/*randomNum==3||*/randomNumA==3||randomNumB==3||randomNumC==3||randomNumD==3) // 3=green
  {
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,HIGH);
   Serial.println("green");
   }
// delay(500);
//digitalWrite(randomNum,HIGH);
  //}
       
    //}
 // delay(2000);
  }     
}     

/*void AllOffFuntion()
{
 digitalWrite(9,LOW);
 digitalWrite(10,LOW);
 digitalWrite(11,LOW);
//other pins also off
 }
/*if(randomNum==4)
{
  digitalWrite(thingy1,HIGH);
}

if(randomNum==5)
{
  digitalWrite(1,HIGH);
}*/
 

Biggest problem in your code is using delay()
Regardless of whether you know the sequence, you have to sit out the delay periods.

A very simple state machine with millis() timing can make this a fairly straightforward project.

Consider - the original SIMON games were written in assembly on tiny 4-bit microprocessors!

As mentioned, delay( ) is something you must stay away from.


Load an Array (say 30 elements) with random elements each which are 0-3 . . .
Let’s call this the randomized colour array.

0 = red, 1 = green, 2 = blue, yellow = 3 etc.

It might look like this: 0,0,3,1,2,2,1,3 . . . up to the 30th element.

Present the colours to the user, first 1 element, then 2, then 3, then 4 then 5 etc.

Each time the user presses a colour switch, that press is compared to the current element in our randomized colour array.

So instead of delay() I should use millis(), or remove it all together?

And I'm a bit new to coding and don't know what that would look like. If you don't mind, could I get an example?

Welcome

Maybe look at this : simon.ino - Wokwi Arduino and ESP32 Simulator

If you are interested in some other code to do this then you can follow the links from this blog post