Projet 2 : correction
Transcription
Projet 2 : correction
Projet 2 : correction Analyse Le projet 2 demande de générer les divisions dans la div #view à partir du code Javascript. Il faudra les sauver dans un tableau walls[][]. A la réinitialisation, on s'assurera que les murs seront affichés/cachés selon les besoins. De nombreux accès devront être faits sur les divisions nouvellement créées, il est donc intéressant de les sauver dans une variable avant de les copier dans le tableau. Solution HTML On ajoutera le fichier staticdata.js dans les javascript chargés et on retirera les divisions créées dans #view sethandlers() On déplacera les associations de handlers aux événements dans cette fonction ($('...').onclick=... et autres) init() Cette fonction commencera par préparer le tableau walls[][] pour qu'il soit en deux dimensions for(i=0;i<7;i++) { walls[i]=new Array() ; } Le tableau walls soit avoir été créé avant init() (hors de toute fonction) par la ligne var walls=new Array() ; Il suffit ensuite d'appeler dans l'ordre gamefield, initdisp et sethandlers gamefield() Il suffit de boucler sur toutes les cellules des tableaux wallset..., de tester si wallsetImage est non vide et, dans ce cas, de créer une <div>, remplir ses styles, ajouter la div à #view et la sauver dans le tableau for(i=0;i<7;i++) { for (j=0;j<5;j++) { if (wallsetImage[i][j]!= "") { div=document.createElement("div") ; div.style.backgroundImage="url('img/"+wallsetImage[i][j]+"')" ; div.style.top=wallsetTop[i][j]+"px" ; [...] walls[i][j]=div ; $("view").appendChild(div); } } } Pour le background position, on ne change sa valeur que si j<2. if (j<2) { div.style.backgroundPosition="100% 0"; } Initgame() Les divisions (1,1), (1,3), (3,1), (3,3), (4,1), (4,3), (6,1), (6,3) devront tout le temps être affichées, on fera donc des show sur les éléments de walls[][] correspondant : show(walls[1][1]) ; show(walls[1][3]) ; [...] La division (5,2) sera elle tout le temps masquée hide(walls[5][2]) ; On initialisera également les contrôles et les divisions correspondantes à ce niveau (voir correctif exercice 1) Les gestionnaires d'événement Au lieu de faire des show et des hide sur des ID, on les fera sur les éléments walls[i][j] qui correspondent. Par exemple, le bouton agira sur walls[1][2] au lieu de "F0M" Améliorations possibles On pourrait imaginer un tableau wallsetShow[][] qui contiendrait des 1 si la division doit être initialement visible et 0 sinon et, dans initgame, faire une boucle sur walls[][] et si la valeur est différente de null, faire un show ou un hide en fonction de ce tableau.