Celà fait longtemps que je veux réaliser un jeu du royaume, c'est à dire un jeu où l'on gère un domaine quelconque (oui, c'est le nom originel de ce genre de jeux). Eh bon, après environ 25 ans, me voilà à l'ouvrage.

dimanche 29 janvier 2012

Les forêts - Affichage

Maintenant que nous avons réglé notre problème, voilà comment Ratsodie affiche ses bouts de bois.

D'abord, je crée un tableau :

kf = new Array();

Ensuite, juste après l'accolade fin de l'affichage des rivières, j'ajoute ceci :

if (foret[i][j]==1 && mer != 1)
{
for (var k=1;k<10;k++)
{
if (kf[k]==0)
{
ncase = "foret_"+k+".svg";
case3[i3+"*"+j3] = document.createElement("img");
case3[i3+"*"+j3].src=ncase;
case3[i3+"*"+j3].setAttribute('width',taille_case);
//case3[i3+"*"+j3].setAttribute('height',taille_case_vertical);
case3[i3+"*"+j3].setAttribute('id','case3['+i3+'*'+j3+']');
document.getElementById('ratsodie').appendChild(case3[i3+"*"+j3]);
case3[i3+"*"+j3].style.position = 'absolute';
case3[i3+"*"+j3].style.bottom = i2 + 'px';
case3[i3+"*"+j3].style.left = j2 + 'px';
case3[i3+"*"+j3].style.zIndex = j4+1;
foretoui=0;
}
}
}


Rien d'extraordinaire, comme vous le voyez. Je pense que la plus grande partie de ce code d'affichage d'image pourrait aller dans une fonction que les parties pour le terrain, les rivières et la forêt appelleraient en lui passant "ncase, i2, j2, i3, j3 et j4 (les coordonnées).

Je veux dire, dès que je saurais si on PEUT faire des fonctions en javascript...

À vrai dire, je ne sais pas s'il est vraiment utile de donner une variable différente à chaque image, et s'il ne serait pas plus simple d'appeler tout ça "image" plutôt que caseX[blablabla+"*"+blablabla], et point à la ligne. J'essaierai ça.

Le code commence par vérifier qu'il y a bien une forêt dans la case, mais pas la mer.

Ensuite, on fait une boucle pour les neuf parties de case.
Pour chacune, on vérifie que son kf est bien à 0 (si une autre partie de Ratsodie a mis cette valeur à 1, cela veut dire "pas de forêt ici")

Oh, et ne pas oublier :
Le tableau "kf" sert à indiquer s'il y a une forêt dans chaque sous-case (1 à 9).
Il faut donc le vider à chaque nouvelle case affichée. Or, apparemment, il n'existe pas de moyen simple pour vider un tableau (le javascript doit avoir été prévu pour des scripts de toute petite taille au début de sa carrière. Il n'est pas dit qu'on ait prévu qu'on puisse un jour avoir besoin de réutiliser un tableau).

Donc, je fais comme ça :

            for(var k2=0;k2<10;k2++) {kf[k2]=0;}

que j'ajoute juste juste au début de la boucle "J". Ça met toutes les valeurs du tableau à 0.

Dernier point :

kf[5]=1;
if (fleuve.indexOf(fleuve_element_n) != -1) {fleuve_voisin+=1;
kf[4]=1;}
if (fleuve.indexOf(fleuve_element_e) != -1) {fleuve_voisin+=2;
kf[8]=1;}
if (fleuve.indexOf(fleuve_element_s) != -1) {fleuve_voisin+=4;
kf[6]=1;}
if (fleuve.indexOf(fleuve_element_o) != -1) {fleuve_voisin+=8;
kf[2]=1;}

La partie ajoutée (au début du code affichant les fleuves) est en rouge.


En clair, quand il y a un fleuve dans la case, Ratsodie vérifie s'il y en a aussi un dans une case voisine afin de les joindre. Si tel est le cas, il ne peut pas y avoir de forêt dans la sous-case où va passer le cours d'eau, aussi Ratsodie passe-t'il la valeur de kf[numéro de la partie de case/forêt] à 1, ce qui sera vu lorsqu'il sera temps d'afficher la forêt comme un "pas d'arbres ici".

Et, bien entendu la case kf 5, qui est au centre, ne peut jamais avoir d'arbres s'il y a un fleuve dans la case, puisque tous les fleuves passent toujours par le centre de la case.



Aucun commentaire:

Enregistrer un commentaire