Se me ocurre que el agua sea un objeto, también las tuberías y los puntos de salida y entrada de agua. Que el objeto salida cree una instancia del objeto agua y le de una dirección inicial, entonces el objeto agua se movería dependiendo del tipo de objeto tubería que esté abajo (los tipos de trayectorias tendrían que estar definidos en el objeto agua). Por el momento sería útil visualizar el agua como un punto, sin tener que dibujar el recorrido ni el volumen, para simplificar las cosas. Para saber en qué tipo de tubería está se usaría la función collision_point. Cuando el objeto agua esté tocando una salida de agua podría cambiar una variable de un objeto controlador, por ejemplo obControl.meta = true, éste objeto se encargaría de mostrar un mensaje de que has ganado, pasar de nivel, etc. Si el objeto agua llega a donde no hay objetos tubería o llega a una tubería cuya trayectoria no puede seguirse, asigna un valor a otra variable del objeto controlador, por ejemplo obControl.fuga = true, en ese caso el objeto controlador restaría una vida, reiniciaría el nivel o reiniciaría el juego.
Ahora toma lápiz y papel y empieza a meditar cómo implementar esos mecanismos. Seguramente llegaras a plantearte preguntas mas concretas.
Ahora toma lápiz y papel y empieza a meditar cómo implementar esos mecanismos. Seguramente llegaras a plantearte preguntas mas concretas.