Advertisement
PifyZ

Jeu (Game) canvas HTML5

Mar 7th, 2012
393
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.     /* Variables utilitaires */
  8.         var
  9.             canvas = document.getElementById('canvas'),
  10.             context = canvas.getContext('2d'),
  11.             niveauLargeur = 0, niveauHauteur = 0,
  12.             nbCasesVide = 0, nbCaisses = caisses.length, nbDeplacementsTotalNecessaire = 0,
  13.             nbDeplacementsJoueur = 0, nbDeplacementsCaisses = 0;
  14.             image = {},
  15.             images = {
  16.                 joueur: 'images/joueur.png',
  17.                 mur: 'images/mur.png',
  18.                 sol: 'images/sol.png',
  19.                 solTraverse: 'images/solTraverse.png',
  20.                 caisse: 'images/caisse.png',
  21.                 interrupteur: 'images/interrupteur.png',
  22.                 porte: 'images/porte.png'
  23.             },
  24.             cases = {
  25.                 sol: 0,
  26.                 mur: 1,
  27.                 solTraverse: 2
  28.             };
  29.  
  30. /* Fonctions */
  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.             nbDeplacementsTotalNecessaire = nbCasesVide - nbCaisses;
  49.         }
  50.  
  51.     /* Mise à jour du jeu */
  52.         function Update() {
  53.             /* Liste des fonctions à exécuter en permanence */
  54.                 dessineNiveau();
  55.                 dessineCaisses();
  56.                 dessineJoueur();
  57.                 dessineInterrupteurs();
  58.                 victoire();
  59.         }
  60.  
  61.     /* Déstruction 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.     /* Victoire */
  76.         function victoire() {
  77.             /* Si toutes les sols ont été recouvert, on lance la victoire */
  78.                 if (nbCasesVide == nbCaisses) {
  79.                     /* Stop la boucle de mise à jour du jeu */
  80.                         clearInterval(Update);
  81.  
  82.                     /* Destruction du jeu après 0.5 secondes */
  83.                         setTimeout(Destroy, 500);
  84.                 }
  85.         }
  86.  
  87.     /* Dessiner les murs du niveau */
  88.         function dessineNiveau() {
  89.             nbCasesVide = 0;
  90.  
  91.             for (var y = 0 ; y < niveauHauteur ; y++) {
  92.                 for (var x = 0 ; x < niveauLargeur ; x++) {
  93.                     var contenu = niveau[y][x];
  94.  
  95.                     if (contenu >= 0) {
  96.                         if (contenu == cases.sol) {
  97.                             context.drawImage(image.sol, x * niveauZoom, y * niveauZoom, niveauZoom, niveauZoom);
  98.                             nbCasesVide += 1;
  99.                         } else if (contenu == cases.mur) {
  100.                             context.drawImage(image.mur, x * niveauZoom, y * niveauZoom, niveauZoom, niveauZoom);
  101.                         } else if (contenu == cases.solTraverse) {
  102.                             context.drawImage(image.solTraverse, x * niveauZoom, y * niveauZoom, niveauZoom, niveauZoom);
  103.                         }
  104.                     }
  105.                 }
  106.             }
  107.         }
  108.  
  109.     /* Dessiner le joueur */
  110.         function dessineJoueur() {
  111.             context.fillStyle = 'rgb(255, 0, 0)';
  112.             // context.drawImage(image.joueur, joueur.x * niveauZoom, joueur.y * niveauZoom, niveauZoom, niveauZoom);
  113.             context.drawImage(image.joueur, 0, 0, niveauZoom, niveauZoom, joueur.x * niveauZoom, joueur.y * niveauZoom, niveauZoom, niveauZoom);
  114.         }
  115.  
  116.     /* Dessiner le joueur */
  117.         function dessineCaisses() {
  118.             for (var i in caisses) {
  119.                 context.drawImage(image.caisse, caisses[i].x * niveauZoom, caisses[i].y * niveauZoom, niveauZoom, niveauZoom);
  120.             }
  121.         }
  122.  
  123.     /* Dessiner le joueur */
  124.         function dessineInterrupteurs() {
  125.             for (var i in interrupteurs) {
  126.                 if (interrupteurs[i].ouvert == false) {
  127.                     /* Dessine l'interrupteur */
  128.                         context.drawImage(image.interrupteur, interrupteurs[i].xInterrupteur * niveauZoom, interrupteurs[i].yInterrupteur * niveauZoom, niveauZoom, niveauZoom);
  129.  
  130.                     /* Dessine la porte */
  131.                         context.drawImage(image.porte, interrupteurs[i].xPorte * niveauZoom, interrupteurs[i].yPorte * niveauZoom, niveauZoom, niveauZoom);
  132.  
  133.                     /* Dessine le trait qui relie la porte et l'interrupteur */
  134.                         context.beginPath();
  135.                         context.strokeStyle = 'rgba(150, 50, 50, .3)';
  136.                         context.lineWidth = 1;
  137.                         context.lineCap = 'round';
  138.                         context.moveTo(interrupteurs[i].xInterrupteur * niveauZoom + (niveauZoom / 2), interrupteurs[i].yInterrupteur * niveauZoom + (niveauZoom / 2));
  139.                         context.lineTo(interrupteurs[i].xPorte * niveauZoom + (niveauZoom / 2), interrupteurs[i].yPorte * niveauZoom + (niveauZoom / 2));
  140.                         context.stroke();
  141.                 }
  142.             }
  143.         }
  144.  
  145.     /* Déplacement du joueur */
  146.         $(document).keydown(function(event) {
  147.             if (event.keyCode == '38' || event.keyCode == '90') { deplacement('haut'); }
  148.             if (event.keyCode == '40' || event.keyCode == '83') { deplacement('bas'); }
  149.             if (event.keyCode == '37' || event.keyCode == '81') { deplacement('gauche'); }
  150.             if (event.keyCode == '39' || event.keyCode == '68') { deplacement('droite'); }
  151.         });
  152.  
  153.     /* Déplacements du joueur */
  154.         function deplacement(ou) {
  155.             var
  156.                 nvJoueur,
  157.                 nvCaisse,
  158.                 touche = false;
  159.  
  160.             if (ou == 'haut') { nvJoueur = {
  161.                 x: joueur.x,
  162.                 y: joueur.y - 1
  163.             } } else if (ou == 'bas') { nvJoueur = {
  164.                 x: joueur.x,
  165.                 y: joueur.y + 1
  166.             } } else if (ou == 'gauche') { nvJoueur = {
  167.                 x: joueur.x - 1,
  168.                 y: joueur.y
  169.             } } else if (ou == 'droite') { nvJoueur = {
  170.                 x: joueur.x + 1,
  171.                 y: joueur.y
  172.             } }
  173.  
  174.             if (yAQuoiLa(nvJoueur.x, nvJoueur.y, 'caisse') != false) {
  175.                 var i = yAQuoiLa(nvJoueur.x, nvJoueur.y, 'caisse') - 1;
  176.  
  177.                 if (ou == 'haut') { nvCaisse = {
  178.                     x: caisses[i].x,
  179.                     y: caisses[i].y - 1
  180.                 } } else if (ou == 'bas') { nvCaisse = {
  181.                     x: caisses[i].x,
  182.                     y: caisses[i].y + 1
  183.                 } } else if (ou == 'gauche') { nvCaisse = {
  184.                     x: caisses[i].x - 1,
  185.                     y: caisses[i].y
  186.                 } } else if (ou == 'droite') { nvCaisse = {
  187.                     x: caisses[i].x + 1,
  188.                     y: caisses[i].y
  189.                 } }
  190.  
  191.                 if (caisses[i].x == nvJoueur.x && caisses[i].y == nvJoueur.y) {
  192.                     if (niveau[nvCaisse.y][nvCaisse.x] == cases.mur || niveau[nvCaisse.y][nvCaisse.x] == cases.solTraverse) {
  193.                         nvJoueur.x = joueur.x;
  194.                         nvJoueur.y = joueur.y;
  195.                         nvCaisse.x = caisses[i].x;
  196.                         nvCaisse.y = caisses[i].y;
  197.                         nbDeplacementsCaisses--;
  198.                     }
  199.  
  200.                     caisses[i].x = nvCaisse.x;
  201.                     caisses[i].y = nvCaisse.y;
  202.                     nbDeplacementsCaisses++;
  203.                     touche = true;
  204.                 }
  205.             }
  206.  
  207.             if (yAQuoiLa(nvJoueur.x, nvJoueur.y, 'interrupteur') != false) {
  208.                 var i = yAQuoiLa(nvJoueur.x, nvJoueur.y, 'interrupteur') - 1;
  209.                 interrupteurs[i].ouvert = true;
  210.             }
  211.  
  212.             if (yAQuoiLa(nvJoueur.x, nvJoueur.y, 'porte') == true) {
  213.                 nvJoueur.x = joueur.x;
  214.                 nvJoueur.y = joueur.y;
  215.             }
  216.  
  217.             if (niveau[nvJoueur.y][nvJoueur.x] == cases.sol && touche == false) {
  218.                 niveau[nvJoueur.y][nvJoueur.x] = cases.solTraverse;
  219.                 joueur.x = nvJoueur.x;
  220.                 joueur.y = nvJoueur.y;
  221.                 nbDeplacementsJoueur++;
  222.             }
  223.         }
  224.  
  225.     /* Y a quoi là ? */
  226.         function yAQuoiLa(x, y, quoi) {
  227.             if (quoi == 'niveau') {
  228.                 return niveau[y][x];
  229.             } else if (quoi == 'caisse') {
  230.                 for (var i in caisses) {
  231.                     if (x == caisses[i].x && y == caisses[i].y) {
  232.                         return parseInt(i + 1);
  233.                     }
  234.                 }
  235.             } else if (quoi == 'interrupteur') {
  236.                 for (var i in interrupteurs) {
  237.                     if (x == interrupteurs[i].xInterrupteur && y == interrupteurs[i].yInterrupteur && interrupteurs[i].ouvert == false) {
  238.                         return parseInt(i + 1);
  239.                     }
  240.                 }
  241.             } else if (quoi == 'porte') {
  242.                 for (var i in interrupteurs) {
  243.                     if (x == interrupteurs[i].xPorte && y == interrupteurs[i].yPorte && interrupteurs[i].ouvert == false) {
  244.                         return true;
  245.                     }
  246.                 }
  247.             }
  248.  
  249.             return false;
  250.         }
  251.  
  252. /* Fonctions à exécuter */
  253.     Create();
  254.     Update = setInterval(Update, 1000 / 60);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement