рдХреИрдирд╡рд╛рд╕: рдкрдВрджреНрд░рд╣ рдорд┐рдирдЯ рдкрдВрджреНрд░рд╣

CANVAS рдХрджрдо рд╕реЗ рдХрджрдо:
  1. рдореВрд▓ рдмрд╛рддреЗрдВ
  2. рдЫрд╡рд┐
  3. рдкреЛрдВрдЧ
  4. рдЯреИрдЧ

рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдкреЙрдЯ рдереЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕ рдкрд╣реЗрд▓реА рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИред рдЯреИрдЧ рдХреЛ рдкреНрд▓рд╛рд╕реНрдЯрд┐рдХ рдХреЗ рдмрдХреНрд╕реЗ рдореЗрдВ рддрдм рддрдХ рдШреБрдорд╛рдирд╛ рдЬрдм рддрдХ рдХрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдкреЛрд╖рд┐рдд рдХреНрд░рдо рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдереАред рдФрд░ рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЦреЗрд▓ рд░реБрдЪрд┐ рдХреЗ рдХреНрд░рдо рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЯреИрдЧ рд▓рд┐рдЦреЗ рдЬреЛ рди рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд╕реЗ рдЦреЗрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдпрд╛ рдЖрдИрдУрдПрд╕ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рд╕реЗ рднреАред
рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдореЗрдВ рдПрдХ рдбреИрдбреА рдореЗрдВ рдкрдбрд╝реА рджреЛ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА, рдкрд╣рд▓реЗ рд╣рдо index.htm рдХрд╛ рдирд╛рдо рд▓реЗрдВрдЧреЗ, рдФрд░ рджреВрд╕рд░рд╛ Puzzle15.js
HTML рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдкреВрд░реЗ рдкреЛрд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓реЗрдЧреА, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
<html> <head> <meta charset="utf-8"> <title></title> <script src="puzzle15.js"></script> </head> <body> <canvas id="puzzle15">     - </canvas> <script>init();</script> </body> </html> 

рд╣рдо рджреВрд╕рд░реА рдлрд╛рдЗрд▓ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рд╢реБрд░реВ рдореЗрдВ рд╣рдо рдЗрдирд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдЖрдХрд╛рд░ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рдорд╛рди рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдкреЗрдВрдЯ рдХрд░реЗрдЧрд╛, рдЕрд░реНрдерд╛рддред Puzzle15.js рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
 function init() { var canvas = document.getElementById("puzzle15"); canvas.width = 320; //    canvas.height = 320; var context = canvas.getContext("2d"); context.fillStyle = "#222"; //  "" context.fillRect(0, 0, canvas.width, canvas.height); //   } 

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде index.htm рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЧрд╣рд░реЗ рдЧреНрд░реЗ рдЖрдпрдд рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЯреИрдЧ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╡рд░реНрдЧ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЦреЗрд▓ рддрд░реНрдХ рдирд┐рдХрд╛рд▓реЗ рдЧрдП, рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 function game15() { var cellView = null; var numView = null; var arr = [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,0]]; var clicks = 0; function getNull() { //      for (var i = 0; i < 4; i++) { for (var j = 0; j < 4; j++) { if (arr[j][i] === 0) { return{"x":i,"y":j}; } } } }; //      function getRandomBool() { if (Math.floor(Math.random() * 2) === 0) { return true; } } //     this.getClicks = function() { return clicks; }; //   ""    this.move = function(x, y) { var nullX = getNull().x; var nullY = getNull().y; if (((x - 1 == nullX || x + 1 == nullX) && y == nullY) || ((y - 1 == nullY || y + 1 == nullY) && x == nullX)) { arr[nullY][nullX] = arr[y][x]; arr[y][x] = 0; clicks++; } }; //    this.victory = function() { var e = [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,0]]; var res = true; for (var i = 0; i < 4; i++) { for (var j = 0; j < 4; j++) { if (e[i][j] != arr[i][j]) { res = false; } } } return res; }; //  ""  this.mix = function(stepCount) { var x,y; for (var i = 0; i < stepCount; i++) { var nullX = getNull().x; var nullY = getNull().y; var hMove = getRandomBool(); var upLeft = getRandomBool(); if (!hMove && !upLeft) { y = nullY; x = nullX - 1;} if (hMove && !upLeft) { x = nullX; y = nullY + 1;} if (!hMove && upLeft) { y = nullY; x = nullX + 1;} if (hMove && upLeft) { x = nullX; y = nullY - 1;} if (0 <= x && x <= 3 && 0 <= y && y <= 3) { this.move(x, y); } } clicks = 0; }; //    this.setCellView = function(func) { cellView = func; }; //    this.setNumView = function(func) { numView = func; }; //       this.draw = function(context, size) { for (var i = 0; i < 4; i++) { for (var j = 0; j < 4; j++) { if (arr[i][j] > 0) { if (cellView !== null) { cellView(j * size, i * size); } if (numView !== null) { numView(); context.fillText(arr[i][j], j * size + size / 2, i * size + size / 2); } } } } }; } 

рдЕрдм рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХреЛ рд╕реНрдереИрддрд┐рдХ рдЖрдпрдд рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
 function init() { var canvas = document.getElementById("puzzle15"); canvas.width = 320; canvas.height = 320; var cellSize = canvas.width / 4; var context = canvas.getContext("2d"); var field = new game15(); //    field.mix(350); //     field.setCellView(function(x, y) { //     context.fillStyle = "#FFB93B"; context.fillRect(x+1, y+1, cellSize-2, cellSize-2); }); field.setNumView(function() { //     context.font = "bold "+(cellSize/2)+"px Sans"; context.textAlign = "center"; context.textBaseline = "middle"; context.fillStyle = "#222"; }); context.fillStyle = "#222"; context.fillRect(0, 0, canvas.width, canvas.height); field.draw(context, cellSize); } 

рдЦреИрд░, рдпрд╣ рдХреЗрд╡рд▓ рдорд╛рдЙрд╕ рдФрд░ рд╕реНрдкрд░реНрд╢ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЯреИрдЧ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП, init рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдлрд╝реАрд▓реНрдб рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ (рд╕рдВрджрд░реНрдн, рд╕реЗрд▓рд╕рд╛рдЗрдЬрд╝) рдХреЗ рдмрд╛рдж, рдереЛрдбрд╝рд╛ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
  function event(x, y) { //      () field.move(x, y); context.fillStyle = "#222"; context.fillRect(0, 0, canvas.width, canvas.height); field.draw(context, cellSize); if (field.victory()) { //   ,     alert("  "+field.getClicks()+" !"); //    !! field.mix(300); context.fillStyle = "#222"; context.fillRect(0, 0, canvas.width, canvas.height); field.draw(context, cellSize); } } canvas.onclick = function(e) { //    var x = (e.pageX - canvas.offsetLeft) / cellSize | 0; var y = (e.pageY - canvas.offsetTop) / cellSize | 0; event(x, y); //    }; canvas.ontouchend = function(e) { //    var x = (e.touches[0].pageX - canvas.offsetLeft) / cellSize | 0; var y = (e.touches[0].pageY - canvas.offsetTop) / cellSize | 0; event(x, y); }; 

рдЬреЛ рдЙрд╕ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рдХреЛрдб рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЬрд▓реНрджреА рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдкреЙрдб рдкрд░ рд╕реНрдкреЙрдЯ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдлреЛрдЯреЛ рдХреЗ рд▓рд┐рдП рд╣реЙрдмреАрдмреАрдЯ рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред


Source: https://habr.com/ru/post/In118356/


All Articles