Utilise une classe anonyme pour le thread des tours de jeu
Thread t = new Thread(new Runnable() {...}); au lieu de Thread t = new Thread(new RunImpl()); puis déclaration de la classe RunImpl implémentant Runnable.
Génère des étiquettes avec les informations de chaque joueur et les place sur les panneaux latéraux.
Met à jour les étiquettes des joueurs quand nécessaire.
Divise l'interface Observer en deux types : un pour les éléments du gamePanel (FrameObserver) et un pour les éléments du type des étiquettes (LabelObserver), pour ne pas avoir à implémenter dans les étiquettes des méthodes inutiles.
Les étiquettes écoutent le modèle.
Le modèle informe les étiquettes lors de changements (distribution/vol de ressources ; constructions).
Ajoute un panel indiquant les ressources du joueur en cours.
Panel mis à jour automatiquement à chaque changement de joueur.
Change la couleur du bandeau de ressources en fonction du joueur actif.
Ajoute l'affichage du lancé de dés.