Serial.read() is falling behind with inputs

I'm not exactly sure how your game works, but what about putting all the game code after you receive the serial event? That way you only process the players input after you actually receive it.

Something like this perchance:

void loop(){
  int array_disp = random(1,4); //Generate a random number between 1-4

    randomWork(array_disp);  //display the array based on the random integer

  Serial.println(input); //Used for debugging purposes
  if (Serial.available() > 0) {
    input = Serial.read();    //read the character from the serial port
    delay(3000);

    Serial.println(input); //Used for debugging purposes

    checkInput(input,array_disp);   //Use checkInput to see if the score gets incremented

    delay(1000);

    Serial.println(score);  //debugging
    Serial.println(prevScore);  //debugging
    Serial.println(input);  //debugging

    delay(5000);

    //Checks if the two scores are the same, if they are it means the 
    //player input an incorrect score and they have lost the game.
    if (prevScore == score) { 
      displayArray(lose);
      Serial.println("Game Over, good try!!!");
      Serial.print("Score: ");
      Serial.print(score);
      score = 0;
      prevScore = 0;
      delay(10000);
    }
    //Checks if the two scores are different, if they are the player has
    //entered the correct input.
    if (prevScore != score) {
      prevScore = score;
    }
    clearScreen();  //Clear the screen
  }
}