Voici une toute première étape de mon moteur de tilegame ... :) Il s'agit donc pour l'instant d'un affichage en 2D avec vue du dessus. Je compte en fait finaliser le moteur de cette manière avant de faire un affichage en 3D iso.

En effet, de par sa programmation en MVC, la vue (l'affichage) se contente de réagir aux évenements du model (les données). Le plus gros du travail consiste donc a structurer correctement le modele pour qu'il stocke les données de manière optimale, et de lui faire envoyer les bons évenements. La partie affichage ne devient en fait qu'un "détail" ... :)






Pour ce qui est du stockage des données, étant donné que j'ai trouvé peu de ressources sur la programmation d'un tel moteur en POO (beaucoup d'exemples en C, mais c'est pas vraiment pareil), je suis donc parti de rien. Juste le fait de savoir qu'il faut que la carte ai plusieurs niveaux, dans l'optique de la 3D iso.

Le modele contient donc un tableau des différentes couches, qui sont elle-mêmes des tableaux à deux dimensions contenant uniquement des nombres. Pour l'instant je n'ai que deux couches : la couche du sol (les cases blanches), et la couche du décor (les murs, symbolisés par les cases noires).

Le modèle contient également un tableau "d'éléments". Je nomme élément tout ce qui peut recevoir le focus durant un jeu. Certains pouront se déplacer (héro, NPC, etc..), et d'autres non. Une classe Element leur est dédiée. Chaque élément est situé sur une couche de la carte.

Comme il faut le faire en MVC, le contrôleur est la classe qui va spécifier au modèle les actions à effectuer. C'est donc cette classe qui se charge également d'écouter le clavier (pour l'instant, ensuite les déplacements pouront se faire à la souris).

Lors d'une instruction de déplacement d'un élément recue du contrôleur, le modèle vérifie si cet élément peut se déplacer sur la case de destination, et applique ces modifications si c'est le cas. Ensuite, il emet un évenement qui va être reçu par la vue, qui va déplacer le clip correspondant.

Le chargement des données se fait bien évidemment via un fichier XML qui contiendra toutes les infos. Je pense aussi rajouter une balise qui permettra d'affecter une action à une case. Voici la structure du fichier XML :<?xml encoding="UTF-8"?>
<map width="10" height="10">
<layers>
<layer depth="0">
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
</layer>
<layer depth="1">
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,10, 0, 0, 0, 0, 0, 0, 0, 0,
0,10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,10, 0, 0, 0, 0, 0, 0,
0, 0, 0,10, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
</layer>
</layers>
<elements>
<element type="CHARACTER" layer="1" focus="true">LAlex</element>
</elements>
</map>

En fait, ce moyen de programmer est assez excellent ! :D Je le mets en pratique "à ma manière", étant donné que je n'ai pas vraiment de référence la dessus, mais j'essaie d'appliquer le concept de la manière dont je le comprends, et je trouve ca passionant ! 8)