Changed around line 1
+ const grid = document.querySelector('.grid');
+ const display = document.querySelector('.display');
+ const nextPieceDisplay = document.querySelector('.next-piece');
+ const scoreDisplay = document.querySelector('.score');
+ const levelDisplay = document.querySelector('.level');
+ const startButton = document.querySelector('.start-button');
+
+ const width = 10;
+ let squares = Array.from(grid.querySelectorAll('div'));
+ let nextSquares = Array.from(nextPieceDisplay.querySelectorAll('div'));
+ let currentPosition = 4;
+ let currentRotation = 0;
+ let timerId;
+ let score = 0;
+ let level = 1;
+ let isGameOver = false;
+
+ const colors = [
+ '#00bcd4', // I
+ '#ffeb3b', // O
+ '#9c27b0', // T
+ '#2196f3', // J
+ '#f44336', // L
+ '#4caf50', // S
+ '#ff9800' // Z
+ ];
+
+ const lTetromino = [
+ [1, width+1, width*2+1, 2],
+ [width, width+1, width+2, width*2+2],
+ [1, width+1, width*2+1, width*2],
+ [width, width*2, width*2+1, width*2+2]
+ ];
+
+ // Add other tetrominoes here...
+
+ function draw() {
+ current.forEach(index => {
+ squares[currentPosition + index].style.backgroundColor = colors[random];
+ });
+ }
+
+ function undraw() {
+ current.forEach(index => {
+ squares[currentPosition + index].style.backgroundColor = '';
+ });
+ }
+
+ function control(e) {
+ if(e.keyCode === 37) {
+ moveLeft();
+ } else if(e.keyCode === 38) {
+ rotate();
+ } else if(e.keyCode === 39) {
+ moveRight();
+ } else if(e.keyCode === 40) {
+ moveDown();
+ }
+ }
+
+ function moveDown() {
+ undraw();
+ currentPosition += width;
+ draw();
+ freeze();
+ }
+
+ function freeze() {
+ if(current.some(index => squares[currentPosition + index + width].classList.contains('taken'))) {
+ current.forEach(index => squares[currentPosition + index].classList.add('taken'));
+ // Start a new tetromino falling
+ random = nextRandom;
+ nextRandom = Math.floor(Math.random() * theTetrominoes.length);
+ current = theTetrominoes[random][currentRotation];
+ currentPosition = 4;
+ draw();
+ displayShape();
+ addScore();
+ gameOver();
+ }
+ }
+
+ function moveLeft() {
+ undraw();
+ const isAtLeftEdge = current.some(index => (currentPosition + index) % width === 0);
+
+ if(!isAtLeftEdge) currentPosition -= 1;
+
+ if(current.some(index => squares[currentPosition + index].classList.contains('taken'))) {
+ currentPosition += 1;
+ }
+
+ draw();
+ }
+
+ function moveRight() {
+ undraw();
+ const isAtRightEdge = current.some(index => (currentPosition + index) % width === width - 1);
+
+ if(!isAtRightEdge) currentPosition += 1;
+
+ if(current.some(index => squares[currentPosition + index].classList.contains('taken'))) {
+ currentPosition -= 1;
+ }
+
+ draw();
+ }
+
+ function rotate() {
+ undraw();
+ currentRotation++;
+ if(currentRotation === current.length) {
+ currentRotation = 0;
+ }
+ current = theTetrominoes[random][currentRotation];
+ draw();
+ }
+
+ function displayShape() {
+ // Clear next display
+ nextSquares.forEach(square => {
+ square.style.backgroundColor = '';
+ square.classList.remove('taken');
+ });
+
+ // Draw next shape
+ next.forEach(index => {
+ nextSquares[currentPosition + index].style.backgroundColor = colors[nextRandom];
+ });
+ }
+
+ function addScore() {
+ for(let i = 0; i < 199; i += width) {
+ const row = [i, i+1, i+2, i+3, i+4, i+5, i+6, i+7, i+8, i+9];
+
+ if(row.every(index => squares[index].classList.contains('taken'))) {
+ score += 10;
+ scoreDisplay.innerHTML = score;
+ row.forEach(index => {
+ squares[index].classList.remove('taken');
+ squares[index].style.backgroundColor = '';
+ });
+ const squaresRemoved = squares.splice(i, width);
+ squares = squaresRemoved.concat(squares);
+ squares.forEach(cell => grid.appendChild(cell));
+ }
+ }
+ }
+
+ function gameOver() {
+ if(current.some(index => squares[currentPosition + index].classList.contains('taken'))) {
+ scoreDisplay.innerHTML = 'end';
+ clearInterval(timerId);
+ isGameOver = true;
+ }
+ }
+
+ startButton.addEventListener('click', () => {
+ if(isGameOver) {
+ // Reset game
+ squares.forEach(square => {
+ square.classList.remove('taken');
+ square.style.backgroundColor = '';
+ });
+ score = 0;
+ scoreDisplay.innerHTML = score;
+ level = 1;
+ levelDisplay.innerHTML = level;
+ isGameOver = false;
+ }
+
+ if(timerId) {
+ clearInterval(timerId);
+ timerId = null;
+ } else {
+ draw();
+ timerId = setInterval(moveDown, 1000);
+ nextRandom = Math.floor(Math.random() * theTetrominoes.length);
+ displayShape();
+ }
+ });
+
+ document.addEventListener('keydown', control);