Já uso o
srandom(time(NULL));
Sem ele o sorteio é sempre o mesmo.
Quanto ao "comboio", eu usava em outro programa
(double)random()/(double)RAND_MAX
para retornar um número entre 0 e 1. Aí adaptei para o que vc viu. Nem lembrei do %.
Andei lendo algumas coisas ontem sobre casos em que o switch é uma boa opção e acho que nesse meu caso é melhor ficar com ele mesmo. Tô vendo se aprendo um pouco de SDL e esse pedaço de código faz parte de uma tentativa de fazer um tetris (já tá funcionando, mas ainda não tem pontuação e tá meio cru).