Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.96 KB | None | 0 0
  1.  
  2.  
  3. function Taquin() {
  4.  
  5. // ********************* définit les images du jeu *********************
  6.  
  7. var pieces = new Image();
  8. var repereImg = new Image();
  9.  
  10. var test_form = document.forms["test"];
  11. var test_form_select = test_form.elements["Image"];
  12. var test_form_select_value = test_form_select.value;
  13.  
  14. pieces.src = "Assets/"+test_form_select_value+".jpg";
  15. repereImg.src = "Assets/repere.png";
  16. document.getElementById("Canvas_div").style.display = "block";
  17.  
  18. // ********************* récupère le canva et son contexte *********************
  19.  
  20. var canvas = document.getElementById('canvas');
  21. var ctx = canvas.getContext('2d');
  22. var audio = document.getElementById("audio");
  23.  
  24. // ********************* reglage de la dificulter du jeux *********************
  25.  
  26. var test_form = document.forms["test"];
  27. var test_form_select = test_form.elements["Dificulty"];
  28. var test_form_select_value = test_form_select.value;
  29.  
  30. if (test_form_select_value == 1) {
  31.  
  32. var W = 360; // Largeur de la zone de jeux
  33. var H = 360; // hauteur de la zone de jeux
  34. } else if (test_form_select_value == 2) {
  35.  
  36. var W = 480; // Largeur de la zone de jeux
  37. var H = 480; // hauteur de la zone de jeux
  38. } else if (test_form_select_value == 3) {
  39.  
  40. var W = 480; // Largeur de la zone de jeux
  41. var H = 600; // hauteur de la zone de jeux
  42. }
  43.  
  44.  
  45. // ********************* variables *********************
  46.  
  47. var T = 120; // Taille des pièces
  48. var L = H/T; // Lignes
  49. var C = W/T; // Colonnes
  50.  
  51. var stockPieces; // tableau de stockage des pièces
  52. var nombre_coup = 0; // Nombre de mouvement effectuer
  53.  
  54. var repere;
  55. var timer;
  56. var posX = canvas.offsetLeft;
  57. var posY = canvas.offsetTop;
  58.  
  59. canvas.setAttribute('tabindex','1');
  60. canvas.focus();
  61. init();
  62.  
  63.  
  64. /* ********************* fonction compteut_coup *********************
  65. *
  66. * ajoute un coup au compteur ou le remet a
  67. * zero au besoin
  68. *
  69. * x = choix de l'action ( 1 = ajout / 0 = reset )
  70. */
  71.  
  72. function compteur_coup(x) {
  73.  
  74. if (x == 1) {
  75.  
  76. nombre_coup++;
  77. } else {
  78.  
  79. nombre_coup = 0;
  80. }
  81.  
  82. document.getElementById("coup").innerHTML = nombre_coup;
  83. }
  84.  
  85. /* ********************* initialisation du jeu *********************
  86. *
  87. *
  88. */
  89.  
  90. function init() {
  91.  
  92. canvas.width = W;
  93. canvas.height = H;
  94. stockPieces = [];
  95. compteur_coup(0);
  96.  
  97. // boucle sur le nombre de pièces
  98. for (var i=0; i<L*C;i++){
  99.  
  100. var piece = {x:i%C*T, y:parseInt(i/C)*T, width:T, height:T, place:i, depart:false, alpha:1};
  101. stockPieces.push(piece); // ajout du conteneur au stock
  102.  
  103. if(!i) { // si la pièce est la première
  104.  
  105. piece.alpha=0; // elle est transparente
  106. piece.depart=true; // elle est déjà mélangée
  107. }
  108. }
  109.  
  110. repere = {x:0,y:0};
  111. timer = setInterval(melange,10);
  112. render();
  113. canvas.addEventListener("click", choisir, false);
  114. canvas.addEventListener("mousemove", reperePos, false);
  115. }
  116.  
  117. /* ********************* mélanger les pièces *********************
  118. *
  119. *
  120. */
  121. function melange(e){
  122.  
  123. var P;
  124. var X;
  125. var Y;
  126. var E = 0;
  127. var i;
  128. var S = false;
  129.  
  130. for (var i=0; i<stockPieces.length; i++) {
  131.  
  132. if(stockPieces[i].alpha==0) {
  133.  
  134. P = stockPieces[i];
  135. E = i;
  136. X = parseInt(i%C);
  137. Y = parseInt(i/L);
  138.  
  139. break;
  140. }
  141. }
  142.  
  143. for (var i=0; i<stockPieces.length; i++) {
  144.  
  145. if(stockPieces[i]!=P && stockPieces[i].depart==false) {
  146.  
  147. var D = parseInt(Math.random()*4)+1;// choisi une direction
  148.  
  149. if (D==1 && X-1>=0 && E-1>0) deplace(stockPieces[E-1]);
  150. if (D==2 && X+1<=C && E+1<stockPieces.length) deplace(stockPieces[E+1]);
  151. if (D==3 && Y+1<=C && E+C<stockPieces.length) deplace(stockPieces[E+C]);
  152. if (D==4 && Y-1>=0 && E-C>0) deplace(stockPieces[E-C]);
  153. }
  154.  
  155. compteur_coup(0);
  156. }
  157.  
  158. repere.x = P.x;
  159. repere.y = P.y;
  160. render();
  161.  
  162. for (var i=0; i<stockPieces.length; i++) {
  163.  
  164. if(!stockPieces[i].depart) return;
  165. }
  166.  
  167. clearInterval(timer);
  168. }
  169.  
  170. /* ********************* déplacement de la pièce *********************
  171. *
  172. * regarde ou est la case "vide" par rapport a "P"
  173. * puis verifi si il est possible de deplacer "P" et
  174. * efectue le deplacement
  175. *
  176. * P = la piece qui va etre deplacer
  177. *
  178. */
  179.  
  180. function deplace(P){
  181.  
  182. // recherche le clip invisible
  183.  
  184. var I = 0;
  185. var V;
  186.  
  187. for (var i=0; i<stockPieces.length; i++) {
  188.  
  189. if(stockPieces[i].alpha==0) {
  190.  
  191. I = i;
  192. V = stockPieces[i];
  193. }
  194. }
  195.  
  196. // vérifie si la tuile est à coté et inverse les index
  197.  
  198. var D = stockPieces.indexOf(P);
  199.  
  200. if((parseInt(V.x/T)==C-1 && D==I+1)) return;
  201. if((parseInt(V.x/T)==0 && D==I-1)) return;
  202. if(D==I+1 || D==I+C || D==I-C || D==I-1){
  203.  
  204. stockPieces[D] = stockPieces[I];
  205. stockPieces[I] = P;
  206.  
  207. if (stockPieces[I].depart==false) stockPieces[I].depart=true;
  208. }
  209.  
  210. audio.play();
  211. gagne();
  212. }
  213.  
  214. /* ********************* cliquer sur une case *********************
  215. *
  216. *
  217. */
  218.  
  219. function choisir(e){
  220.  
  221. var id = parseInt((e.clientX-posX)/T)+parseInt((e.clientY-posY)/T)*C;
  222. var P = stockPieces[id];
  223.  
  224. // recherche le clip invisible
  225.  
  226. var I = 0;
  227. var V;
  228.  
  229. for (var i=0; i<stockPieces.length;i++) {
  230.  
  231. if(stockPieces[i].alpha==0) {
  232.  
  233. I = i;
  234. V = stockPieces[i];
  235. }
  236. }
  237.  
  238. // vérifie si la tuile est à coté et inverse les index
  239.  
  240. var D = stockPieces.indexOf(P);
  241.  
  242. if((parseInt(I%C)==C-1 && D==I+1)) return;
  243. if((parseInt(I%C)==0 && D==I-1)) return;
  244. if(D==I+1 || D==I+C || D==I-C || D==I-1){
  245.  
  246. stockPieces[D] = stockPieces[I];
  247. stockPieces[I] = P;
  248. compteur_coup(1);
  249.  
  250. if (!stockPieces[I].depart) stockPieces[I].depart=true;
  251. }
  252. audio.play();
  253. render();
  254. }
  255.  
  256. /* ********************* vérifie si le joueur a gagné *********************
  257. *
  258. * Defini quelle sont les codition de victoire
  259. * et lance le fonction "finPartie"
  260. *
  261. */
  262. function gagne(){
  263.  
  264. for (var i=0; i<stockPieces.length; i++) {
  265.  
  266. if(i!=stockPieces[i].place) return;
  267. }
  268.  
  269. repere.x = 0;
  270. repere.y = 0;
  271. finPartie();
  272. }
  273.  
  274. /* ********************* position du repère *********************
  275. *
  276. *
  277. */
  278. function reperePos(e){
  279.  
  280. repere.x = parseInt((e.clientX-posX)/T)*T;
  281. repere.y = parseInt((e.clientY-posY)/T)*T;
  282. render();
  283. }
  284.  
  285. /* ********************* fin de partie *********************
  286. *
  287. * declenche les evenement de fin de partie
  288. *
  289. */
  290. function finPartie(){
  291.  
  292. render();
  293. alert("Fin de partie, cliquez pour rejouer.");
  294. init();
  295. }
  296.  
  297. /* ********************* Dessine le jeu *********************
  298. *
  299. *
  300. */
  301. function render() {
  302.  
  303. ctx.fillStyle = "rgb(256,256,256)";
  304. ctx.fillRect(0, 0, W, H);
  305.  
  306. for(var i=0; i<stockPieces.length; i++){
  307.  
  308. var p = stockPieces[i];
  309.  
  310. if(p.alpha!=0){
  311.  
  312. ctx.drawImage(pieces, p.x, p.y,p.width,p.height, parseInt(i%C)*T,parseInt(i/C)*T,p.width,p.height);
  313. }
  314. }
  315.  
  316. ctx.drawImage(repereImg, repere.x,repere.y);
  317. }
  318.  
  319. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement