Hmmm, vrouaip. Plutôt que juger la qualité du code, je te passe des liens qui me semblent parlants (pas forcément à recopier tels-quels, mais dont la conception peut être intéressante à étudier).
Je pense que ta boucle de jeu pourrait être plus claire, en poussant un peu plus loin le concept d'états de jeu que tu as commencé à implémenter.
Basiquement, je verrais un truc du genre :
while True:
while e = event.poll() :
currentstate.processEvent(e)
currentstate.update()
clearwindow()
currentstate.draw()
display()
Le pattern gamestate :
http://www.planet-dev.com/developpement/jeux-video/game-state-pattern
Une proposition de squelette d'application :
http://www.sfml-dev.org/forum-fr/viewtopic.php?p=16831#16831
Un article sur la boucle de jeu :
http://dewitters.koonsolo.com/gameloop.html
Aussi, la gestion de ressources a l'air morcelée sur différentes classes. Tu pourrait implémenter un gestionnaire de ressources contenant un dict des images utilisées dans le jeu, la classe implémenterait ton/tes loaders et dans le reste du code il te suffirait d'appeler ressources.getImage(["media","misc","toto.png"]) pour obtenir (et charger à la volée si besoin) une référence à media/misc/toto.png.
La gestion de ressources :
http://www.sfml-dev.org/wiki/fr/sources/imagemanager
Sinon, j'ai un peu de mal à me retrouver dans ton code, je ne sais pas exactement ce qui gère la physique, les ressources, la logique du jeu... Un peu de séparations dans tout ça éclaircirait le tout à mon avis.
Comme d'hab, ce ne sont que des suggestions.