Sprawdzasz tą zmienną nawet jeśli nie nastąpiło losowanie a kiedy jest nie zinicjowana konkretną wartością prawdopodobnie dostajesz bliżej nie określone śmiecie ze stosu.
Każdy case powinen być zakończony instrukcją break.
Niepotrzebnie za każdym razem ładujesz obrazki, w konstruktorze wrzuć je do jakiejś tablicy a potem
TPicture *obraski[3];
// ladowanie w konstruktorze
obraski[0] = new TPicture;
obraski[0]->LoadFromFile("img/skala1.bmp");
// losowanie obrazka
int wyglad = random(3);
skala->Picture->Assign(obraski[wyglad]);
Skały też powinny być w tablicy, w tej chwili masz trzy razy powtórzony ten sam kod dla każdej z nich.
for(int i = 0; i < ilosc_skal; ++i)
{
TImage *skala = skaly[i];
if(skala->Left > -150)
{
//zrób coś ze skala
}
else
{
//zrób coś ze skala
}
}