Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Arianne Codère, Sophie-Andrée Vinet, Coralie Vittecoq
- var COULEUR = {
- tuile: {r:235, g:235, b:235},
- princesse: {r:197, g:83, b:218},
- chevalier: {r:213, g:12, b:12},
- mur: {r:133, g:113, b:94},
- chemin: {r:42, g:255, b:28}
- };
- var grilleJeu = null;
- var chevalier = null;
- var princesse = null;
- function afficherGrille(grille) {
- var output = "";
- for (var i = 0; i < grille.length; i++) {
- var inner = "";
- for (var j = 0; j < grille[i].length; j++) {
- inner += (grille[i][j] == null ? '-' : grille[i][j]) + ", ";
- }
- output += "[ " + inner.substring(0,inner.length-2) + " ]\n ";
- }
- // print("[" + output.substring(0,output.length-2) + "]"); Vérifie que notre grille est la bonne
- }
- function programme(l,h,d){
- creerGrille (l,h);
- dessinerGrille (l,h);
- ajouterMurs (l,h,d);
- ajouterPersonnages (l,h);
- trouverChemin (l,h);
- };
- function creerGrille (l,h) {
- grilleJeu = new Array (h);
- for (var i = 0; i<h; i++){
- grilleJeu[i]= new Array(l);
- for (var j=0; j<l; j++){
- grilleJeu[i][j]="-";
- }
- }
- }
- function dessinerGrille(l,h){
- setScreenMode(l,h);
- for(var i = 0; i < l; i++){
- for (var j = 0; j < h; j++){
- setPixel(i,j, COULEUR.tuile);
- }
- }
- }
- function ajouterMurs(l,h,d){
- for (var i = 0; i < h; i++){
- for (var j = 0; j < l; j++){
- if(Math.random()<=d){
- setPixel(j,i,COULEUR.mur);
- grilleJeu[i][j] = 'm';
- };
- };
- };
- };
- function trouverTuileLibre(l,h){
- var i = null, j = null;
- do {
- i = Math.floor(Math.random() * h);
- j = Math.floor(Math.random() * l);
- } while(grilleJeu[i][j] != "-");
- return { i:i, j:j };
- }
- function ajouterPersonnages(l,h){
- princesse = trouverTuileLibre(l,h);
- setPixel(princesse.j, princesse.i, COULEUR.princesse);
- grilleJeu[princesse.i][princesse.j] = 'p';
- chevalier = trouverTuileLibre(l,h);
- setPixel(chevalier.j, chevalier.i, COULEUR.chevalier);
- grilleJeu[chevalier.i][chevalier.j] = 'c';
- afficherGrille(grilleJeu);
- }
- function trouverChemin(l,h) {
- function init(l,h) {
- var grille = new Array(h);
- for(var i = 0; i < h; i++) {
- grille[i] = new Array(l);
- for(var j = 0; j < l; j++) {
- grille[i][j] = {
- f : 0,
- g : 0,
- h : 0,
- dejaVisite : false,
- pasBonneIdee : false,
- pos : {
- x : j,
- y : i
- },
- parent : null
- };
- };
- };
- return grille;
- };
- function rechercher(grille, l,h,debut, fin) {
- var aDecouvrir = []; //Liste ouverte
- aDecouvrir.push(debut);
- while(aDecouvrir.length > 0) {
- var plusPetitF=0;
- for(var i=0; i<aDecouvrir.length; i++) {
- if(aDecouvrir[i].f < aDecouvrir[plusPetitF].f) { plusPetitF = i; }
- }
- var caseCourrante = aDecouvrir[plusPetitF];
- if(caseCourrante == fin) {
- var cour = caseCourrante;
- var laCase = [];
- while(cour.parent) {
- laCase.push(cour);
- cour = cour.parent;
- }
- return laCase;
- }
- aDecouvrir = aDecouvrir.filter(function(noeud) { return noeud !== caseCourrante;});
- caseCourrante.pasBonneIdee = true;
- var voisins = trouverVoisins(grille, l,h,caseCourrante);
- for(var i=0; i<voisins.length;i++) {
- var voisin = voisins[i];
- if(voisin.pasBonneIdee || estMur(voisin)) {
- continue;
- }
- var pointG = caseCourrante.g + 1;
- var pointGMeilleur = false;
- if(!voisin.dejaVisite) {
- pointGMeilleur = true;
- voisin.h = heuristique(voisin.pos, fin.pos);
- voisin.dejaVisite = true;
- aDecouvrir.push(voisin);
- } else if(pointG < voisin.g) {
- pointGMeilleur = true;
- }
- if(pointGMeilleur) {
- voisin.parent = caseCourrante;
- voisin.g = pointG;
- voisin.f = voisin.g + voisin.h;
- }
- }
- }
- return [];
- };
- function heuristique(pos0, pos1) {
- var d1 = Math.abs (pos1.x - pos0.x);
- var d2 = Math.abs (pos1.y - pos0.y);
- return d1 + d2;
- };
- function trouverVoisins(grille, l,h,noeud) {
- var caseFouillee = [],i = noeud.pos.y,j = noeud.pos.x;
- if(i > 0) {
- caseFouillee.push(grille[i-1][j]);
- }
- if(i < (h-1)) {
- caseFouillee.push(grille[i+1][j]);
- }
- if(j > 0) {
- caseFouillee.push(grille[i][j-1]);
- }
- if(j < (l-1)) {
- caseFouillee.push(grille[i][j+1]);
- }
- return caseFouillee;
- };
- function estMur(noeud) {
- return grilleJeu[noeud.pos.y][noeud.pos.x] == 'm';
- };
- function dessinerChemin(chemin) {
- for(var i=1; i < chemin.length; i++) {
- setPixel(chemin[i].pos.x,chemin[i].pos.y,COULEUR.chemin);
- }
- }
- var grille = init(l,h);
- var debut = grille[chevalier.i][chevalier.j];
- var fin = grille[princesse.i][princesse.j];
- var chemin = rechercher(grille,l,h,debut,fin);
- if(chemin.length > 0) {
- dessinerChemin(chemin);
- print("La princesse est sauvée!");
- } else {
- print("Il n'y a pas de chemin pour se rendre à la princesse!");
- }
- };
- programme(5,8,0.2);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement