function checkRotation(piece, x, y) { let newPiece; for (let i = 0; i < tetrominoes.length; i++) { if (arraysEqual(tetrominoes[i], piece)) { let newRotate = rotateClockwise(tetrominoes[i]); if (!checkCollision(newRotate, x, y)) { newPiece = newRotate; break; } else { let newRotate2 = rotateClockwise(newRotate); if (!checkCollision(newRotate2, x, y)) newPiece = newRotate2; } } } return newPiece; } function rotateClockwise(piece) { let rotateRow = piece[0][1] + piece.slice(0, piece.length - 1).reduce((a, b) => a + b, 0); let rotateCol = piece[0][0] - piece.slice(1).reduce((a, b) => a + b, 0); return piece.slice(1).map((a) => [rotateCol, -a[0] + rotateRow]) } function arraysEqual(a, b) { return a.length === b.length && a.every(function (element, index) { return element === b[index] }) } document.addEventListener("keydown", function (event) { key = event.key; if (event.key === "ArrowLeft" || event.key === 37) key = 37; if (event.key === "ArrowRight" || event.key === 39) key = 39; if (event.key === "ArrowUp" || event.key === 38) key = 38; if (event.key === "ArrowDown" || event.key === 40) key = 40; if (event.key === "space" || event.key === 32) key = 32; if (event.key !== 39 && event.key !== 37) update(); }); let paused = false; let key; function pause() { paused = !paused; } function restart() { score = 0; level = 1; clearedLines = 0; currentPiece = null; currentX = Math.floor(canvas.width / 2) + 2; currentY = 0; grid = Array(20).fill(0).map(() => Array(10).fill(0)); nextPiece = Math.floor(Math.random() * tetrominoes.length); } function randomSeed() { return Math.floor(Math.random() * tetrominoes.length); } currentPiece = nextPiece; update();