El principal problema que tengo es quizá por no saber Física. Se me ocurre algo así:
Se mueve el barril que está más a la izquierda.
luego el siguiente, y así sucesivamente hasta el más derecho.
Luego se va mirando desde la izquierda, a ver si quedó tocando a uno de delante, en cuyo caso el de atrás pierde velocidad y el de delante gana.
El problema es que a altas velocidades puede ocurrir algo así:

Abajo, se movieron, como indiqué, pero el de más izquierda se movía mucho más rápido que el del medio, que era más rápido que la derecha, así que quedaron tocándose los 3. Si en el programa pongo que I se detenga por tocar a M, y M se detenga por tocar a D, entonces I y M van a quedarse tocando y quietos, lo cual no es físicamente posible, sería que estén ocupando el mismo espacio.
¿Cómo lo hago bien?