From 27349a67abf45e4734b0194e3b42df0c158ca612 Mon Sep 17 00:00:00 2001 From: Shubham Kumar <117706655+Shubham-kumar-iem@users.noreply.github.com> Date: Sat, 21 Oct 2023 13:49:51 +0530 Subject: [PATCH] Create script.js 2048 game js code --- script.js | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 script.js diff --git a/script.js b/script.js new file mode 100644 index 00000000..00216bf5 --- /dev/null +++ b/script.js @@ -0,0 +1,172 @@ +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]] + + for (let r = 0; r < rows; r++) { + for (let c = 0; c < columns; c++) { + let tile = document.createElement("div"); + tile.id = r.toString() + "-" + c.toString(); + let num = board[r][c]; + updateTile(tile, num); + document.getElementById("board").append(tile); + } + } + //create 2 to begin the game + setTwo(); + setTwo(); + +} + +function updateTile(tile, num) { + tile.innerText = ""; + tile.classList.value = ""; //clear the classList + tile.classList.add("tile"); + if (num > 0) { + tile.innerText = num.toString(); + if (num <= 4096) { + tile.classList.add("x"+num.toString()); + } else { + tile.classList.add("x8192"); + } + } +} + +document.addEventListener('keyup', (e) => { + if (e.code == "ArrowLeft") { + slideLeft(); + setTwo(); + } + else if (e.code == "ArrowRight") { + slideRight(); + setTwo(); + } + else if (e.code == "ArrowUp") { + slideUp(); + setTwo(); + + } + else if (e.code == "ArrowDown") { + slideDown(); + setTwo(); + } + document.getElementById("score").innerText = score; +}) + +function filterZero(row){ + return row.filter(num => num != 0); //create new array of all nums != 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; +} + +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); + 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(); + 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"); + 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; +}