Model1 / script.js
mkknight970's picture
Upload 4 files
2d276da verified
const gameBoard = document.querySelector(".game-board");
const scoreDisplay = document.querySelector("#score");
let board = [];
let score = 0;
function initBoard() {
board = [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
];
addTile();
addTile();
renderBoard();
}
function addTile() {
let emptyTiles = [];
for (let i = 0; i < 4; i++) {
for (let j = 0; j < 4; j++) {
if (board[i][j] === 0) {
emptyTiles.push({ row: i, col: j });
}
}
}
if (emptyTiles.length > 0) {
let randomTile = emptyTiles[Math.floor(Math.random() * emptyTiles.length)];
board[randomTile.row][randomTile.col] = Math.random() < 0.9 ? 2 : 4;
}
}
function renderBoard() {
gameBoard.innerHTML = "";
for (let i = 0; i < 4; i++) {
for (let j = 0; j < 4; j++) {
const tileValue = board[i][j];
const tile = document.createElement("div");
tile.classList.add("tile");
if (tileValue > 0) {
tile.classList.add(`tile-${tileValue}`);
tile.textContent = tileValue;
}
gameBoard.appendChild(tile);
}
}
scoreDisplay.textContent = score;
}
function moveTiles(direction) {
let moved = false;
if (direction === "ArrowUp") {
for (let j = 0; j < 4; j++) {
for (let i = 1; i < 4; i++) {
if (board[i][j] !== 0) {
let k = i;
while (k > 0 && board[k - 1][j] === 0) {
board[k - 1][j] = board[k][j];
board[k][j] = 0;
k--;
moved = true;
}
if (k > 0 && board[k - 1][j] === board[k][j]) {
board[k - 1][j] *= 2;
score += board[k - 1][j];
board[k][j] = 0;
moved = true;
}
}
}
}
} else if (direction === "ArrowDown") {
for (let j = 0; j < 4; j++) {
for (let i = 2; i >= 0; i--) {
if (board[i][j] !== 0) {
let k = i;
while (k < 3 && board[k + 1][j] === 0) {
board[k + 1][j] = board[k][j];
board[k][j] = 0;
k++;
moved = true;
}
if (k < 3 && board[k + 1][j] === board[k][j]) {
board[k + 1][j] *= 2;
score += board[k + 1][j];
board[k][j] = 0;
moved = true;
}
}
}
}
} else if (direction === "ArrowLeft") {
for (let i = 0; i < 4; i++) {
for (let j = 1; j < 4; j++) {
if (board[i][j] !== 0) {
let k = j;
while (k > 0 && board[i][k - 1] === 0) {
board[i][k - 1] = board[i][k];
board[i][k] = 0;
k--;
moved = true;
}
if (k > 0 && board[i][k - 1] === board[i][k]) {
board[i][k - 1] *= 2;
score += board[i][k - 1];
board[i][k] = 0;
moved = true;
}
}
}
}
} else if (direction === "ArrowRight") {
for (let i = 0; i < 4; i++) {
for (let j = 2; j >= 0; j--) {
if (board[i][j] !== 0) {
let k = j;
while (k < 3 && board[i][k + 1] === 0) {
board[i][k + 1] = board[i][k];
board[i][k] = 0;
k++;
moved = true;
}
if (k < 3 && board[i][k + 1] === board[i][k]) {
board[i][k + 1] *= 2;
score += board[i][k + 1];
board[i][k] = 0;
moved = true;
}
}
}
}
}
if (moved) {
addTile();
renderBoard();
}
}
document.addEventListener("keydown", (event) => {
moveTiles(event.key);
});
initBoard();