JSFiddle - React, Tailwind, and code Playground
HTML
<canvas height='1000' width='1000' id='example'>Обновите браузер</canvas>
JavaScript
var example = document.getElementById("example");
ctx = example.getContext('2d');
colorMap = [
"",
"#FF00FF",
"#FFFF00",
"#00FF00",
"#00FFFF"
];
counter = 0;
D = 200;
d = 5;
direction = [0,1,2,3,0];
x =[ D/4, D*3/4, D*3/4,D/4,D/2];
y =[ D/4, D*3/4, D/4, D*3/4,D/2];
mur = function (num) {
if ((++array[x[num]][y[num]]) == 1) {
direction[num]--;
ctx.fillStyle=colorMap[num];
ctx.fillRect(x[num] * d, y[num] * d, d, d);
} else {
direction[num]++;
array[x[num]][y[num]] = 0;
ctx.clearRect(x[num] * d, y[num] * d, d, d);
}
if (direction[num]==-1) {
direction[num]=3;
}
if (direction[num]==4) {
direction[num]=0;
}
if (direction[num] == 0) {
x[num]++;
} else if (direction[num] == 1) {
y[num]++;
} else if (direction[num] == 2) {
x[num]--;
} else if (direction[num] == 3) {
y[num]--;
}
if (x[num]==-1) {
direction[num]=3;
x[num]=0;
} else if(y[num]==-1) {
direction[num]=0;
y[num]=0;
}else if(x[num]==D) {
x[num]=D-1;
direction[num]=1;
} else if(y[num]==D) {
y[num]=D-1;
direction[num]=2;
}
};
array = Array.apply(null,new Int16Array(D)).map(Number.prototype.valueOf,0);
for (i = 0; i < D; i++){
array[i] = Array.apply(null,new Int16Array(D)).map(Number.prototype.valueOf,0);
}
for (i=1; i <= 5; i++) {
setInterval(mur, 10, i);
}
ctx.fillRect(0, 0, 10, 10);
ctx.fillRect(990, 990, 10, 10);
ctx.fillRect(0, 990, 10, 10);
ctx.fillRect(990, 0, 10, 10);