Seems like the answer is right there inthe video but whatever.
I suggest you set up some arrays, each of the size that is how many drops you want. SO, an array for the y position, another array for the x position, and one for the speed, you could also have one for the color, and another for how long the tail is for each drop. The following is based on your code , you should be able to cut and paste from this back into your structure.
//Globals
int howmany = 10; //10 drops
int x[10] , y [10] , yspeed[10], tail[10], color[10];
void setup()
{
//!!!
//your code for setting up the matrix was here, put it back!!!
//!!!
for ( byte i = 0; i < howmany; i++) { //set up all the drops with initial values
x[i] = random (MATRIX_WIDTH);
y[i] = -random(40, 20); //starting point
yspeed[i] = random(1, 5);
tail[i] = random(2, 5);// soomething new, now long is the tail…
color[i]= random8();// another new thing, pick a color for the drop too…
}
}
void loop() {
Show();
FastLED.delay(40);
FastLED.clear();
}
void Show() {
for (byte i= 0 ;i < howmany; i++) {
y[i] = y[i] + yspeed[i]; //y position = current value of y + the random speed variable
if (y[i] > MATRIX_HEIGHT + tail[i]) { //If the y value plus the tail exceeds the height of the matrix, then give y a new value
y[i] = random(-40, -20);
x[i] = random (MATRIX_WIDTH);
yspeed[i] = random(1, 5);
tail[i]= random(2,5);
}
else
// leds.DrawLine(x[i] , y[i] , x[i] , y[i] +tail[i], CRGB::Purple); //Draw a line from (x0, y0) to (x0, y0+2) The y+tail will make the raindrop tail pixels tall
leds.DrawLine(x[i] , y[i] , x[i] , y[i] +tail[i], CHSV(color[i], 255, 255)); //or do it with each drop having a new color
}
}