Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //18 décembre 2019
  2. //Julie Guertin (20120742) et Valérie Panaite(20161679)
  3. //Devoir 2 : Le jeu de la vie
  4.  
  5.  
  6. //Ce programme est une implantation du Jeu de la vie
  7. //de John Horton Conway.
  8.  
  9.  
  10. //La fonction carré dessine une cellule de la grille
  11.  
  12. var carre = function (largeur) {
  13.  
  14.     for (var i = 1; i <= 4; i++) {
  15.  
  16.         fd(largeur);
  17.         rt(90);
  18.     }
  19. };
  20.  
  21. //La fonction positionner permet de placer la tortue
  22.  
  23. var positionner = function (x, y) {
  24.  
  25.     pu(); rt(90); fd(x); lt(90); fd(y); pd();
  26. };
  27.  
  28. //La fonction grille dessine une grille dont la distance entre le début d'un carré
  29. //et d'un autre = pas, la largeur de chaque carré = largeur. nx représente le nombre
  30. //de carrés sur x et ny, le nombre de carrés sur y.
  31.  
  32.  
  33. var grille = function (nx, ny, pas, largeur) {
  34.  
  35.     for (var x = 0; x < nx; x++) {
  36.  
  37.         for (var y = 0; y < ny; y++) {
  38.  
  39.             positionner(x*pas, y*pas);
  40.             carre(largeur);
  41.             positionner(-x*pas, -y*pas);
  42.         }
  43.     }
  44. };
  45.  
  46. //La fonction afficherTableau dessine la grille et colorie
  47. //les cellules vivantes selon les données du tableau
  48.  
  49. var afficherTableau = function(){
  50.     cs();
  51.     positionner(-90, -100); //permet de placer la tortue
  52.     grille(dimensionTableau, dimensionTableau, 10, 10); //permet de dessiner la grille
  53.    
  54.     for(var i = 0; i < dimensionTableau; i++) // Pour chacune des cellules de la grille
  55.     {
  56.         for(var j = 0; j < dimensionTableau; j++)
  57.         {
  58.             if (tableau[i][j] == 1) //si la cellule est vivante dans le tableau
  59.             {
  60.                 colorierCase(i, j); //on colorie la cellule
  61.             }
  62.         }
  63.     }
  64.      
  65. };
  66.  
  67. //La fonction colorierCase permet de colorier les cases correspondant
  68. //aux cellules vivantes dans la grille affichée
  69.  
  70. var colorierCase = function(x, y){
  71.      
  72.     setpw(10); //largeur du trait
  73.     setpc(1,0,1); //couleur du trait
  74.  
  75.     pu(); rt(90);  fd(5 + x*10);    //colorie une case
  76.     lt(90); fd(y*10); pd(); fd(10);
  77.  
  78.     positionner(-(5 + x*10),-(y*10 + 10)); //repositionne la tortue
  79. };
  80.  
  81. // La fonction creerMatice permet de créer un tableau
  82. //dans lequel on stocke l'état des cellules.
  83. //Au départ, les cellules sont toutes à 0.
  84.  
  85. var creerMatrice = function (nbRangees, nbColonnes) {
  86.     var resultat = Array(nbRangees);
  87.  
  88.     for (var i = 0; i < nbRangees; i++) {
  89.  
  90.         resultat[i] = Array(nbColonnes);
  91.  
  92.         for (var j = 0; j < nbColonnes; j++){
  93.  
  94.             resultat[i][j]=0;
  95.         }
  96.     }
  97.     return resultat;
  98. };
  99.  
  100. //La fonction etatInitial demande à l'utilisateur le % de cellules
  101. //vivantes et assigne aléatoirement l'état vivant à certaines cellules
  102. //du tableau
  103.  
  104. var etatInitial = function () {
  105.      
  106.     var pourcentage = + prompt("Quel est le pourcentage de cellules vivantes au départ?");
  107.  
  108.     var cellulesVivantes = (pourcentage/100) * Math.pow(dimensionTableau,2); //donne le nombre de cellules vivantes
  109.  
  110.     for (var i = 1; i <= cellulesVivantes; i++) {
  111.  
  112.         var x = (Math.floor(dimensionTableau * Math.random())); //donne un chiffre de 0 à 20
  113.         var y = (Math.floor(dimensionTableau * Math.random())); //donne un chiffre de 0 à 20
  114.    
  115.         if(tableau[x][y] == 0) //si cellule est à 0 (morte)
  116.         {
  117.             tableau[x][y] = 1; //elle prend la valeur 1(vivante)
  118.         }
  119.         else{       //si la cellule est déjà à 1 (vivante)
  120.             i--;    //décrémenter la variable i et obtenir les coordonnées
  121.         }           //d'une nouvelle cellule aléatoirement
  122.     }
  123. };
  124.  
  125.  
  126. //La fonction compterVoisinsVivants permet de compter le nombre
  127. //de voisins vivants pour chacune des cellules du tableau
  128.  
  129. var compterVoisinsVivants = function(x, y){
  130.  
  131.     var x_min = x-1;
  132.     if(x == 0) x_min = x;   //détecter si à la limite du tableau
  133.     var x_max = x+1;
  134.     if(x == (dimensionTableau -1)) x_max = x;  //détecter si à la limite du tableau
  135.      
  136.     var y_min = y-1;
  137.     if(y == 0) y_min = y; //détecter si à la limite du tableau
  138.     var y_max = y+1;
  139.     if(y == (dimensionTableau -1)) y_max = y; //détecter si à la limite du tableau
  140.      
  141.     var resultat = 0;
  142.      
  143.     for(var i = x_min; i <= x_max; i++){
  144.  
  145.         for(var j = y_min; j <= y_max; j++){
  146.  
  147.             if (i == x && j == y){ // exclure la cellule pour laquelle on compte les voisins
  148.                 resultat += 0;
  149.             }
  150.             else{
  151.                 resultat += tableau[i][j]; //faire la somme des voisins viants
  152.             }
  153.         }
  154.     }
  155.      
  156.     return resultat;
  157.      
  158. };
  159.  
  160. //La fonction tourTableau permet de créer un nouveau tableau
  161. //dans lequel l'état des cellules peut avoir changé
  162. //selon ses voisins.
  163.  
  164. var tourTableau = function(){
  165.  
  166.     var nouvTableau = creerMatrice(dimensionTableau, dimensionTableau); //créer un tableau
  167.      
  168.     for(var i=0; i < dimensionTableau; i++){
  169.  
  170.         for(var j=0; j < imensionTableau; j++){
  171.  
  172.             var nb = compterVoisinsVivants(i,j);
  173.              
  174.             if (nb < 2){      // si nombre de voisins est plus petit que 2
  175.                 nouvTableau[i][j] = 0; // la cellule meurt
  176.             }
  177.             else if(nb <= 3){  //cellule reste dans le même état si nombre de voisins vivants
  178.                 nouvTableau[i][j] = tableau[i][j]; // est plus petit ou égal à 3
  179.                  
  180.                 if(nb == 3) //Si une cellule a exactement 3 voisins
  181.                 {
  182.                     if(tableau[i][j] == 0) //et que cette cellule est morte
  183.                     {
  184.                         nouvTableau[i][j] = 1; // elle devient vivante
  185.                     }
  186.                 }
  187.             }
  188.             else if(nb > 3){ // si nombre de voisins est plus grand que 3
  189.                 nouvTableau[i][j] = 0; //la cellule meure
  190.             }
  191.         }
  192.     }
  193.      
  194.     return nouvTableau;
  195. };
  196.  
  197. //La fonction boucle infinie permet de lancer le jeu à l'infini
  198. var boucleInfinie = function(){
  199.  
  200.     while(true){
  201.          
  202.         afficherTableau();
  203.         tableau = tourTableau();
  204.         pause(0.01); //fait une pause entre chaque apparition de tableau
  205.        
  206.     }
  207. };
  208.  
  209. //Lancer le jeu
  210.  
  211. var dimensionTableau = 20;
  212. var tableau = creerMatrice(dimensionTableau, dimensionTableau);
  213. etatInitial();
  214. boucleInfinie();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement