Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. /**
  2. *Fonction recursive qui va rechercher les 4 voisins d'une case
  3. *Ou bien les voisins de ses voisins tant que MP > 1
  4. *
  5. *@param zone array qui comprend la case de départ pour la première itération puis
  6. *l'ensemble des cells
  7. *@param MP nombre de points de mouvements
  8. *@param color colore les cells si non null
  9. *@param needLos true pour garde uniquement les cases avec une ligne de vue avec startCell
  10. *
  11. *@return un tab de cells
  12. */
  13. function getZone(zone, MP, color) {
  14.  
  15. var zoneTmpo = [];
  16.  
  17. //Vérification si c'est la première itération
  18. if (typeOf(zone) != TYPE_ARRAY) {
  19. var startCell = zone;
  20. zone = [];
  21. zone[startCell] = false;
  22. }
  23.  
  24. //Condition Sortie de la boucle
  25. //Si MP ==1 on renvoit juste le tableau avec les 4 cases adjacentes
  26. if (MP == 1) {
  27. //C'est la dernière étape, donc on renvoit juste les voisins de chacune des cases présents dans zone
  28. for (var cell: var value in zone) {
  29. for (var voisin in getNextCells(cell)) {
  30. if (zone[voisin] == null) {
  31. zoneTmpo[voisin] = false;
  32. }
  33. }
  34. }
  35. for (var cell: var value in zoneTmpo) {
  36. zone[cell] = value;
  37. }
  38. var finalZone = [];
  39. for (var cell: var value in zone) {
  40. push(finalZone, cell);
  41. }
  42. if (color != null) {
  43. mark(finalZone, color);
  44. }
  45. return finalZone;
  46. }
  47. for (var cell: var value in zone) {
  48. //On ne recherche les voisins que des cases qui n'ont pas encre été testées
  49. if (zone[cell] == false) {
  50. for (var voisin in getNextCells(cell)) {
  51. //Vérification que le voisin trouvé n'est pas déja dans le tableau
  52. if (zone[voisin] == null) {
  53. //on l'insère en l'initialisant a false qui signifie qu'on a pas encore recherché ses voisins'
  54. zoneTmpo[voisin] = false;
  55. }
  56. }
  57. //On passe a vrai ce qui indique qu'on a fini de chercher les voisins de cette case afin de ne pas recommencer plus tard
  58. zone[cell] = true;
  59. }
  60. }
  61. //On transfère tous les voisins trouvés dans le tableau zone originel
  62. for (var cell: var value in zoneTmpo) {
  63. zone[cell] = value;
  64. }
  65.  
  66. //Puis on renvoit ce nouveau tableau a analyser avec 1 PM de moins
  67. return getZone(zone, MP - 1, color);
  68. }
  69.  
  70.  
  71. /**
  72. *Fonction recursive qui renvoit les 4 cases voisines d'une case
  73. *
  74. *@param cell cell de départ
  75. *@return un tab de cells
  76. */
  77. function getNextCells(cell) {
  78. var zone = [];
  79. var coordX = getCellX(cell);
  80. var coordY = getCellY(cell);
  81.  
  82. var cell1 = getCellFromXY(coordX + 1, coordY);
  83. if (cell1 != null and!isObstacle(cell1)) {
  84. push(zone, cell1);
  85. }
  86. var cell2 = getCellFromXY(coordX - 1, coordY);
  87. if (cell2 != null and!isObstacle(cell2)) {
  88. push(zone, cell2);
  89. }
  90. var cell3 = getCellFromXY(coordX, coordY - 1);
  91. if (cell3 != null and!isObstacle(cell3)) {
  92. push(zone, cell3);
  93. }
  94. var cell4 = getCellFromXY(coordX, coordY + 1);
  95. if (cell4 != null and!isObstacle(cell4)) {
  96. push(zone, cell4);
  97. }
  98. return zone;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement