Dein Beispiel mit Zuma und den Kugeln wird wahrscheinlich am besten so laufen, dass Du über die Funktion ent_next jedes Frame alle Entities durchgehst und je nach ihren Eigenschaften den Abstand zu einander prüfst.
Also, z.B. wird der Abstand der Kugel, die Du abschiesst, im Verhältnis zu einem der sicherlich dicht gelegten Pfadpunkte und zu den sich darauf befindlichen Kugeln kontinuierlich überprüft.

Dies ist jetzt sehr abstrakt gesprochen.
Zum zweiten, ich denke sie werden Zufall einsetzen _und_ damit man das Spiel auch technisch gewinnbar bleibt. Ganz deutlich wird das ganz am Scluss eines Levels, wenn nur noch eine ugel übrig ist, dann bekommst Du nur noch 'Schusskugeln' der gleichen Farbe.

Dass sind nur Überlegungen dazu. Letztlich ist es je nach Spiel immer wieder die kreative Leistung des Programmierers (oder des Game Designers), sich zu überlegen, wie er die Aufgaben eines jeweiligen Spielkonzeptes löst.