Это решение - супер простой способ решения проблемы. Он включает использование массива, расположенного в сетке чисел 10 × 10. 0 на сетке представляют все позиции, где мы хотим нарисовать белые квадраты. 1 на сетке представляют все позиции, где мы хотим нарисовать красные квадраты. 2 на сетке представляют все позиции, где мы хотим нарисовать синие квадраты. Нет необходимости знать относительные значения точек x и y или значение диапазона. Все, что вам нужно сделать, это изменить положение 0, 1 и 2 на сетке, и функция нарисует нужный вам шаблон.
Код такой, как показано ниже:
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="500" height="500" style="border:1px solid #d3d3d3;">
</canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
/*
* The grid is a 10 by 10 array of numbers.
* The 0s represent all the spots where you want a white square.
* The 1s represent all the spots where you want a red square.
* The 2s represent all the spots where you want a blue square(the middle spot in this case)
*/
var grid =
[
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0],
[0,0,0,0,1,1,1,0,0,0],
[0,0,0,1,1,2,1,1,0,0],
[0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0]
];
function drawSquares(grid)
{
grid.forEach((row,rowIndex) =>
{
row.forEach((square,squareIndex) =>
{
switch(square)
{
case 1: //if the grid value is a 1, draw a red square
ctx.beginPath();
ctx.rect(50*squareIndex,50* rowIndex, 50, 50);
ctx.fillStyle = "red";
ctx.fill();
ctx.lineWidth = "1";
ctx.strokeStyle = "black";
ctx.stroke();
break;
case 2: //if the grid value is a 2, draw a blue square
ctx.beginPath();
ctx.rect(50*squareIndex,50* rowIndex, 50, 50);
ctx.fillStyle = "blue";
ctx.fill();
ctx.lineWidth = "1";
ctx.strokeStyle = "black";
ctx.stroke();
break;
case 0: //if the grid value is a 0, draw a white square
ctx.beginPath();
ctx.rect(50*squareIndex,50* rowIndex, 50, 50);
ctx.fillStyle = "white";
ctx.fill();
ctx.lineWidth = "1";
ctx.strokeStyle = "black";
ctx.stroke();
break;
}
});
});
}
drawSquares(grid);
</script>
</body>
</html>
Вывод вышеуказанного кода выглядит следующим образом:
Пример использования:
//Example 1:
//To achieve your second result,the grid is changed as follows:
var grid =
[
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,1,1,1,1,1,0,0],
[0,0,0,1,1,1,1,1,0,0],
[0,0,0,1,1,2,1,1,0,0],
[0,0,0,1,1,1,1,1,0,0],
[0,0,0,1,1,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0]
];
drawSquares(grid);//after the function call, the result is as shown below
//Example 2:
//To achieve your first result,the grid is changed as follows:
var grid =
[
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,2,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0]
];
drawSquares(grid);//after the function call, the result is as shown below