When the game engine determines that an UFO collides with another UFO, the latter is responsible for doing the proper effects (damage and such).
Example: Ship collides with generic UFO.
Ship::collideWithUFO(UFO u) { u.collideWithShip(this); } UFO::collideWithShip(Ship s) { /* Subclass responsibility. * Example: * s.takeDamage(50); */ }