Javascript, destruction de div

Javascript, destruction de div - HTML/CSS - Programmation

Marsh Posté le 14-04-2014 à 22:39:13    

Bonsoir, encore moi pour le projet de tower Defense, je touche bientôt à la fin, en fait, il reste que la partie projectile pour pouvoir passer ensuite à l'optimisation et à des améliorations comme par exemple le placement des tours lors du clique de souris enfin bref ce n'est pas le soucis.
 
Tout d'abord, avant de vous montrez le code (j'ai essayé de faire un jsfiddle, mais pas moyen de faire apparaitre le javascript je comprends pas pourquoi..), voila une brève explication: Les div mobs sont générés et stocker dans ensembleMob[], les div tours sont générés et stocker dans ensembleTour[], et les projectile dans ensembleProjectile[]. J'ai deux fonctions principales qui tournent en continuent qui sont l'animation des mobs, l'animation des projectiles qui fonctionnent, sauf pour la fin de l'animation projectile, qui est la cause de mon poste et la fonction testEnVie, et une fonction projectileCreation, qui est appelée chaque demi-seconde. Comme vous le verrez, mon code n'est absolument pas optimisé, mais pour l'instant je travaille comme ça, le projet de fin d'année s'appuie plus sur des éléments concrets que sur l'optimisation apparemment selon les profs, donc "si ça fonctionne c'est bon". C'est pour cela qu'il y a beaucoup de fonction de calculer d'index.
 
Maintenant pour le problème, il faut se concentrer sur la fonction animationProjectile() et sur testEnVie, l'animation du projectile se passe très bien, ainsi que la destruction du div projectile qd la distance entre le projectile et le mob est égale à 1. Le problème arrive pour la destruction du monstre quand celui ci est touché par 2 projectiles. En effet, tout d'abord, pour les 2/3 premiers mobs, le programme fonctionne parfaitement, et les mobs sont détruit, mais ensuite, bien que les projectiles soient en collision avec le monstre, et soient détruit, le monstre ne semble pas être affecté par la perte de point de vie et donc n'est pas détruit par la fonction testEnVie. Je pense avoir une piste sur le problème, mais je n'en suis pas certain. Prenons un exemple avec le premier mob ou la fonction fonctionne bien. Lorsqu'une tour détecte un mob a 200px, celle ci crée des projectiles qui se dirigent sur ce mob (le plus proche), le problème est que 4 projectiles ont le temps d’être appelé avant que les 2 premiers projectiles entre en collision avec le monstre et le détruisent, les deux derniers projectiles sont donc redirigés vers l'autre mob le plus proche sur la carte. Si le problème vient bien de cela, je ne comprend pas comment faire pour régler le problème..
 
Voici les différents code (pour que vous puissiez test en copiant collant si besoin): et les deux fonctions qui posent problème sont à la fin du post (du moins je suppose que le problème vient d'ici)
 
HTML:

Code :
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.  <meta charset="utf-8" />
  5.         <link rel="stylesheet" href="towerDefense.css" />
  6.         <title>Tower Defense</title>
  7.     </head>
  8.     <body>
  9.  <div id ="blocCentrale">
  10.  </div>     
  11.  <input type="button" value="Start" id="start">
  12.  <input type="button" value="Pause" id="stop">
  13.  <input type="button" value="Tour" id="tour">
  14.  <script src="towerDefense.js"></script>
  15.     </body>
  16. </html>


 
Javascript:
 

Code :
  1. var vx = 1;
  2. var vy= 1; //vitesse mob
  3. var vpx = 1;
  4. var vpy = 1; //vitesse projectile
  5. var timer1;
  6. var timer2;
  7. var ensembleMob = document.getElementsByClassName("monstre" );
  8. var ensembleTour = document.getElementsByClassName("tour" );
  9. var ensembleProjectile = document.getElementsByClassName("projectile" );
  10. window.onload = function()
  11. {
  12. var debut = document.getElementById("start" );
  13. var arret = document.getElementById("stop" );
  14. var blocCentrale = document.getElementById("blocCentrale" );
  15. var tour = document.getElementById("tour" );
  16. debut.addEventListener("click",debutPartie);
  17. arret.addEventListener("click",pause);
  18. tour.addEventListener("click",generationTour);
  19. generationMob();
  20. /*document.addEventListener('mousemove', function(e) {
  21.         blocCentrale.innerHTML = 'Position X : ' + e.clientX + 'px<br />Position Y : ' + e.clientY + 'px';
  22.     }, false);
  23. */
  24. //ensembleMob[0].style.backgroundColor = "purple";
  25. //ensembleMob[1].style.backgroundColor = "blue";    
  26. }
  27. function generationMob(){
  28. for(i = 0; i < 10; i++){
  29. creationPositionnementMob();
  30. }
  31. }
  32. function generationTour(){
  33. creationPositionnementTour();
  34. }
  35. function generationProjectile(){
  36. var porteTour = 200;
  37. var lesMobPlusProche = rechercheMobPlusProcheGeneralisation();
  38. var ecartBis = [];
  39. for (var i =0; i < ensembleTour.length; i++){
  40.  ecartBis.push(Math.floor(Math.sqrt(((ensembleTour[i].offsetLeft - ensembleMob[lesMobPlusProche[i]].offsetLeft)*(ensembleTour[i].offsetLeft - ensembleMob[lesMobPlusProche[i]].offsetLeft)+(ensembleTour[i].offsetTop - ensembleMob[lesMobPlusProche[i]].offsetTop)*(ensembleTour[i].offsetTop - ensembleMob[lesMobPlusProche[i]].offsetTop)))));
  41. }
  42. for (var i = 0; i < ecartBis.length;i++){
  43.  if (ecartBis[i] < porteTour){
  44.  projectileCreation(ensembleTour[i/*i*/].offsetTop+10,ensembleTour[i/*i*/].offsetLeft+10);
  45.  }
  46. }
  47. }
  48. function mobPlusProcheProjectile(indexProjectile){
  49. var ecartMobProjectile = [];
  50. var indexMobPlusProcheProjectile;
  51. for(var i = 0; i < ensembleMob.length;i++){
  52.  ecartMobProjectile.push(Math.floor(Math.sqrt(((ensembleProjectile[indexProjectile].offsetLeft - ensembleMob[i].offsetLeft)*(ensembleProjectile[indexProjectile].offsetLeft - ensembleMob[i].offsetLeft)+(ensembleProjectile[indexProjectile].offsetTop - ensembleMob[i].offsetTop)*(ensembleProjectile[indexProjectile].offsetTop - ensembleMob[i].offsetTop)))));
  53. }
  54. var minimum = ecartMobProjectile[0];
  55. indexMobPlusProcheProjectile = 0
  56. for (var i = 1; i < ecartMobProjectile.length; i++){
  57.  if(ecartMobProjectile[i] < minimum){
  58.        minimum = ecartMobProjectile[i];
  59.      indexMobPlusProcheProjectile=i;
  60.  }
  61. }
  62. return indexMobPlusProcheProjectile;
  63. }
  64. function mobPlusProcheProjectileGeneralisation(){
  65. var indexMobPlusProcheChaqueProjectile = [];
  66. for (var i = 0; i < ensembleProjectile.length; i++){
  67.  indexMobPlusProcheChaqueProjectile.push(mobPlusProcheProjectile(i));
  68. }
  69. return indexMobPlusProcheChaqueProjectile;
  70. }
  71. function creationPositionnementTour(){
  72. var tourCree = document.createElement("div" );
  73. tourCree.className = "tour";
  74. tourCree.style.width = "10px";
  75. tourCree.style.height = "10px";
  76. tourCree.style.backgroundColor = "green";
  77. tourCree.style.position = "absolute";
  78. tourCree.style.top = Math.floor(Math.random()*580)+"px";
  79. tourCree.style.left = Math.floor(Math.random()*580)+"px";
  80. blocCentrale.appendChild(tourCree);
  81. }
  82. function creationPositionnementMob(){
  83. var mobCree = document.createElement("div" );
  84. mobCree.className = "monstre";
  85. mobCree.style.width = "5px";
  86. mobCree.style.height = "5px";
  87. mobCree.style.backgroundColor = "red";
  88. mobCree.style.position = "absolute";
  89. mobCree.vie = 2;
  90. var mobCreeHauteur = mobCree.style.top = Math.floor(Math.random()*595)+"px";
  91. var mobCreeLargeur = mobCree.style.left = Math.floor(Math.random()*595)+"px";
  92. var aleatoirePosition = Math.floor((Math.random()*4)+1);
  93. if (aleatoirePosition == 1){
  94.  if (mobCreeHauteur != 0){
  95.   mobCree.style.left = "0"+"px";}
  96. }if (aleatoirePosition == 2){
  97.  if (mobCreeLargeur != 0){
  98.   mobCree.style.top = "0"+"px";}
  99. }if (aleatoirePosition == 3){
  100.  if (mobCreeHauteur != 0){
  101.   mobCree.style.left = "595"+"px";}
  102. }if (aleatoirePosition == 4){
  103.  if (mobCreeLargeur != 0){
  104.   mobCree.style.top = "595"+"px";}
  105. }
  106. blocCentrale.appendChild(mobCree);
  107. }
  108. function projectileCreation(top, left){
  109. var projectile = document.createElement("div" );
  110. projectile.className = "projectile";
  111. projectile.style.width = "2px";
  112. projectile.style.height = "2px";
  113. projectile.style.backgroundColor = "orange";
  114. projectile.style.position = "absolute";
  115. projectile.style.top = top +"px";
  116. projectile.style.left = left + "px";
  117. blocCentrale.appendChild(projectile);
  118. }
  119. function rechercheMobPlusProche(indexTour){
  120. var ecart = [];
  121. var indexMobProche;
  122. for (var i =0; i < ensembleMob.length; i++){
  123.  ecart.push(Math.floor(Math.sqrt(((ensembleTour[indexTour].offsetLeft - ensembleMob[i].offsetLeft)*(ensembleTour[indexTour].offsetLeft - ensembleMob[i].offsetLeft)+(ensembleTour[indexTour].offsetTop - ensembleMob[i].offsetTop)*(ensembleTour[indexTour].offsetTop - ensembleMob[i].offsetTop)))));
  124. }
  125. var minimum = ecart[0];
  126. indexMobProche = 0
  127. for (var i = 1; i < ecart.length; i++){
  128.  if(ecart[i] < minimum){
  129.        minimum = ecart[i];
  130.      indexMobProche=i;
  131.  }
  132. }
  133. return indexMobProche;
  134. }
  135. function rechercheMobPlusProcheGeneralisation(){
  136. var indexMobProcheChaqueTour = [];
  137. for (var i = 0; i < ensembleTour.length; i++){
  138.  indexMobProcheChaqueTour.push(rechercheMobPlusProche(i));
  139. }
  140. return indexMobProcheChaqueTour; // ici on a le mob le plus proche, attaché à sa tour, dans l'ordre croissant
  141. }
  142. function animationProjectile(){
  143. var distanceMobProjectile = [];
  144. var lesMobProjectilePlusProche = mobPlusProcheProjectileGeneralisation(); // index des mobs les plus proches au projectiles
  145. for (var i = 0; i < lesMobProjectilePlusProche.length; i++){
  146.  if (ensembleProjectile[i].offsetTop < ensembleMob[lesMobProjectilePlusProche[i]].offsetTop){
  147.   ensembleProjectile[i].style.top = ensembleProjectile[i].offsetTop + vpy + "px";
  148.  }
  149.  if (ensembleProjectile[i].offsetTop > ensembleMob[lesMobProjectilePlusProche[i]].offsetTop){
  150.   ensembleProjectile[i].style.top = ensembleProjectile[i].offsetTop - vpy + "px";
  151.  }
  152.  if (ensembleProjectile[i].offsetLeft < ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft){
  153.   ensembleProjectile[i].style.left = ensembleProjectile[i].offsetLeft + vpx + "px";
  154.  }
  155.  if (ensembleProjectile[i].offsetLeft > ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft){
  156.   ensembleProjectile[i].style.left = ensembleProjectile[i].offsetLeft - vpx + "px";
  157.  }
  158. }
  159. for(var i =0; i < lesMobProjectilePlusProche.length;i++){
  160. distanceMobProjectile.push(Math.floor(Math.sqrt(((ensembleProjectile[i].offsetLeft - ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft)*(ensembleProjectile[i].offsetLeft - ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft)+(ensembleProjectile[i].offsetTop - ensembleMob[lesMobProjectilePlusProche[i]].offsetTop)*(ensembleProjectile[i].offsetTop - ensembleMob[lesMobProjectilePlusProche[i]].offsetTop)))));
  161. }
  162. for (var i =0; i < lesMobProjectilePlusProche.length;i++){
  163.  if(distanceMobProjectile[i] <= 2){
  164.   blocCentrale.removeChild(ensembleProjectile[i]);
  165.   ensembleMob[lesMobProjectilePlusProche[i]].vie -= 1;
  166.  }
  167. }
  168. /*
  169. for (var i = 0; i < ensembleProjectile.length ; i++){
  170.  
  171.  if(ensembleMob[lesMobProjectilePlusProche[i]] == undefined){
  172.  blocCentrale.removeChild(ensembleProjectile[i]);
  173.  }
  174.  
  175. }
  176. */
  177.  //if(ensembleProjectile[i].offsetTop == ensembleMob[lesMobProjectilePlusProche[i]].offsetTop && ensembleProjectile[i].offsetLeft ==ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft){
  178. }
  179. function testEnVieMob(){
  180. for(var i =0; i < ensembleMob.length;i++){
  181.  if(ensembleMob[i].vie == 0){
  182.   blocCentrale.removeChild(ensembleMob[i]);
  183.  }
  184. }
  185. }
  186. function debutPartie(){
  187.     clearInterval(timer1);
  188. clearInterval(timer2);
  189.     timer1 = setInterval(unPeuTout,30);
  190. timer2 = setInterval(generationProjectile,500);
  191. }
  192. function unPeuTout(){
  193. animation();
  194. animationProjectile();
  195. testEnVieMob();
  196. }
  197. function pause(){
  198. clearInterval(timer1);
  199. clearInterval(timer2);
  200. }
  201. function animation(){
  202. var cibleTour = rechercheTourProcheGeneralisation();
  203. for (var i = 0; i < ensembleMob.length; i++){
  204.  if (ensembleMob[i].offsetTop < ensembleTour[cibleTour[i]].offsetTop){
  205.    ensembleMob[i].style.top = ensembleMob[i].offsetTop + vy + "px";
  206.  }
  207.  if (ensembleMob[i].offsetTop > ensembleTour[cibleTour[i]].offsetTop){
  208.   ensembleMob[i].style.top = ensembleMob[i].offsetTop - vy + "px";
  209.  }
  210.  if (ensembleMob[i].offsetLeft < ensembleTour[cibleTour[i]].offsetLeft){
  211.   ensembleMob[i].style.left = ensembleMob[i].offsetLeft + vx + "px";
  212.  }
  213.  if (ensembleMob[i].offsetLeft > ensembleTour[cibleTour[i]].offsetLeft){
  214.   ensembleMob[i].style.left = ensembleMob[i].offsetLeft - vx + "px";
  215.  }
  216. }
  217. }
  218. function rechercheTourProcheGeneralisation(){
  219.  var tableauIndexMob = [];
  220.  for (var i = 0; i < ensembleMob.length; i++){
  221.  tableauIndexMob.push(rechercheTourProche(i));
  222.  }
  223.  return tableauIndexMob;
  224. }
  225. function rechercheTourProche(indexMob){
  226. var distances = [];
  227. var indexTourProche;
  228. var xT = [];
  229. var yT = [];
  230. for (var i = 0; i < ensembleTour.length; i++){
  231.  xT.push(ensembleTour[i].offsetLeft);
  232.  yT.push(ensembleTour[i].offsetTop);
  233. }
  234. var xM = [];
  235. var yM = [];
  236. for (var i = 0; i < ensembleMob.length; i++){
  237.  xM.push(ensembleMob[i].offsetLeft);
  238.  yM.push(ensembleMob[i].offsetTop);
  239. }
  240. for (var i = 0; i < ensembleTour.length;i++){
  241.  distances.push(Math.floor(Math.sqrt(((xM[indexMob]-xT[i])*(xM[indexMob]-xT[i]))+((yM[indexMob]-yT[i])*(yM[indexMob]-yT[i])))));
  242.  }
  243. var minimum = distances[0];
  244. indexTourProche = 0
  245. for (var i = 1; i < distances.length; i++){
  246.  if(distances[i] < minimum){
  247.        minimum = distances[i];
  248.      indexTourProche=i;
  249.  }
  250. }
  251. return indexTourProche;
  252. }


 
Css:

Code :
  1. #blocCentrale
  2. {
  3. border: 1px solid black;
  4. position:absolute;
  5. left:25%;
  6. top:25%;
  7. width: 600px;
  8. height:600px;
  9. }
  10. #fenetreJeu
  11. {
  12. position: absolute;
  13. border:1px solid black;
  14. width:100%;
  15. height:100%;
  16. }
  17. #monstre
  18. {
  19. z-index: 0;
  20. }
  21. #tour
  22. {
  23. z-index: 1;
  24. }


 
Et voila les deux fonctions concerné, le code complet est au dessus si besoin de + d'information.
 

Code :
  1. function animationProjectile(){
  2. var distanceMobProjectile = [];
  3. var lesMobProjectilePlusProche = mobPlusProcheProjectileGeneralisation(); // index des mobs les plus proches au projectiles
  4. for (var i = 0; i < lesMobProjectilePlusProche.length; i++){
  5.  if (ensembleProjectile[i].offsetTop < ensembleMob[lesMobProjectilePlusProche[i]].offsetTop){
  6.   ensembleProjectile[i].style.top = ensembleProjectile[i].offsetTop + vpy + "px";
  7.  }
  8.  if (ensembleProjectile[i].offsetTop > ensembleMob[lesMobProjectilePlusProche[i]].offsetTop){
  9.   ensembleProjectile[i].style.top = ensembleProjectile[i].offsetTop - vpy + "px";
  10.  }
  11.  if (ensembleProjectile[i].offsetLeft < ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft){
  12.   ensembleProjectile[i].style.left = ensembleProjectile[i].offsetLeft + vpx + "px";
  13.  }
  14.  if (ensembleProjectile[i].offsetLeft > ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft){
  15.   ensembleProjectile[i].style.left = ensembleProjectile[i].offsetLeft - vpx + "px";
  16.  }
  17. }
  18. for(var i =0; i < lesMobProjectilePlusProche.length;i++){
  19. distanceMobProjectile.push(Math.floor(Math.sqrt(((ensembleProjectile[i].offsetLeft - ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft)*(ensembleProjectile[i].offsetLeft - ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft)+(ensembleProjectile[i].offsetTop - ensembleMob[lesMobProjectilePlusProche[i]].offsetTop)*(ensembleProjectile[i].offsetTop - ensembleMob[lesMobProjectilePlusProche[i]].offsetTop))))); //calcule coordonnées sans la puissance pow (peur de faire une connerie)
  20. }
  21. for (var i =0; i < lesMobProjectilePlusProche.length;i++){
  22.  if(distanceMobProjectile[i] <= 2){
  23.   blocCentrale.removeChild(ensembleProjectile[i]);
  24.   ensembleMob[lesMobProjectilePlusProche[i]].vie -= 1;
  25.  }
  26. }
  27. /*
  28. for (var i = 0; i < ensembleProjectile.length ; i++){
  29.  
  30.  if(ensembleMob[lesMobProjectilePlusProche[i]] == undefined){
  31.  blocCentrale.removeChild(ensembleProjectile[i]);
  32.  }
  33.  
  34. }
  35. */
  36.  //if(ensembleProjectile[i].offsetTop == ensembleMob[lesMobProjectilePlusProche[i]].offsetTop && ensembleProjectile[i].offsetLeft ==ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft){
  37. }
  38. function testEnVieMob(){
  39. for(var i =0; i < ensembleMob.length;i++){
  40.  if(ensembleMob[i].vie == 0){
  41.   blocCentrale.removeChild(ensembleMob[i]);
  42.  }
  43. }
  44. }


 
Ps: Dans certains cas, le code fonctionne, c'est pourquoi je ne comprend vraiment pas le problème de cette fonction.. Et de plus, quelqu'un a une piste pour lorsqu'un ensembleMob[x] est détruit, tout les projectiles dirigés vers lui soit supprimés ?
 
Et si jamais vous avez des idées d'amélioration je suis preneur et désolé de la manière laborieuse dont le code est fait, mais le projet de fin d'année pour le bac touche à sa fin, et je n'ai pas eu le temps d'apprendre la programmation objet qui aurait été bien plus simple je pense.
 
Merci beaucoup et bonne soirée.


Message édité par Elradriel le 14-04-2014 à 22:45:28
Reply

Marsh Posté le 14-04-2014 à 22:39:13   

Reply

Marsh Posté le 14-04-2014 à 23:04:32    

Tiens un jsbin qui marche pas :o

 

http://jsbin.com/sadif/1/edit

 

Il manque des trucs dans le code que tu nous fournis, c'est pas une question de IE ou Chrome.

 

Tu cherches tes monstres, tours et projectiles avant d'en avoir créés.

 
Code :
  1. var ensembleMob = document.getElementsByClassName("monstre" );
  2. var ensembleTour = document.getElementsByClassName("tour" );
  3. var ensembleProjectile = document.getElementsByClassName("projectile" );
 

On ne va pas aller loin là :o


Message édité par youmoussa le 14-04-2014 à 23:05:39

---------------
L'humain est celui « qui agit puis qui pense : ce n’est pas parce qu’il soutient telle position qu’il agit de telle manière, mais parce qu’il a agi (comme il a été amené à le faire) qu’il va adopter telle position
Reply

Marsh Posté le 15-04-2014 à 23:08:46    

Bonsoir, déjà merci de ta réponse :), ensuite ces trois déclarations posent-ils vraiment un problème ? Car avant de mettre en place la destructions des "projectiles", il n'y avait aucun problème dans le code :x

 

Ensuite que dois-je faire donc ? Déclarer des tableaux vides en globale, pour ensuite faire un push dans ce tableau dans la fonction de création ?

 

Ps: Désolé pour mon niveau très faible en prog, mais je n'ai pas eu de cours à proprement parler, je dois me débrouiller moi même avec ce que je sais

 

Ps2: J'ai essayer une autre solution qui est de faire l'animation de chaque projectile puis de tout diriger avec une fonction centrale http://jsbin.com/xesixane/1/edit ici le problème est différent, pas tout le temps, mais des fois, les projectiles arretent subitement de bouger, et me disent que ensembleMob[mobProche] est undefined, je ne comprend pas pourquoi..

 

Merci bonne soirée


Message édité par Elradriel le 15-04-2014 à 23:21:55
Reply

Marsh Posté le 15-04-2014 à 23:13:15    

ce n'est pas la ligne de code qui pose problème, mais là où tu l'insères.
 
Au chargement de ton fichier, tu cherches dans le DOM des éléments qui ne seront ajoutés que lors du click sur start.
 
Donc forcément, ces 3 variables ont pour valeur des tableaux vides, et ton code derrière ne fonctionne pas.


---------------
L'humain est celui « qui agit puis qui pense : ce n’est pas parce qu’il soutient telle position qu’il agit de telle manière, mais parce qu’il a agi (comme il a été amené à le faire) qu’il va adopter telle position
Reply

Marsh Posté le 15-04-2014 à 23:21:38    

Je comprends ce que tu veux dire, mais je comprend pas ou est ce que je peux donc les insérer :x Dans les fonctions elles même de créations ?

Reply

Marsh Posté le 15-04-2014 à 23:36:57    

laisse la déclaration où elle est et oui, après la création.


---------------
L'humain est celui « qui agit puis qui pense : ce n’est pas parce qu’il soutient telle position qu’il agit de telle manière, mais parce qu’il a agi (comme il a été amené à le faire) qu’il va adopter telle position
Reply

Marsh Posté le 15-04-2014 à 23:56:21    

http://jsbin.com/xesixane/1/edit  
 
Voila je pense que la déclaration est bonne maintenant, mais le problème persiste :/

Reply

Marsh Posté le 16-04-2014 à 10:26:29    

:hello: !
 
À mon humble avis, le problème se situe à ce niveau :
 

Code :
  1. function testEnVieMob(){
  2.     for(var i =0; i < ensembleMob.length;i++){
  3.      if(ensembleMob[i].vie == 0){
  4.       blocCentrale.removeChild(ensembleMob[i]);
  5.      }
  6.     }
  7.     }


Que se passe-t-il si la vie de ton mob descend en dessous de 0 ? :??: Cela peut se produire s'il est touché par plusieurs projectiles entre 2 périodes de timer.
Pour moi, il faudrait effectuer le test suivant :

Code :
  1. function testEnVieMob(){
  2.     for(var i =0; i < ensembleMob.length;i++){
  3.      if(ensembleMob[i].vie <= 0){
  4.       blocCentrale.removeChild(ensembleMob[i]);
  5.      }
  6.     }
  7.     }


 
:jap:


---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 16-04-2014 à 12:41:04    

Bonjour ! Merci beaucoup pour ta réponse, effectivement je me sens tellement bête mais je n'y aurais pas pensé ! Mais le problème persiste toujours.. Le message d'erreur est : "TypeError: ensembleMob[mobProche] is undefined". Je suppose donc que le mob le plus proche du projectile n'arrive pas à être trouver, mais je ne comprend pas pourquoi.. Je vais peut être ressayer avec la fonction que j'avais donné en premier avec l'animation de tout les projectiles en meme temps et pas avec l'animationGeneralisé et je vous dis quoi.

 

merci :)

 

Ps:  Bon ça marche avec le javascript du premier post modifié :) Merci beaucoup ! Quelqu'un a une idée pour supprimer tout les projectiles allant vers un mob[x] quand celui ci est détruit ? J'avais pensé à repéter avec un undefined

Message cité 1 fois
Message édité par Elradriel le 16-04-2014 à 12:46:00
Reply

Marsh Posté le 16-04-2014 à 18:23:00    

Il faut que tu apprennes à débugger. Utilise Chrome et ouvre la dev console et que tu actives les points d'arrêt sur exception.
 
https://developers.google.com/chrom [...] exceptions


---------------
L'humain est celui « qui agit puis qui pense : ce n’est pas parce qu’il soutient telle position qu’il agit de telle manière, mais parce qu’il a agi (comme il a été amené à le faire) qu’il va adopter telle position
Reply

Marsh Posté le 16-04-2014 à 18:23:00   

Reply

Marsh Posté le 16-04-2014 à 20:49:32    

Ah merci, je connaissais pas cette méthode de debuggage ! Existe t-elle aussi sur firefox ? Le code de base étant maintenant "fini" je procède au améliorations et ajout essentiel. La première chose que je voudrais faire, c'est le positionnement des tours non pas aléatoirement, mais par repérage des coordonnées d'un clic.  
 
Html:

Code :
  1. <div id ="blocCentrale" onclick="coordonneesSouris(event);"></div>


 
Javascript:
 

Code :
  1. function coordonneesSouris(event){
  2. var tableauCoordonnes;
  3. var x = event.clientX - blocCentrale.offsetLeft ;
  4. var y = event.clientY - blocCentrale.offsetTop;
  5. tableauCoordonnes.push(x);
  6. tableauCoordonnes.push(y);
  7. return tableauCoordonnes;
  8. }
  9. function generationTour(){
  10. var coordonnes = coordonneesSouris()
  11.     creationPositionnementTour(coordonnes[0]/*left*/, coordonnes[1]/*top*/);
  12. }


 
J'ai commencé par ça, mais en fait je suis un peu perdu pour cette partie du code, je n'ai jamais utiliser cette méthode avant, et je ne comprend pas ce que l'argument "event" vient faire ici ? Si quelqu'un pouvait m'éclairer sur ceci ! Merci :)

Reply

Marsh Posté le 16-04-2014 à 22:56:37    

Elradriel a écrit :

Quelqu'un a une idée pour supprimer tout les projectiles allant vers un mob[x] quand celui ci est détruit ? J'avais pensé à repéter avec un undefined


 
Pour cette question, je pense que ça se passe dans la fonction testEnVieMob( ) : quand le mob est détruit, tu dois pouvoir retrouver quel projectile allait vers ce mob et le détruire. Si j'ai bien suivi, tu peux le faire à partir de l'index du mob et du tableau lesMobProjectilePlusProche (je dois me plonger dans le code pour confirmer cela :??:).
 

Elradriel a écrit :

Ah merci, je connaissais pas cette méthode de debuggage ! Existe t-elle aussi sur firefox ? Le code de base étant maintenant "fini" je procède au améliorations et ajout essentiel. La première chose que je voudrais faire, c'est le positionnement des tours non pas aléatoirement, mais par repérage des coordonnées d'un clic.  
 
Html:

Code :
  1. <div id ="blocCentrale" onclick="coordonneesSouris(event);"></div>


 
Javascript:
 

Code :
  1. function coordonneesSouris(event){
  2. var tableauCoordonnes;
  3. var x = event.clientX - blocCentrale.offsetLeft ;
  4. var y = event.clientY - blocCentrale.offsetTop;
  5. tableauCoordonnes.push(x);
  6. tableauCoordonnes.push(y);
  7. return tableauCoordonnes;
  8. }
  9. function generationTour(){
  10. var coordonnes = coordonneesSouris()
  11.     creationPositionnementTour(coordonnes[0]/*left*/, coordonnes[1]/*top*/);
  12. }


 
J'ai commencé par ça, mais en fait je suis un peu perdu pour cette partie du code, je n'ai jamais utiliser cette méthode avant, et je ne comprend pas ce que l'argument "event" vient faire ici ? Si quelqu'un pouvait m'éclairer sur ceci ! Merci :)


 
Pour Firefox, tu as aussi des outils intégrés dans les versions récentes du navigateur ;) (Menu Développement Web->Débogueur) .
 
Pour l'argument event, c'est un objet qui est passé à la fonction appelée lors du clic.


---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 16-04-2014 à 23:00:56    

Elradriel a écrit :

Ah merci, je connaissais pas cette méthode de debuggage ! Existe t-elle aussi sur firefox ? Le code de base étant maintenant "fini" je procède au améliorations et ajout essentiel. La première chose que je voudrais faire, c'est le positionnement des tours non pas aléatoirement, mais par repérage des coordonnées d'un clic.

 

Html:

Code :
  1. <div id ="blocCentrale" onclick="coordonneesSouris(event);"></div>
 

Javascript:

 
Code :
  1. function coordonneesSouris(event){
  2. var tableauCoordonnes;
  3. var x = event.clientX - blocCentrale.offsetLeft ;
  4. var y = event.clientY - blocCentrale.offsetTop;
  5. tableauCoordonnes.push(x);
  6. tableauCoordonnes.push(y);
  7. return tableauCoordonnes;
  8. }
  9. function generationTour(){
  10. var coordonnes = coordonneesSouris()
  11.     creationPositionnementTour(coordonnes[0]/*left*/, coordonnes[1]/*top*/);
  12. }
 

J'ai commencé par ça, mais en fait je suis un peu perdu pour cette partie du code, je n'ai jamais utiliser cette méthode avant, et je ne comprend pas ce que l'argument "event" vient faire ici ? Si quelqu'un pouvait m'éclairer sur ceci ! Merci :)

 

J'en profite aussi pour donner mon avis sur cette partie de code  [:cupra] :

  • La fonction coordonneesSouris( ) est appelée à chaque fois que tu vas cliquer dans le bloc du jeu. En un sens, c'est elle qui doit déclencher la création d'une tour par l'appel de la fonction generationTour( ), et non l'inverse.
  • La fonction generationTour( ) doit alors prendre en paramètre soit 2 valeurs (x et y), soit un tableau de coordonnées (à toi de voir  [:cupra] ).


Edit : Bien sûr, il y a d'autres modifications à apporter pour que cela fonctionne bien [:cupra]


Message édité par Soileh le 16-04-2014 à 23:04:56

---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 17-04-2014 à 07:27:32    

Bonjour, merci beaucoup pour vos réponses rapides, ce forum est très agréable ainsi que sa communauté :) Je vais essayer d'appliquer ce que tu m'as dit et je donnerai des nouvelles du projet :) Bonne journée à vous :)

Reply

Marsh Posté le 17-04-2014 à 21:25:31    

Bonsoir ! bon la fonction marche parfaitement maintenant :)
 

Code :
  1. function coordonneesSouris(event){
  2. if(tourAutorise <= 0){
  3. alert("Pas de tour disponible" );
  4. }
  5. else{
  6. var x = event.clientX - blocCentrale.offsetLeft ;
  7. var y = event.clientY - blocCentrale.offsetTop;
  8. generationTour(x,y);
  9. tourAutorise -= 1;
  10. }
  11. }
  12. function generationTour(x,y){
  13. //var coordonnes = coordonneesSouris()
  14.     //creationPositionnementTour(coordonnes[0]/*left*/, coordonnes[1]/*top*/);
  15. creationPositionnementTour(x,y);
  16. }
  17. function creationPositionnementTour(x/*top*/,y/*left*/){
  18.     var tourCree = document.createElement("div" );
  19.     tourCree.className = "tour";
  20.     tourCree.style.width = "10px";
  21.     tourCree.style.height = "10px";
  22.     tourCree.style.backgroundColor = "green";
  23.     tourCree.style.position = "absolute";
  24.     tourCree.style.top = /*top*/y+"px";
  25.     tourCree.style.left = /*left*/ x+"px";
  26. tourCree.vie = 2;
  27.     blocCentrale.appendChild(tourCree);
  28. }


 
Bon maintenant, je voudrais faire en sorte de vérifier que le bouton "tour" a été enfoncé, et en fonction de la réponse, créer la tour à l'endroit cliqué ensuite. Y a t-il une fonction déjà faite en javascript pour ceci ?

Reply

Marsh Posté le 21-04-2014 à 10:41:26    

Il faut que tu ajoutes un booléen, "tourEnAttente" par exemple, qui est à false. Au click du bouton tour, tu le passe à true.
Tu ajoutes ensuite un eventListener au click sur le document. Au moment du click tu vérifies l'état "tourEnAttente". Si il est true, tu crées ta tour et tu le repasses à false, si il est false, tu ne fais rien.

Reply

Marsh Posté le 25-04-2014 à 18:26:56    

Bonsoir, merci tout d'abord le projet avance très bien et touche à sa fin :) J'ai ajouté pleins de choses comme le fait d'améliorer les tours, de choisir un niveau de difficulté en début de partie, l'évolution du jeu au fil des niveaux, bref pleins de petites choses essentielles, mais je bloque toujours pour la suppression des projectiles quand ceux-ci étaient vers la direction de mob détruit :x j'ai essayé en passant par les index comme mentionné au dessus mais je ne comprends pas, j'aimerai donc si possible une petite aide pour démarrer
 
Je remets le code javascript si besoin:  
 

Code :
  1. var vx = 1;
  2. var vy= 1; //vitesse mob
  3. var vpx = 1.2;
  4. var vpy = 1.2; //vitesse projectile
  5. var timer1;
  6. var timer2;
  7. var timer3;
  8. var porteTour = 150;
  9. var or = 0;
  10. var niveauActuelle = 0;
  11. var tourAutorise = 2;
  12. var tourAutoriseBis = tourAutorise;
  13. var tourEnAttente = false;
  14. var niveauTour = 0;
  15. var monstreTue = [];
  16. var ensembleMob = document.getElementsByClassName("monstre" );
  17. var ensembleTour = document.getElementsByClassName("tour" );
  18. var ensembleProjectile = document.getElementsByClassName("projectile" );
  19. window.onload = function(){
  20.  
  21.    var debut = document.getElementById("start" );
  22.    var arret = document.getElementById("stop" );
  23.    var blocCentrale = document.getElementById("blocCentrale" );
  24.    var tour = document.getElementById("tour" );
  25.    var niveauSuivant = document.getElementById("nextLevel" );
  26.    var recharger = document.getElementById("reloadPage" );
  27.    var ameliorationTours = document.getElementById("upTours" );
  28.    var ajouterTour = document.getElementById("addTour" );
  29.    var tourPossible = document.getElementById("tourPossible" );
  30.    var niveauActuel = document.getElementById("niveauActuel" );
  31.    var orDisponible = document.getElementById("orDisponible" );
  32.    var tourNiveau = document.getElementById("tourNiveau" );
  33.  
  34.    debut.addEventListener("click",debutPartie);
  35.    arret.addEventListener("click",pause);
  36.    tour.addEventListener("click",changementEtatTour);
  37.    blocCentrale.addEventListener("click", tourEnAttentePositionnement);
  38.    niveauSuivant.addEventListener("click", prochainNiveau);
  39.    recharger.addEventListener("click", rechargementPage);
  40.    ameliorationTours.addEventListener("click", ameliorationTower);
  41.    ajouterTour.addEventListener("click", ajouterUneTour);
  42.  
  43.    difficultePartie();
  44.  
  45.  
  46.    tourNiveau.innerHTML = "Vos tours sont niveau " + niveauTour + ".";
  47.    orDisponible.innerHTML = "Vous disposez de : " + or + " piéces d'or";
  48.    tourPossible.innerHTML = "Vous disposez de : " + tourAutorise + " tours";
  49.    niveauActuel.innerHTML = "Vous êtes niveau : " + niveauActuelle + ".";
  50.    timer3 = setInterval(afficheElementJeu, 30);
  51.    generationMob(10);
  52. }
  53. function niveauDeDifficulte(){
  54. do{
  55. var reponseUtilisateur;
  56. reponseUtilisateur = prompt("Quel niveau de difficulte souhaitez-vous ? (facile/moyen/difficile)" );
  57. if(reponseUtilisateur == "facile" ){
  58.  return reponseUtilisateur;
  59. }
  60. if(reponseUtilisateur == "moyen" ){
  61.  return reponseUtilisateur;
  62. }
  63. if(reponseUtilisateur == "difficile" ){
  64.  return reponseUtilisateur;
  65. }
  66. else{
  67. alert("Vous n'avez pas saisi de reponse valide" );
  68. }
  69. }while(reponseUtilisateur != "facile" || reponseUtilisateur != "moyen" || reponseUtilisateur != "difficile" );
  70. }
  71. function difficultePartie(){
  72. var difficulte = niveauDeDifficulte();
  73. if(difficulte == "facile" ){
  74. porteTour = 200;
  75. or = 300;
  76. tourAutorise = 4;
  77. vx = 0.7;
  78. vy= 0.7;
  79. vpx = 1.4;
  80. vpy = 1.4;
  81. }
  82. if(difficulte == "moyen" ){
  83. porteTour = 150;
  84. or = 150;
  85. tourAutorise = 3;
  86. vx = 1;
  87. vy= 1;
  88. vpx = 1.2;
  89. vpy = 1.2;
  90. }
  91. if(difficulte == "difficile" ){
  92. porteTour = 100;
  93. or = 0;
  94. tourAutorise = 2;
  95. vx = 1.2;
  96. vy= 1.2;
  97. vpx = 0.9;
  98. vpy = 0.9;
  99. }
  100. }
  101. function ajouterUneTour(){
  102. if(or >= 1200){
  103. or -= 1200;
  104. tourAutorise +=1;
  105. }
  106. }
  107. function ameliorationTower(){
  108. if(niveauTour == 0){
  109.  if( or >= 650){
  110.  or -= 650;
  111.  niveauTour += 1;
  112.  porteTour += 10;
  113.  vpx += 0.1;
  114.  vpy += 0.1;
  115.  }
  116. }
  117. if(niveauTour == 1){
  118.  if(or >= 1250){
  119.   niveauTour += 1;
  120.   porteTour += 20;
  121.   or -= 1250;
  122.   vpx += 0.2;
  123.   vpy += 0.2;
  124.   for(var i = 0; i < ensembleTour.length; i++){
  125.    ensembleTour[i].vie +=1;
  126.   }
  127.  }
  128. }
  129. if(niveauTour == 2){
  130.  if(or >= 2200){
  131.   niveauTour += 1;
  132.   porteTour += 40;
  133.   or -= 2200;
  134.   vpx += 0.3;
  135.   vpy += 0.3;
  136.  }
  137. }
  138. if(niveauTour == 3){
  139.  if(or >= 3200){
  140.   niveauTour += 1;
  141.   porteTour += 65;
  142.   or -= 3200;
  143.   vpx += 0.4;
  144.   vpy += 0.4;
  145.   for(var i = 0; i < ensembleTour.length; i++){
  146.    ensembleTour[i].vie +=1;
  147.   }
  148.  }
  149. }
  150. if(niveauTour > 3){
  151.  alert("Le niveau des tours est au maximum" );
  152. }
  153. }
  154. function afficheElementJeu(){
  155. affichageTourDisponible();
  156. affichageNiveau();
  157. affichageOr();
  158. affichageNiveauTour();
  159. }
  160. function affichageNiveauTour(){
  161. if(niveauTour != 0){
  162.  tourNiveau.innerHTML = "Vos tours sont niveau " + niveauTour + ".";
  163. }
  164. }
  165. function affichageTourDisponible(){
  166. if(tourAutorise != tourAutoriseBis){
  167.  tourPossible.innerHTML = "Vous disposez de : " + tourAutorise + " tours";
  168.  tourAutoriseBis = tourAutorise;
  169. }
  170. }
  171. function affichageNiveau(){
  172. if(niveauActuelle != 0){
  173.  niveauActuel.innerHTML = "Vous êtes niveau : " + niveauActuelle + ".";
  174. }
  175. }
  176. function affichageOr(){
  177. if(or != 0){
  178.  orDisponible.innerHTML = "Vous disposez de : " + or + " piéces d'or";
  179. }
  180. }
  181. function rechargementPage(){
  182. window.location.reload();
  183. }
  184. function prochainNiveau(){
  185. if(ensembleMob.length == 0){
  186.  tourAutorise += 1;
  187.  niveauActuelle += 1;
  188.  generationMob(10+niveauActuelle);
  189.   for(var i = 0 ; i < ensembleMob.length;i++){
  190.    if(niveauActuelle >= 5 && niveauActuelle < 10){
  191.     ensembleMob[i].vie = 3;
  192.    }
  193.    if(niveauActuelle >= 10 && niveauActuelle < 15){
  194.     ensembleMob[i].vie = 4;
  195.     vx = 2;
  196.     vy = 2;
  197.    }
  198.    if(niveauActuelle >= 15 && niveauActuelle < 20){
  199.     ensembleMob[i].vie = 5;
  200.     vx = 3;
  201.     vy = 3;
  202.    }
  203.    if(niveauActuelle == 20){
  204.     ensembleMob[i].vie = 6;
  205.     ensembleMob[0].vie = 10;
  206.     ensembleMob[0].style.width = "15px";
  207.     ensembleMob[0].style.height = "15px";
  208.    }
  209.   }
  210. }
  211. }
  212. function changementEtatTour(){
  213. if(tourAutorise > 0){
  214. tourEnAttente = true;
  215. }
  216. }
  217. function tourEnAttentePositionnement(){
  218. if(tourEnAttente == true){
  219. coordonneesSouris(event);
  220. }
  221. if(tourEnAttente == false){
  222. alert("Pas de tour Disponible ou pas de clique sur bouton Tour" );
  223. }
  224. tourEnAttente = false;
  225. }
  226. function coordonneesSouris(event){
  227. var x = event.clientX - blocCentrale.offsetLeft ;
  228. var y = event.clientY - blocCentrale.offsetTop;
  229. generationTour(x,y);
  230. tourAutorise -= 1;
  231. }
  232. function generationMob(nombreMob){
  233.     for(i = 0; i < nombreMob; i++){
  234.     creationPositionnementMob();
  235.     }
  236. }
  237. function generationTour(x,y){
  238. creationPositionnementTour(x,y);
  239. }
  240.    
  241. function generationProjectile(){
  242.  
  243.     var lesMobPlusProche = rechercheMobPlusProcheGeneralisation();
  244.     var ecartBis = [];
  245.     for (var i =0; i < ensembleTour.length; i++){
  246.      ecartBis.push(Math.floor(Math.sqrt(((ensembleTour[i].offsetLeft - ensembleMob[lesMobPlusProche[i]].offsetLeft)*(ensembleTour[i].offsetLeft - ensembleMob[lesMobPlusProche[i]].offsetLeft)+(ensembleTour[i].offsetTop - ensembleMob[lesMobPlusProche[i]].offsetTop)*(ensembleTour[i].offsetTop - ensembleMob[lesMobPlusProche[i]].offsetTop)))));
  247.     }
  248.     for (var i = 0; i < ecartBis.length;i++){
  249.  if (ecartBis[i] < porteTour){
  250.  projectileCreation(ensembleTour[i/*i*/].offsetTop+10,ensembleTour[i/*i*/].offsetLeft+10);
  251.         }
  252.     }
  253. }
  254. function creationPositionnementTour(x/*top*/,y/*left*/){
  255.     var tourCree = document.createElement("div" );
  256.     tourCree.className = "tour";
  257.     tourCree.style.width = "10px";
  258.     tourCree.style.height = "10px";
  259.     tourCree.style.backgroundColor = "green";
  260.     tourCree.style.position = "absolute";
  261.     tourCree.style.top = /*top*/y+"px";
  262.     tourCree.style.left = /*left*/ x+"px";
  263. tourCree.vie = 4;
  264.     blocCentrale.appendChild(tourCree);
  265. }
  266. function creationPositionnementMob(){
  267.     var mobCree = document.createElement("div" );
  268.     mobCree.className = "monstre";
  269.     mobCree.style.width = "5px";
  270.     mobCree.style.height = "5px";
  271.     mobCree.style.backgroundColor = "red";
  272.     mobCree.style.position = "absolute";
  273.     mobCree.vie = 2;
  274.     var mobCreeHauteur = mobCree.style.top = Math.floor(Math.random()*595)+"px";
  275.     var mobCreeLargeur = mobCree.style.left = Math.floor(Math.random()*595)+"px";
  276.     var aleatoirePosition = Math.floor((Math.random()*4)+1);
  277.     if (aleatoirePosition == 1){
  278.      if (mobCreeHauteur != 0){
  279.       mobCree.style.left = "0"+"px";}
  280.     }if (aleatoirePosition == 2){
  281.      if (mobCreeLargeur != 0){
  282.       mobCree.style.top = "0"+"px";}
  283.     }if (aleatoirePosition == 3){
  284.      if (mobCreeHauteur != 0){
  285.       mobCree.style.left = "595"+"px";}
  286.     }if (aleatoirePosition == 4){
  287.      if (mobCreeLargeur != 0){
  288.       mobCree.style.top = "595"+"px";}
  289.     }
  290.     blocCentrale.appendChild(mobCree);
  291. }
  292. function projectileCreation(top, left){
  293.     var projectile = document.createElement("div" );
  294.     projectile.className = "projectile";
  295.     projectile.style.width = "2px";
  296.     projectile.style.height = "2px";
  297.     projectile.style.backgroundColor = "orange";
  298.     projectile.style.position = "absolute";
  299.     projectile.style.top = top +"px";
  300.     projectile.style.left = left + "px";
  301.     blocCentrale.appendChild(projectile);
  302. }
  303. function mobPlusProcheProjectile(indexProjectile){
  304.     var ecartMobProjectile = [];
  305.     var indexMobPlusProcheProjectile;
  306.     for(var i = 0; i < ensembleMob.length;i++){
  307.      ecartMobProjectile.push(Math.floor(Math.sqrt(((ensembleProjectile[indexProjectile].offsetLeft - ensembleMob[i].offsetLeft)*(ensembleProjectile[indexProjectile].offsetLeft - ensembleMob[i].offsetLeft)+(ensembleProjectile[indexProjectile].offsetTop - ensembleMob[i].offsetTop)*(ensembleProjectile[indexProjectile].offsetTop - ensembleMob[i].offsetTop)))));
  308.     }
  309.     var minimum = ecartMobProjectile[0];
  310.     indexMobPlusProcheProjectile = 0
  311.     for (var i = 1; i < ecartMobProjectile.length; i++){
  312.  if(ecartMobProjectile[i] < minimum){
  313.            minimum = ecartMobProjectile[i];
  314.     indexMobPlusProcheProjectile=i;
  315.  }
  316.     }
  317.     return indexMobPlusProcheProjectile;
  318. }
  319. function mobPlusProcheProjectileGeneralisation(){
  320.     var indexMobPlusProcheChaqueProjectile = [];
  321.     for (var i = 0; i < ensembleProjectile.length; i++){
  322.      indexMobPlusProcheChaqueProjectile.push(mobPlusProcheProjectile(i));
  323.     }
  324.     return indexMobPlusProcheChaqueProjectile;
  325. }
  326. function rechercheMobPlusProche(indexTour){
  327.     var ecart = [];
  328.     var indexMobProche;
  329.     for (var i =0; i < ensembleMob.length; i++){
  330.      ecart.push(Math.floor(Math.sqrt(((ensembleTour[indexTour].offsetLeft - ensembleMob[i].offsetLeft)*(ensembleTour[indexTour].offsetLeft - ensembleMob[i].offsetLeft)+(ensembleTour[indexTour].offsetTop - ensembleMob[i].offsetTop)*(ensembleTour[indexTour].offsetTop - ensembleMob[i].offsetTop)))));
  331.     }
  332.     var minimum = ecart[0];
  333.     indexMobProche = 0
  334.     for (var i = 1; i < ecart.length; i++){
  335.  if(ecart[i] < minimum){
  336.            minimum = ecart[i];
  337.     indexMobProche=i;
  338.  }
  339.     }
  340.     return indexMobProche;
  341. }
  342. function rechercheMobPlusProcheGeneralisation(){
  343.     var indexMobProcheChaqueTour = [];
  344.     for (var i = 0; i < ensembleTour.length; i++){
  345.      indexMobProcheChaqueTour.push(rechercheMobPlusProche(i));
  346.     }
  347.     return indexMobProcheChaqueTour; // ici on a le mob le plus proche, attaché à sa tour, dans l'ordre croissant
  348. }
  349. /*
  350. function destructionTour(){
  351. var mobProche = indexMobProcheChaqueTour();
  352.  
  353. for(var i =0; i < ensembleTour.length; i++){
  354.  
  355.  if(ensembleMob[indexMobProcheChaqueTour[i]] =
  356.  
  357. }
  358. }*/
  359. function rechercheTourProche(indexMob){
  360.     var distances = [];
  361.     var indexTourProche;
  362.     var xT = [];
  363.     var yT = [];
  364.     for (var i = 0; i < ensembleTour.length; i++){
  365.  xT.push(ensembleTour[i].offsetLeft);
  366.  yT.push(ensembleTour[i].offsetTop);
  367.     }
  368.     var xM = [];
  369.     var yM = [];
  370.     for (var i = 0; i < ensembleMob.length; i++){
  371.  xM.push(ensembleMob[i].offsetLeft);
  372.  yM.push(ensembleMob[i].offsetTop);
  373.     }
  374.     for (var i = 0; i < ensembleTour.length;i++){
  375.      distances.push(Math.floor(Math.sqrt(((xM[indexMob]-xT[i])*(xM[indexMob]-xT[i]))+((yM[indexMob]-yT[i])*(yM[indexMob]-yT[i])))));
  376.     }
  377.     var minimum = distances[0];
  378.     indexTourProche = 0
  379.     for (var i = 1; i < distances.length; i++){
  380.  if(distances[i] < minimum){
  381.            minimum = distances[i];
  382.   indexTourProche=i;
  383.  }
  384.     }
  385.     return indexTourProche;
  386. }
  387. function rechercheTourProcheGeneralisation(){
  388.      var tableauIndexMob = [];
  389.      for (var i = 0; i < ensembleMob.length; i++){
  390.      tableauIndexMob.push(rechercheTourProche(i));
  391.      }
  392.      return tableauIndexMob;
  393. }
  394. function animation(){
  395. var distanceMobTour = [];
  396.     var cibleTour = rechercheTourProcheGeneralisation(); //cible(tour) de chaque mob avec index de la tour la plus proche
  397.     for (var i = 0; i < ensembleMob.length; i++){
  398.  if (ensembleMob[i].offsetTop < ensembleTour[cibleTour[i]].offsetTop){
  399.  ensembleMob[i].style.top = ensembleMob[i].offsetTop + vy + "px";
  400.  }
  401.  if (ensembleMob[i].offsetTop > ensembleTour[cibleTour[i]].offsetTop){
  402.  ensembleMob[i].style.top = ensembleMob[i].offsetTop - vy + "px";
  403.  }
  404.  if (ensembleMob[i].offsetLeft < ensembleTour[cibleTour[i]].offsetLeft){
  405.  ensembleMob[i].style.left = ensembleMob[i].offsetLeft + vx + "px";
  406.  }
  407.  if (ensembleMob[i].offsetLeft > ensembleTour[cibleTour[i]].offsetLeft){
  408.  ensembleMob[i].style.left = ensembleMob[i].offsetLeft - vx + "px";
  409.  }
  410.  //if(ensembleMob[i].offsetLeft  
  411.     }
  412. for(var i = 0; i < cibleTour.length;i++){
  413.  distanceMobTour.push(Math.floor(Math.sqrt(((ensembleTour[cibleTour[i]].offsetLeft - ensembleMob[i].offsetLeft)*(ensembleTour[cibleTour[i]].offsetLeft - ensembleMob[i].offsetLeft)+(ensembleTour[cibleTour[i]].offsetTop - ensembleMob[i].offsetTop)*(ensembleTour[cibleTour[i]].offsetTop - ensembleMob[i].offsetTop)))));
  414. }
  415. for (var i = 0; i < distanceMobTour.length;i++){
  416.  if(distanceMobTour[i] <= 2){
  417.   ensembleTour[cibleTour[i]].vie -= 1;
  418.  }
  419. }
  420. /*
  421. for(var i = 0; i < cibleTour.length;i++){
  422.  if(distanceMobTour[i] <= 2){
  423.  ensembleTour[i].vie -=1;
  424.  }
  425. }
  426. */
  427. }
  428. function animationProjectile(){
  429.     var distanceMobProjectile = [];
  430.     var lesMobProjectilePlusProche = mobPlusProcheProjectileGeneralisation();// index des mobs les plus proches au projectiles
  431.     for (var i = 0; i < lesMobProjectilePlusProche.length; i++){
  432.  if (ensembleProjectile[i].offsetTop < ensembleMob[lesMobProjectilePlusProche[i]].offsetTop){
  433.  ensembleProjectile[i].style.top = ensembleProjectile[i].offsetTop + vpy + "px";
  434.  }
  435.  if (ensembleProjectile[i].offsetTop > ensembleMob[lesMobProjectilePlusProche[i]].offsetTop){
  436.  ensembleProjectile[i].style.top = ensembleProjectile[i].offsetTop - vpy + "px";
  437.  }
  438.  if (ensembleProjectile[i].offsetLeft < ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft){
  439.  ensembleProjectile[i].style.left = ensembleProjectile[i].offsetLeft + vpx + "px";
  440.  }
  441.  if (ensembleProjectile[i].offsetLeft > ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft){
  442.  ensembleProjectile[i].style.left = ensembleProjectile[i].offsetLeft - vpx + "px";
  443.  }
  444.     }
  445.     for(var i =0; i < lesMobProjectilePlusProche.length;i++){
  446.     distanceMobProjectile.push(Math.floor(Math.sqrt(((ensembleProjectile[i].offsetLeft - ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft)*(ensembleProjectile[i].offsetLeft - ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft)+(ensembleProjectile[i].offsetTop - ensembleMob[lesMobProjectilePlusProche[i]].offsetTop)*(ensembleProjectile[i].offsetTop - ensembleMob[lesMobProjectilePlusProche[i]].offsetTop)))));
  447.     }
  448.     for (var i =0; i < lesMobProjectilePlusProche.length;i++){
  449.  if(distanceMobProjectile[i] <= 2){
  450.  blocCentrale.removeChild(ensembleProjectile[i]);
  451.  ensembleMob[lesMobProjectilePlusProche[i]].vie -= 1;
  452.  }
  453.     }
  454.     /*
  455.     for (var i = 0; i < ensembleProjectile.length ; i++){
  456.      
  457.      if(ensembleMob[lesMobProjectilePlusProche[i]] == undefined){
  458.      blocCentrale.removeChild(ensembleProjectile[i]);
  459.      }
  460.      
  461.     }
  462.     */
  463.      //if(ensembleProjectile[i].offsetTop == ensembleMob[lesMobProjectilePlusProche[i]].offsetTop && ensembleProjectile[i].offsetLeft ==ensembleMob[lesMobProjectilePlusProche[i]].offsetLeft){
  464. }
  465. /*
  466. function testDestructionProjectile(indexMob){
  467.  
  468. if(ensembleMob[indexMob] == 'undefined'){
  469.  blocCentrale.removeChild(ensembleProjectile[indexMob];
  470. }
  471. */
  472. function testEnVieMob(){
  473.    
  474. for(var i =0; i < ensembleMob.length;i++){
  475.  if(ensembleMob[i].vie <= 0){
  476.  monstreTue.push(blocCentrale.removeChild(ensembleMob[i]));
  477.  or += 30;
  478.  }
  479.     }
  480. }
  481. function testEnVieTour(){
  482. for(var i = 0; i < ensembleTour.length;i++){
  483.  if(ensembleTour[i].vie <= 0){
  484.  blocCentrale.removeChild(ensembleTour[i]);
  485.  }
  486. }
  487. }
  488. function testPartieEnCoursMob(){
  489. var enCours;
  490. if(ensembleMob.length != 0){
  491. enCours = true;
  492. }
  493. else{
  494. enCours = false;
  495. }
  496. return enCours;
  497. }
  498. function testPartieEnCoursTour(){
  499. var enCours;
  500. if(ensembleTour.length != 0){
  501. enCours = true;
  502. }
  503. else{
  504. enCours = false;
  505. }
  506. return enCours;
  507. }
  508. function partieEnCours(){
  509. //reponseMob = testPartieEnCoursMob();
  510. reponseTour = testPartieEnCoursTour();
  511. /*
  512. if(!reponseMob){
  513. alert("Vous avez gagné et tué " + monstreTue.length + " monstres" );
  514. }
  515. */
  516. if(niveauActuelle == 20 && ensembleMob.length == 0){
  517.  alert("Vous avez gagné et tué " + monstreTue.length + " monstres" );
  518. }
  519. if(!reponseTour && tourAutorise == 0){
  520. alert("Vous avez perdu et tué " + monstreTue.length + " monstres" );
  521. }
  522. }
  523. function debutPartie(){
  524.     clearInterval(timer1);
  525.     clearInterval(timer2);
  526.     timer1 = setInterval(unPeuTout,30);
  527.     timer2 = setInterval(generationProjectile,500);
  528. }
  529. function unPeuTout(){
  530.     animation();
  531.     animationProjectile();
  532.     testEnVieMob();
  533. testEnVieTour();
  534. partieEnCours();
  535. }
  536. function pause(){
  537.     clearInterval(timer1);
  538.     clearInterval(timer2);
  539. }
  540. function timerDuJeu(){
  541. //a faire !
  542. }
  543. function nombreEntier(valeur){
  544.   if((parseFloat(valeur) == parseInt(valeur)) && !isNaN(valeur)){
  545.       return true;
  546.   } else {
  547.       return false;
  548.   }
  549. }


 
Merci beaucoup et bonne soirée :) Désolé pour la réponse tardive mais je suis en vacance.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed