var board; var score = 0; var rows = 4; var columns = 4; window.onload = function() { setGame(); } function setGame() { board = [ [0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0], ]; /*board = [ [2,2,2,2], [2,2,2,2], [4,4,8,8], [4,4,8,8], ];*/ for(let r=0;r0) { tile.innerText=num.toString(); if(num<=4096) { tile.classList.add("x"+num.toString()); }else{ tile.classList.add("x8192"); } } } function filterZero(row){ return row.filter(num => num != 0); //cteare a new array without 0 } function slide(row) { //[0, 2, 2, 2] row = filterZero(row); //[2, 2, 2] for (let i = 0; i < row.length-1; i++){ if (row[i] == row[i+1]) { row[i] *= 2; row[i+1] = 0; score += row[i]; } } //[4, 0, 2] row = filterZero(row); //[4, 2] //add zeroes while (row.length < columns) { row.push(0); } //[4, 2, 0, 0] return row; } document.addEventListener('keyup', (e) => { switch (e.code) { case "ArrowLeft": slideLeft(); setTwo(); break; case "ArrowRight": slideRight(); setTwo(); break; case "ArrowUp": slideUp(); setTwo(); break; case "ArrowDown": slideDown(); setTwo(); break; } document.getElementById("score").innerText = score; }); function slideLeft() { for (let r = 0; r < rows; r++) { let row = board[r]; row = slide(row); board[r] = row; for (let c = 0; c < columns; c++){ let tile = document.getElementById(r.toString() + "-" + c.toString()); let num = board[r][c]; updateTile(tile, num); } } } function slideRight() { for (let r = 0; r < rows; r++) { let row = board[r]; //[0, 2, 2, 2] row.reverse(); //[2, 2, 2, 0] row = slide(row) //[4, 2, 0, 0] board[r] = row.reverse(); //[0, 0, 2, 4]; for (let c = 0; c < columns; c++){ let tile = document.getElementById(r.toString() + "-" + c.toString()); let num = board[r][c]; updateTile(tile, num); } } } function slideUp() { for (let c = 0; c < columns; c++) { let row = [board[0][c], board[1][c], board[2][c], board[3][c]]; row = slide(row); // board[0][c] = row[0]; // board[1][c] = row[1]; // board[2][c] = row[2]; // board[3][c] = row[3]; for (let r = 0; r < rows; r++){ board[r][c] = row[r]; let tile = document.getElementById(r.toString() + "-" + c.toString()); let num = board[r][c]; updateTile(tile, num); } } } function slideDown() { for (let c = 0; c < columns; c++) { let row = [board[0][c], board[1][c], board[2][c], board[3][c]]; row.reverse(); row = slide(row); row.reverse(); // board[0][c] = row[0]; // board[1][c] = row[1]; // board[2][c] = row[2]; // board[3][c] = row[3]; for (let r = 0; r < rows; r++){ board[r][c] = row[r]; let tile = document.getElementById(r.toString() + "-" + c.toString()); let num = board[r][c]; updateTile(tile, num); } } } function setTwo() { if (!hasEmptyTile()) { return; } let found = false; while (!found) { //find random row and column to place a 2 in let r = Math.floor(Math.random() * rows); let c = Math.floor(Math.random() * columns); if (board[r][c] == 0) { board[r][c] = 2; let tile = document.getElementById(r.toString() + "-" + c.toString()); tile.innerText = "2"; tile.classList.add("x2"); tile.classList.add("new-tile"); found = true; } } } function hasEmptyTile() { let count = 0; for (let r = 0; r < rows; r++) { for (let c = 0; c < columns; c++) { if (board[r][c] == 0) { //at least one zero in the board return true; } } } return false; } function left(){ slideLeft(); setTwo(); document.getElementById("score").innerText = score; } function up(){ slideUp(); setTwo(); document.getElementById("score").innerText = score; } function down(){ slideDown(); setTwo(); document.getElementById("score").innerText = score; } function right(){ slideRight(); setTwo(); document.getElementById("score").innerText = score; }