Advertisement
Guest User

Untitled

a guest
May 26th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var C=30; //nbre de colonnes
  2. var L=20; //nbre de lignes
  3. var etatCase=[];
  4. var position=0;
  5.  
  6. etatCase[0]=1;
  7. for(var i=1; i<C*L; i++) etatCase[i]=0; //état de la case i
  8.  
  9.     var etatPorte=[];
  10. for(var i=0; i<2*C*L-C-L; i++) etatPorte[i]=0; //état de la porte i
  11. var chemin=[0]; //numéros des cases dans l'ordre
  12.  
  13. function casesContigues(k){//renvoie le tableau des cases contigues à la case k
  14. //dont l'état est 0
  15. var T=[];
  16. if(k-1>=0 && k-1<C*L && Math.floor((k-1)/C)==Math.floor(k/C)
  17.     && etatCase[k-1]==0) T.push(k-1);
  18.     if(k+1>=0 && k+1<C*L && Math.floor((k+1)/C)==Math.floor(k/C)
  19.         && etatCase[k+1]==0) T.push(k+1);
  20.         if(k-C>=0 && k-C<C*L && (k-C)%C==k%C && etatCase[k-C]==0) T.push(k-C);
  21.     if(k+C>=0 && k+C<C*L && (k+C)%C==k%C && etatCase[k+C]==0) T.push(k+C);
  22.     return T;
  23. }
  24.  
  25. function porteEntre(a,b){//renvoie le numéro de la porte entre les cases a et b
  26.     var A=Math.min(a,b),B=Math.max(a,b);
  27.     if(B==A+1) return (2*C-1)*Math.floor(A/C)+A%C;
  28.     else return (2*C-1)*Math.floor(A/C)+C-1+A%C;
  29. }
  30.  
  31. function avanceChemin(k){//renvoie la case suivant la case chemin[k]
  32.     var m=k;
  33.     while(casesContigues(chemin[m]).length==0 && m>=0) m--;
  34.  
  35.     if(m>=0){
  36.         var T=casesContigues(chemin[m]), l=T.length;
  37.         var K=Math.floor(l*Math.random()), C=T[K];
  38.         chemin.push(C);
  39.         etatCase[C]=1;
  40.         etatPorte[porteEntre(chemin[m],C)]=1;
  41.     } else {
  42.         chemin.push(0);
  43.     }
  44. }
  45.  
  46. function prepareTableau(){
  47.     var table=document.createElement("table");
  48.     table.style.borderCollapse="collapse";
  49.     document.body.appendChild(table);
  50.     var tr=[];
  51.  
  52.     for(var i=0; i<L; i++){
  53.         tr[i]=document.createElement("tr");
  54.         table.appendChild(tr[i]);
  55.     }
  56.     var td=[];
  57.  
  58.     for(var i=0; i<L; i++) td[i]=[];
  59.  
  60.         for(var i=0; i<L; i++) {
  61.             for(var j=0; j<C; j++){
  62.                 td[i][j]=document.createElement("td");
  63.                 tr[i].appendChild(td[i][j]);
  64.                 td[i][j].setAttribute("id",C*i+j);
  65.                 td[i][j].style.width="20px"; td[i][j].style.height="20px";
  66.             }
  67.         }
  68.     }
  69.  
  70. function noCase(k){//renvoie le numéro de la case située à gauche (avec D) ou
  71. //au-dessus (avec B) de la porte numéro k
  72. var N=[];
  73. if(k%(2*C-1)<C-1)
  74.     N=[C*(Math.floor(k/(2*C-1)))+k%(2*C-1),"D"];
  75. else
  76.     N=[C*(Math.floor(k/(2*C-1)))+(k-C+1)%(2*C-1),"B"];
  77. return N;
  78. }
  79.  
  80. function traceLabyrinthe(){
  81.     document.getElementsByTagName("table")[0].style.border="3px solid";
  82.     document.getElementById(0).style.borderLeft="3px solid white";
  83.     document.getElementById(L*C-1).style.borderRight="3px solid white";
  84.     for(var i=0; i<etatPorte.length; i++) {
  85.         if(etatPorte[i]==0){
  86.             var N=noCase(i);
  87.             if(N[1]=="D")
  88.                 document.getElementById(N[0]).style.borderRight="3px solid";
  89.             if(N[1]=="B")
  90.                 document.getElementById(N[0]).style.borderBottom="3px solid";
  91.         }
  92.     }
  93. }
  94. // a partir de là on a modifier
  95. function colorierPositionActuelle(){
  96.     document.getElementById(position).style.backgroundColor="blue";
  97. }
  98.  
  99. function effacer(k){
  100.     //console.log(document.getElementById(position));
  101.     document.getElementById(k).style.backgroundColor="white";
  102.     //console.log(document.getElementById(position));
  103. }
  104.  
  105. function checkPortes(k,x){
  106.     var valid;
  107.     switch(x){
  108.         case -30:
  109.             valid=(document.getElementById(k-30).style.borderBottom!="3px solid");
  110.             break;
  111.         case -1:
  112.             valid=(document.getElementById(k-1).style.borderRight!="3px solid");
  113.             break;
  114.         case 1:
  115.             valid=(document.getElementById(k).style.borderRight!="3px solid");
  116.             break;
  117.         case 30:
  118.             valid=(document.getElementById(k).style.borderBottom!="3px solid");
  119.             break;
  120.     }
  121.     //console.log(valid);
  122.     return valid;
  123. }
  124.  
  125. function deplacer(k){
  126.     console.log(position+" : "+k);
  127.     effacer(position);
  128.     position=k;
  129.     colorierPositionActuelle();
  130. }
  131.  
  132. function genererCases(){
  133.     var nbCases=4;
  134.     for(var i=0;i<nbCases;i++){
  135.         document.getElementById(Math.floor(Math.random()*C*L)).style.backgroundColor='yellow';
  136.     }
  137. }
  138.  
  139. function deplacerHaut() {
  140.     //console.log("haut");
  141.     if(position-30>=0 && checkPortes(position,-30))deplacer(position-30);
  142.  
  143.  
  144. // récuperer les cases contigues de la position actuelle
  145. // ne prendre que la case vers le haut  
  146. // verifier si la porte est bien ouverte pour confirmer le deplacement
  147. // avancer la position vers la case
  148. // mettre a jour le chamin en appelant colorierPositionActuelle()
  149. }
  150.  
  151. function deplacerBas() {
  152.     //console.log("bas");
  153.     if(position+30<=C*L && checkPortes(position,30))deplacer(position+30);
  154. }
  155.  
  156. function deplacerGauche() {
  157.     //console.log("gauche");
  158.     if(position-1>=0 && checkPortes(position,-1))deplacer(position-1);
  159. }
  160.  
  161. function deplacerDroite() {
  162.     //console.log("droite");
  163.     if(position+1<=C*L && checkPortes(position,1))deplacer(position+1);
  164. }
  165. //jusqu’à la
  166. prepareTableau();
  167. var j=0; while(chemin[j]!=0 || j==0) {avanceChemin(j); j++;} traceLabyrinthe();
  168. position=32;
  169. colorierPositionActuelle();
  170. genererCases();
  171.  
  172.  
  173. document.addEventListener('keypress',function(e){
  174.     switch(e.code){
  175.         case "KeyW":
  176.             deplacerHaut();
  177.             break;
  178.         case "KeyA":
  179.             deplacerGauche();
  180.             break;
  181.         case "KeyS":
  182.             deplacerBas();
  183.             break;
  184.         case "KeyD":
  185.             deplacerDroite();
  186.             break;
  187.     }
  188. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement