Advertisement
PifyZ

Jeu (Game) canvas HTML5

Mar 8th, 2012
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Initialisation des variables */
  2.     /* Informations passés par les fichiers de niveaux */
  3.         /* Carte du jeu -> 0 = sol ; 1 = mur ; 2 = sol traversé */
  4.             /* A revoir -> Carte du jeu -> 0 = mur ; 1 = sol traversé ; 2 = sol */
  5.         /* Informations sur le joueur */
  6.  
  7.     var
  8.         canvas = document.getElementById('canvas'),
  9.         context = canvas.getContext('2d'),
  10.         niveauLargeur = 0, niveauHauteur = 0,
  11.         nbCasesVide = 0, nbCaisses = caisses.length, nbDeplacementsTotalNecessaire = 0,
  12.         nbDeplacementsJoueur = 0, nbDeplacementsCaisses = 0;
  13.         image = {},
  14.         images = {
  15.             joueur: 'images/joueur.png',
  16.             mur: 'images/mur.png',
  17.             sol: 'images/sol.png',
  18.             solTraverse: 'images/solTraverse.png',
  19.             caisse: 'images/caisse.png',
  20.             interrupteur: 'images/interrupteur.png',
  21.             porte: 'images/porte.png'
  22.         },
  23.         cases = {
  24.             sol: 0,
  25.             mur: 1,
  26.             solTraverse: 2
  27.         };
  28.  
  29. /* Fonctions */
  30.     /* Fonction de jeu */
  31.         /* Fonction exécuté SEULEMENT à l'exécution du jeu */
  32.             function Create() {
  33.                 niveauLargeur = niveau[0].length;
  34.                 niveauHauteur = niveau.length;
  35.  
  36.                 canvas.width = niveauLargeur * niveauZoom;
  37.                 canvas.height = niveauHauteur * niveauZoom;
  38.  
  39.                 $(canvas).css('width', (niveauLargeur * niveauZoom) + 'px');
  40.                 $(canvas).css('height', (niveauHauteur * niveauZoom) + 'px');
  41.  
  42.                 for (var lien in images) {
  43.                     image[lien] = new Image();
  44.                     image[lien].src = images[lien];
  45.                 }
  46.  
  47.                 Update();
  48.  
  49.                 nbDeplacementsTotalNecessaire = nbCasesVide - nbCaisses;
  50.             }
  51.  
  52.         /* Mise à jour du jeu */
  53.             function Update() {
  54.                 dessineNiveau();
  55.                 dessineCaisses();
  56.                 dessineJoueur();
  57.                 dessineInterrupteurs();
  58.                 victoire();
  59.             }
  60.  
  61.         /* Destruction du jeu */
  62.             function Destroy() {
  63.                 /* Affiche un fond coloré */
  64.                     context.rect(0, 0, canvas.width, canvas.height);
  65.                     context.fillStyle = 'rgba(236, 236, 236, .5)';
  66.                     context.fill();
  67.  
  68.                 /* Afficher le texte de la victoire */
  69.                     context.font = '24px Arial';
  70.                     context.fillStyle  = 'rgb(50, 120, 50)';
  71.                     context.textAlign = 'center';
  72.                     context.fillText('Victoire!', canvas.width / 2, canvas.height / 2 + 12);
  73.             }
  74.  
  75.     /* Fonctions utilitaires */
  76.         /* Annonce la fin du niveau */
  77.             function victoire() {
  78.                 /* Si toutes les sols ont été recouvert, on lance la victoire */
  79.                     if (nbCasesVide == nbCaisses) {
  80.                         /* Stop la boucle de mise à jour du jeu */
  81.                             clearInterval(Update);
  82.  
  83.                         /* Destruction du jeu après 0.5 secondes */
  84.                             setTimeout(Destroy, 500);
  85.                     }
  86.             }
  87.  
  88.         /* Fonctions de dessins */
  89.             /* Dessine le niveau */
  90.                 function dessineNiveau() {
  91.                     nbCasesVide = 0;
  92.  
  93.                     for (var y = 0 ; y < niveauHauteur ; y++) {
  94.                         for (var x = 0 ; x < niveauLargeur ; x++) {
  95.                             var contenu = niveau[y][x];
  96.  
  97.                             if (contenu >= 0) {
  98.                                 if (contenu == cases.sol) {
  99.                                     context.drawImage(image.sol, x * niveauZoom, y * niveauZoom, niveauZoom, niveauZoom);
  100.                                     nbCasesVide += 1;
  101.                                 } else if (contenu == cases.mur) {
  102.                                     context.drawImage(image.mur, x * niveauZoom, y * niveauZoom, niveauZoom, niveauZoom);
  103.                                 } else if (contenu == cases.solTraverse) {
  104.                                     context.drawImage(image.solTraverse, x * niveauZoom, y * niveauZoom, niveauZoom, niveauZoom);
  105.                                 }
  106.                             }
  107.                         }
  108.                     }
  109.                 }
  110.  
  111.             /* Dessiner le joueur */
  112.                 function dessineJoueur() {
  113.                     context.fillStyle = 'rgb(255, 0, 0)';
  114.                     // context.drawImage(image.joueur, joueur.x * niveauZoom, joueur.y * niveauZoom, niveauZoom, niveauZoom);
  115.                     context.drawImage(image.joueur, 0, 0, niveauZoom, niveauZoom, joueur.x * niveauZoom, joueur.y * niveauZoom, niveauZoom, niveauZoom);
  116.                 }
  117.  
  118.             /* Dessiner les caisses */
  119.                 function dessineCaisses() {
  120.                     for (var i in caisses) {
  121.                         context.drawImage(image.caisse, caisses[i].x * niveauZoom, caisses[i].y * niveauZoom, niveauZoom, niveauZoom);
  122.                     }
  123.                 }
  124.  
  125.             /* Dessiner les interrupteurs (+ les portes avec des traits) */
  126.                 function dessineInterrupteurs() {
  127.                     for (var i in interrupteurs) {
  128.                         if (interrupteurs[i].ouvert == false) {
  129.                             /* Dessine l'interrupteur */
  130.                                 context.drawImage(image.interrupteur, interrupteurs[i].xInterrupteur * niveauZoom, interrupteurs[i].yInterrupteur * niveauZoom, niveauZoom, niveauZoom);
  131.  
  132.                             /* Dessine la porte */
  133.                                 context.drawImage(image.porte, interrupteurs[i].xPorte * niveauZoom, interrupteurs[i].yPorte * niveauZoom, niveauZoom, niveauZoom);
  134.  
  135.                             /* Dessine le trait qui relie la porte et l'interrupteur */
  136.                                 context.beginPath();
  137.                                 context.strokeStyle = 'rgba(150, 50, 50, .3)';
  138.                                 context.lineWidth = 1;
  139.                                 context.lineCap = 'round';
  140.                                 context.moveTo(interrupteurs[i].xInterrupteur * niveauZoom + (niveauZoom / 2), interrupteurs[i].yInterrupteur * niveauZoom + (niveauZoom / 2));
  141.                                 context.lineTo(interrupteurs[i].xPorte * niveauZoom + (niveauZoom / 2), interrupteurs[i].yPorte * niveauZoom + (niveauZoom / 2));
  142.                                 context.stroke();
  143.                         }
  144.                     }
  145.                 }
  146.  
  147.         /* Fonctions de déplacement du joueur */
  148.             /* Appuie sur une touche déclenche le mouvement du joueur*/
  149.                 $(document).keydown(function(event) {
  150.                     if (event.keyCode == '38' || event.keyCode == '90') { deplacement('haut'); }
  151.                     if (event.keyCode == '40' || event.keyCode == '83') { deplacement('bas'); }
  152.                     if (event.keyCode == '37' || event.keyCode == '81') { deplacement('gauche'); }
  153.                     if (event.keyCode == '39' || event.keyCode == '68') { deplacement('droite'); }
  154.                 });
  155.  
  156.             /* Déplace le joueur */
  157.                 function deplacement(ou) {
  158.                     var
  159.                         nvJoueur,
  160.                         nvCaisse,
  161.                         touche = false;
  162.  
  163.                     /* Vers où se dirige le joueur */
  164.                         if (ou == 'haut') { nvJoueur = {
  165.                             x: joueur.x,
  166.                             y: joueur.y - 1
  167.                         } } else if (ou == 'bas') { nvJoueur = {
  168.                             x: joueur.x,
  169.                             y: joueur.y + 1
  170.                         } } else if (ou == 'gauche') { nvJoueur = {
  171.                             x: joueur.x - 1,
  172.                             y: joueur.y
  173.                         } } else if (ou == 'droite') { nvJoueur = {
  174.                             x: joueur.x + 1,
  175.                             y: joueur.y
  176.                         } }
  177.  
  178.                     /* Si il y a une caisse, on la pousse si possible */
  179.                         if (yAQuoiLa(nvJoueur.x, nvJoueur.y, 'caisse') != false) {
  180.                             var i = yAQuoiLa(nvJoueur.x, nvJoueur.y, 'caisse') - 1;
  181.  
  182.                             if (ou == 'haut') { nvCaisse = {
  183.                                 x: caisses[i].x,
  184.                                 y: caisses[i].y - 1
  185.                             } } else if (ou == 'bas') { nvCaisse = {
  186.                                 x: caisses[i].x,
  187.                                 y: caisses[i].y + 1
  188.                             } } else if (ou == 'gauche') { nvCaisse = {
  189.                                 x: caisses[i].x - 1,
  190.                                 y: caisses[i].y
  191.                             } } else if (ou == 'droite') { nvCaisse = {
  192.                                 x: caisses[i].x + 1,
  193.                                 y: caisses[i].y
  194.                             } }
  195.  
  196.                             if (caisses[i].x == nvJoueur.x && caisses[i].y == nvJoueur.y) {
  197.                                 if (niveau[nvCaisse.y][nvCaisse.x] == cases.mur || niveau[nvCaisse.y][nvCaisse.x] == cases.solTraverse) {
  198.                                     nvJoueur.x = joueur.x;
  199.                                     nvJoueur.y = joueur.y;
  200.                                     nvCaisse.x = caisses[i].x;
  201.                                     nvCaisse.y = caisses[i].y;
  202.                                     nbDeplacementsCaisses--;
  203.                                 }
  204.  
  205.                                 caisses[i].x = nvCaisse.x;
  206.                                 caisses[i].y = nvCaisse.y;
  207.                                 nbDeplacementsCaisses++;
  208.                                 touche = true;
  209.                             }
  210.                         }
  211.  
  212.                     /* Si il y a un interrupteur, on l'active */
  213.                         if (yAQuoiLa(nvJoueur.x, nvJoueur.y, 'interrupteur') != false) {
  214.                             var i = yAQuoiLa(nvJoueur.x, nvJoueur.y, 'interrupteur') - 1;
  215.                             interrupteurs[i].ouvert = true;
  216.                         }
  217.  
  218.                     /* Si il y a une porte, le mouvement du joueur est annulé */
  219.                         if (yAQuoiLa(nvJoueur.x, nvJoueur.y, 'porte') == true) {
  220.                             nvJoueur.x = joueur.x;
  221.                             nvJoueur.y = joueur.y;
  222.                         }
  223.  
  224.                     /* Déplacement du joueur */
  225.                         if (niveau[nvJoueur.y][nvJoueur.x] == cases.sol && touche == false) {
  226.                             niveau[nvJoueur.y][nvJoueur.x] = cases.solTraverse;
  227.                             joueur.x = nvJoueur.x;
  228.                             joueur.y = nvJoueur.y;
  229.                             nbDeplacementsJoueur++;
  230.                         }
  231.                 }
  232.  
  233.         /* Y a quoi là ? */
  234.             function yAQuoiLa(x, y, quoi) {
  235.                 if (quoi == 'niveau') {
  236.                     return niveau[y][x];
  237.                 } else if (quoi == 'caisse') {
  238.                     for (var i in caisses) {
  239.                         if (x == caisses[i].x && y == caisses[i].y) {
  240.                             return parseInt(i + 1);
  241.                         }
  242.                     }
  243.                 } else if (quoi == 'interrupteur') {
  244.                     for (var i in interrupteurs) {
  245.                         if (x == interrupteurs[i].xInterrupteur && y == interrupteurs[i].yInterrupteur && interrupteurs[i].ouvert == false) {
  246.                             return parseInt(i + 1);
  247.                         }
  248.                     }
  249.                 } else if (quoi == 'porte') {
  250.                     for (var i in interrupteurs) {
  251.                         if (x == interrupteurs[i].xPorte && y == interrupteurs[i].yPorte && interrupteurs[i].ouvert == false) {
  252.                             return true;
  253.                         }
  254.                     }
  255.                 }
  256.  
  257.                 return false;
  258.             }
  259.  
  260. /* Fonctions à exécuter */
  261.     Create();
  262.     Update = setInterval(Update, 1000 / 60);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement