You should use a model-view-controller structure to design the game. This eliminates the need to focus on just one small minute aspect of the game and help you group different objects into specific classes.
http://blog.codinghorror.com/understanding-model-view-controller/
My suggestion:
Game (model) class should have a method called
getListOfObjects(). And this method should do exactly what the name suggests - return all game objects in the game
Game should have a list of observers, i.e. objects to be notified when the game has changed (
gameChanged). As the game is running, it should be call
gameChanged on each observer in this list and they should do different things like updating the
view, redrawing objects, or in your case, playing a sound for when the bullet hits something
Assuming you have a way of checking if an object collides with another, you should add a
play_sound method to the
GameObject class. Then when an object like a bullet for example has collided with something else, it should play it's sound.
You can make this as simple as each object having just one sound it makes, or you can make it as complex as using having different sounds for different states of the object - footsteps fading, etc
Hope that helps