Voilà un zip contenant les codes sources et toutes les ressources indispensables. J'ai juste pris le répertoire du projet et je l'ai zippé (quel sagouin...), et dans lequel je n'ai quasiment pas fait le ménage (ah bah bravo...).
Je peux te refaire un jar à importer de ton côté, si tu veux importer le projet dans eclipse ou je ne sais quel jdk.
J'ai développé dans un environnement Java 1.6, je crois qu'avec java 1.5, ça marche pas. Testé uniquement sur Windows XP et 2003 server.
En gros :
- le répertoire .settings est apparemment un cache d'eclipse, c'est pas utile.
- le répertoire /res contient les images et les fichiers de paramétrage xml et csv. La plupart sont des artefacts de mon jeu (items.xml, skills.xml...)
Le seul fichier image utilisé, si je ne me trompe pas, est tile.png, qui contient toutes les briques de construction de la map.
La map elle-même est décrite dans tilemap.csv, que j'édite avec excel pour modifier la map facilement. Il s'agit d'un fichier de 50 lignes de 50 nombres, séparés par des point-virgules. Si la map fait moins de 50x50 cases, je ne lis que N x N cases (attention : si la map n'est pas carrée, ça bug). La taille de la map se modifie dans la classe TileMap
- ywnte est le fichier où se trouvent les .java source. Et aussi des fichiers de ressource en doublon, pour je ne sais plus quelle raison.
Rapide description des classes :
Launcher ne sert qu'à lancer la fenêtre principale, c'est dedans que se trouve la fonction "main". Elle est superflue ici (sauf pour le fait qu'elle contient le main), mais j'avais commencé à gérer plusieurs threads dans mon jeu, et ça me permettait d'avoir une classe parente de tous les threads que je créais pour les fermer proprement lors d'une sortie du programme.
MainWindow est le conteneur principal, la fenêtre dans laquelle se trouve le reste. Elle a aussi un lien vers chacune des classes principales utilisées pour la gestion de chaque module (genre PersonManager, TileMap, PanGamePlay, PanInfoDisplay), et tous les modules ont un lien vers elle. Donc de n'importe quelle classe, en repassant par la classe mère, on peut accéder à l'instance de n'importe quelle autre classe.
PanButtonMenu est le panneau qui contient les 4 boutons en bas à droite, rien de particulier.
PanGameplay est le panneau où se trouve la map avec le quadrillage. C'est ici qu'est affichée la tilemap (l'affichage est géré dans la method paintComponent) en fonction de la position de l'observateur.
PanInfoDisplay est le panneau en bas à gauche, où sont affichées les informations sur les cases et les pions, ainsi que le bonheur global.
Person : c'est la classe qui représente les pions, et contient les attributs sensibilité, prox_envie, bonheur et les coordonnées. C'est dans cette classe que se trouvent les méthodes de déplacement d'un pion (le côté gestion de la souris est dans PanGameplay) et le calcul du bonheur de chaque pion.
PersonManager contient la liste de la totalité des personnes, et permet de stocker la moyenne de bonheur global.
Tile représente une case de la map. Je ne l'ai pas modifiée de mon jeu, je ne me rappelle donc plus trop ce qu'il y a dedans.
TileMap représente la map du jeu : lecture du csv, création de NxN tiles et calcul de la densité de chaque case.
La densité est calculée en parcourant les cases qui entourent une case, et en calculant nombre_de_persons_trouvées/nb_de_cases_parcourues. Le nombre de cases parcourues dépend de la variable RAYON_DENSITE présente dans TileMap. Par défaut, elle est à 1, càd qu'on parcourt les 8 cases en contact direct (diagonales comprises) avec la case dont on fait le calcul.
Enfin, TileSet crée un modèle de chaque tile et permet à TileMap de comprendre comment charger l'image de chaque Tile depuis le fichier tile.png, qui les contient toutes, en se basant sur le fichier de description tileset.xml. Chaque modèle de tile sera cloné autant de fois que nécessaire dans TileMap (par exemple, la map que j'ai créée ne contient quasiment que la tile avec de l'herbe, qui a donc été clonée plus de 150 fois). Le clonage permet de définir des attributs spécifiques à chaque tile (par exemple ici, densité).