, , . , "I":
. X . . . . . . . . X . . . . .
. X . . => X X X X => . . X . => . . . .
. X . . . . . . . . X . X X X X
. X . . . . . . . . X . . . . .
, 3- 4- 1- 2-. , . , (5x4), , .
, , , , , "", . , . 4x4.
, .
, , . . , , , , .
" ", 'on', "", , .
, S:
X . . . 1 0 0 0
X X . . = 1 1 0 0 = 1000110001000000 (in binary) = 0x8C40 (in hexadecimal)
. X . . 0 1 0 0
. . . . 0 0 0 0
. X X . 0 1 1 0
X X . . = 1 1 0 0 = 0110110000000000 (in binary) = 0x6C00 (in hexadecimal)
. . . . 0 0 0 0
. . . . 0 0 0 0
. , "S" :
[ 0x8C40, 0x6C00, 0x8C40, 0x6C00 ]
, - :
var shape = [
[ 0x4640, 0x0E40, 0x4C40, 0x4E00 ],
[ 0x8C40, 0x6C00, 0x8C40, 0x6C00 ],
[ 0x4C80, 0xC600, 0x4C80, 0xC600 ],
[ 0x4444, 0x0F00, 0x4444, 0x0F00 ],
[ 0x44C0, 0x8E00, 0xC880, 0xE200 ],
[ 0x88C0, 0xE800, 0xC440, 0x2E00 ],
[ 0xCC00, 0xCC00, 0xCC00, 0xCC00 ]
];
, ? matrix[y][x] :
for (var y = 0; y < 4; y++) {
for (var x = 0; x < 4; x++) {
if (shape[s][r] & (0x8000 >> (y * 4 + x))) {
ctx.fillRect(x * 20, y * 20, 19, 19);
}
}
}
Demo
.
var canvas = document.getElementById('c');
var ctx = canvas.getContext('2d');
canvas.width = 100;
canvas.height = 100;
var shape = [
[ 0x4640, 0x0E40, 0x4C40, 0x4E00 ],
[ 0x8C40, 0x6C00, 0x8C40, 0x6C00 ],
[ 0x4C80, 0xC600, 0x4C80, 0xC600 ],
[ 0x4444, 0x0F00, 0x4444, 0x0F00 ],
[ 0x44C0, 0x8E00, 0xC880, 0xE200 ],
[ 0x88C0, 0xE800, 0xC440, 0x2E00 ],
[ 0xCC00, 0xCC00, 0xCC00, 0xCC00 ]
];
var curShape = 0, curRotation = 0;
draw(curShape, curRotation);
function draw(s, r) {
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, 100, 100);
ctx.fillStyle = 'black';
for (var y = 0; y < 4; y++) {
for (var x = 0; x < 4; x++) {
if (shape[s][r] & (0x8000 >> (y * 4 + x))) {
ctx.fillRect(x * 20, y * 20, 19, 19);
}
}
}
}
function next() {
curShape = (curShape + 1) % 7;
draw(curShape, curRotation);
}
function rotate() {
curRotation = (curRotation + 1) % 4;
draw(curShape, curRotation);
}
<canvas id="c"></canvas>
<button onclick="rotate()">Rotate</button>
<button onclick="next()">Next shape</button>
Hide result