Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var C=30; //nbre de colonnes
- var L=20; //nbre de lignes
- var etatCase=[];
- var position=0;
- etatCase[0]=1;
- for(var i=1; i<C*L; i++) etatCase[i]=0; //état de la case i
- var etatPorte=[];
- for(var i=0; i<2*C*L-C-L; i++) etatPorte[i]=0; //état de la porte i
- var chemin=[0]; //numéros des cases dans l'ordre
- function casesContigues(k){//renvoie le tableau des cases contigues à la case k
- //dont l'état est 0
- var T=[];
- if(k-1>=0 && k-1<C*L && Math.floor((k-1)/C)==Math.floor(k/C)
- && etatCase[k-1]==0) T.push(k-1);
- if(k+1>=0 && k+1<C*L && Math.floor((k+1)/C)==Math.floor(k/C)
- && etatCase[k+1]==0) T.push(k+1);
- if(k-C>=0 && k-C<C*L && (k-C)%C==k%C && etatCase[k-C]==0) T.push(k-C);
- if(k+C>=0 && k+C<C*L && (k+C)%C==k%C && etatCase[k+C]==0) T.push(k+C);
- return T;
- }
- function porteEntre(a,b){//renvoie le numéro de la porte entre les cases a et b
- var A=Math.min(a,b),B=Math.max(a,b);
- if(B==A+1) return (2*C-1)*Math.floor(A/C)+A%C;
- else return (2*C-1)*Math.floor(A/C)+C-1+A%C;
- }
- function avanceChemin(k){//renvoie la case suivant la case chemin[k]
- var m=k;
- while(casesContigues(chemin[m]).length==0 && m>=0) m--;
- if(m>=0){
- var T=casesContigues(chemin[m]), l=T.length;
- var K=Math.floor(l*Math.random()), C=T[K];
- chemin.push(C);
- etatCase[C]=1;
- etatPorte[porteEntre(chemin[m],C)]=1;
- } else {
- chemin.push(0);
- }
- }
- function prepareTableau(){
- var table=document.createElement("table");
- table.style.borderCollapse="collapse";
- document.body.appendChild(table);
- var tr=[];
- for(var i=0; i<L; i++){
- tr[i]=document.createElement("tr");
- table.appendChild(tr[i]);
- }
- var td=[];
- for(var i=0; i<L; i++) td[i]=[];
- for(var i=0; i<L; i++) {
- for(var j=0; j<C; j++){
- td[i][j]=document.createElement("td");
- tr[i].appendChild(td[i][j]);
- td[i][j].setAttribute("id",C*i+j);
- td[i][j].style.width="20px"; td[i][j].style.height="20px";
- }
- }
- }
- function noCase(k){//renvoie le numéro de la case située à gauche (avec D) ou
- //au-dessus (avec B) de la porte numéro k
- var N=[];
- if(k%(2*C-1)<C-1)
- N=[C*(Math.floor(k/(2*C-1)))+k%(2*C-1),"D"];
- else
- N=[C*(Math.floor(k/(2*C-1)))+(k-C+1)%(2*C-1),"B"];
- return N;
- }
- function traceLabyrinthe(){
- document.getElementsByTagName("table")[0].style.border="3px solid";
- document.getElementById(0).style.borderLeft="3px solid white";
- document.getElementById(L*C-1).style.borderRight="3px solid white";
- for(var i=0; i<etatPorte.length; i++) {
- if(etatPorte[i]==0){
- var N=noCase(i);
- if(N[1]=="D")
- document.getElementById(N[0]).style.borderRight="3px solid";
- if(N[1]=="B")
- document.getElementById(N[0]).style.borderBottom="3px solid";
- }
- }
- }
- // a partir de là on a modifier
- function colorierPositionActuelle(){
- document.getElementById(position).style.backgroundColor="blue";
- }
- function effacer(k){
- //console.log(document.getElementById(position));
- document.getElementById(k).style.backgroundColor="white";
- //console.log(document.getElementById(position));
- }
- function checkPortes(k,x){
- var valid;
- switch(x){
- case -30:
- valid=(document.getElementById(k-30).style.borderBottom!="3px solid");
- break;
- case -1:
- valid=(document.getElementById(k-1).style.borderRight!="3px solid");
- break;
- case 1:
- valid=(document.getElementById(k).style.borderRight!="3px solid");
- break;
- case 30:
- valid=(document.getElementById(k).style.borderBottom!="3px solid");
- break;
- }
- //console.log(valid);
- return valid;
- }
- function deplacer(k){
- console.log(position+" : "+k);
- effacer(position);
- position=k;
- colorierPositionActuelle();
- }
- function genererCases(){
- var nbCases=4;
- for(var i=0;i<nbCases;i++){
- document.getElementById(Math.floor(Math.random()*C*L)).style.backgroundColor='yellow';
- }
- }
- function deplacerHaut() {
- //console.log("haut");
- if(position-30>=0 && checkPortes(position,-30))deplacer(position-30);
- // récuperer les cases contigues de la position actuelle
- // ne prendre que la case vers le haut
- // verifier si la porte est bien ouverte pour confirmer le deplacement
- // avancer la position vers la case
- // mettre a jour le chamin en appelant colorierPositionActuelle()
- }
- function deplacerBas() {
- //console.log("bas");
- if(position+30<=C*L && checkPortes(position,30))deplacer(position+30);
- }
- function deplacerGauche() {
- //console.log("gauche");
- if(position-1>=0 && checkPortes(position,-1))deplacer(position-1);
- }
- function deplacerDroite() {
- //console.log("droite");
- if(position+1<=C*L && checkPortes(position,1))deplacer(position+1);
- }
- //jusqu’à la
- prepareTableau();
- var j=0; while(chemin[j]!=0 || j==0) {avanceChemin(j); j++;} traceLabyrinthe();
- position=32;
- colorierPositionActuelle();
- genererCases();
- document.addEventListener('keypress',function(e){
- switch(e.code){
- case "KeyW":
- deplacerHaut();
- break;
- case "KeyA":
- deplacerGauche();
- break;
- case "KeyS":
- deplacerBas();
- break;
- case "KeyD":
- deplacerDroite();
- break;
- }
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement