Advertisement
marcmarc

#3

Oct 21st, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. /*
  2. Programmeuse: Medina Mohamed
  3. Programmeur: Marc-Antoine Cléroux
  4. date: 25 Octobre 2017
  5. cours:IFT 1015
  6. travail: TP1
  7. programme contenant un ensemble de définitions de fonctions qui permettent de générer
  8. des labyrinthes et les dessiner sur la fenêtre de dessin de codeBoot.
  9. */
  10.  
  11. //fonction iota()
  12. var iota = function(n){
  13. if (n>=0 && n%1==0){
  14. var tab = Array(n);
  15. for (var i = 0; i < tab.length; i++){
  16. tab[i] = i;
  17. }
  18. return tab;
  19. }
  20. };
  21.  
  22. //fonction contient()
  23. var contient = function(tab, x){
  24. return tab.includes(x);
  25. };
  26.  
  27. // function ajouter()
  28. var ajouter = function(tab, x){
  29. if (contient(tab, x) == false)
  30. tab.push(x);
  31. return tab;
  32. };
  33.  
  34. // function retirer()
  35. var retirer = function(tab, x){
  36. if (contient(tab, x) == false)
  37. return tab;
  38. else
  39. for (var i = 0; i < tab.length; i++){
  40. if (x == tab[i]){
  41. var tab1 = [];
  42. return tab1.concat(tab.slice(0,i),tab.slice(i+1,tab.length+1));
  43. }
  44. }
  45. };
  46.  
  47. // fonction voisins()
  48. var voisins = function(x, y, nx, ny){
  49. var tab = Array(nx);
  50. for (var i = 0; i < nx; i++){
  51. tab[i] = Array(ny);
  52. for (var j = 0; j < ny; j++){
  53. tab[i][j] = (i)+(j)*(nx);
  54. }
  55. }
  56. var tab_retour = [];
  57. if (y != 0){
  58. tab_retour.push(tab[x][y-1]);}
  59. if (x != 0)
  60. tab_retour.push(tab[x-1][y]);
  61. if (x != tab.length-1)
  62. tab_retour.push(tab[x+1][y]);
  63. if (y != tab[1].length-1)
  64. tab_retour.push(tab[x][y+1]);
  65. return tab_retour;
  66. };
  67.  
  68. var tab_to_front = function(x, y, nx, ny,cave, front){
  69. var tab = voisins(x, y, nx, ny);
  70. for (var i = 0; i < tab.length; i++){
  71. if (contient(cave, tab[i])==false){
  72. ajouter(front, tab[i]);
  73. }
  74. }
  75. return(front);
  76. };
  77.  
  78. var dessins = function(mursH, mursV, nx, ny, pas){
  79.  
  80. //amene la tortue en haut a gauche pour premiere ligne horizontal
  81. pu(); fd((ny*pas/2),(nx/2)*pas); rt(90);
  82. /*dessin des murs horizontaux*/
  83.  
  84. for (var i = 0; i<ny+1; i++){
  85. for(var j=0; j<nx; j++){
  86. if (contient(mursH, j+nx*i)){
  87. pd();
  88. fd(pas);
  89. pu();
  90. }
  91. else{
  92. fd(pas);
  93. }
  94. }
  95. bk(nx*pas);
  96. bk(0,pas);
  97. }
  98.  
  99. fd(0,(ny+1)*pas); //pour ramener la tortue en haut a gauche quand tous les lignes hori sont dessiner
  100. lt(90);// pour sappreter a dessiner les lignes verticauz
  101.  
  102.  
  103. /*Dessin murs verticaux*/
  104. for (var i = 0; i<ny; i++){
  105. for(var j=0; j<nx+1; j++){
  106. if (contient(mursV,j+(nx+1)*i)){
  107. pd();
  108. bk(pas);
  109. pu();
  110. fd(pas);
  111. }
  112. bk(0,pas);
  113. }
  114. fd(-pas,(nx+1)*pas);
  115. }
  116. };
  117.  
  118. var laby = function(nx, ny, pas){
  119. var tab_murs = Array(nx*ny);
  120. for (var i = 0; i < nx; i++){
  121. for (var j = 0; j < ny; j++){
  122. tab_murs[i+nx*j] = Array(4);
  123. tab_murs[i+nx*j][0] = i + j * nx;//calcul N
  124. tab_murs[i+nx*j][1] = 1 + i + j * (nx + 1);//calcul E
  125. tab_murs[i+nx*j][2] = i + (j + 1) * nx;//calcul S
  126. tab_murs[i+nx*j][3] = i + j * (nx + 1);//calcul O
  127. }
  128. }
  129.  
  130. var mursH = iota(nx * (ny+1));//créé un tableau contenant tous les # de murs horizontaux
  131. mursH = retirer(mursH, 0); // on enlève le premier mur par défaut
  132. mursH = retirer(mursH, nx * (ny+1)-1); // on enlève le dernier murs par défaut
  133. var mursV = iota(ny * (nx+1));//créé un tableau contenant tous les # de murs verticaux
  134.  
  135. var cave = []; //L’ensemble cave est l’ensemble des cellules qui ont été mis dans la cavité par l’algorithme.
  136. var front = []; //L’ensemble front est l’ensemble des cellules qui sont voisines des cellules dans la cavité (mais pas dans la cavité)
  137. var case_ran = Math.floor(Math.random()*(nx*ny+1)); //retourner les coordonnee de la case random?
  138.  
  139. front = tab_to_front(case_ran%nx, Math.floor(case_ran/nx), nx, ny, cave, front);
  140. cave = ajouter(cave, case_ran);
  141. front = retirer(front, case_ran);
  142.  
  143. while (front.length != 0){
  144. var random_voi = front[Math.floor(Math.random()*front.length)]; // prendre un voisin de la cavité au hasard
  145. var check_voi = voisins(random_voi%nx, Math.floor(random_voi/nx), nx, ny);
  146.  
  147. boucle_mur:
  148. for (var i = 0; i< check_voi.length; i++){
  149. for (var j = 0; j < cave.length; j++){
  150.  
  151. if (check_voi[i] == cave[j]){
  152. if (tab_murs[random_voi][0] == tab_murs[cave[j]][2]){
  153. mursH = retirer(mursH, tab_murs[cave[j]][2]);
  154. }
  155. else if (tab_murs[random_voi][1] == tab_murs[cave[j]][3]){
  156. mursV = retirer(mursV, tab_murs[cave[j]][3]);
  157. }
  158. else if (tab_murs[random_voi][2] == tab_murs[cave[j]][0]){
  159. mursH = retirer(mursH, tab_murs[cave[j]][0]);
  160. }
  161. else{
  162. mursV = retirer(mursV, tab_murs[cave[j]][1]);
  163. }
  164. break boucle_mur;
  165. }
  166. }
  167. }
  168.  
  169. front = tab_to_front(random_voi%nx, Math.floor(random_voi/nx), nx, ny, cave, front);
  170. cave = ajouter(cave, random_voi);
  171. front = retirer(front, random_voi);
  172. }
  173. cs();
  174. dessins(mursH,mursV,nx,ny,pas);
  175.  
  176. };
  177.  
  178. var test = function (){
  179. assert(contient([9,2,5],2) == true);
  180. assert(contient([9,2,5],4) == false);
  181. assert(ajouter([9,2,5], 2) == "9,2,5");
  182. assert(ajouter([9,2,5], 4) == "9,2,5,4");
  183. assert(retirer([9,2,5], 2) == "9,5");
  184. assert(retirer([9,2,5], 4) == "9,2,5");
  185. assert(voisins(7, 2, 8, 4) == "15,22,31");
  186.  
  187. };
  188. test();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement