一、引言
在如今的數字化時代,小游戲以其簡單易上手、趣味性強的特點深受大家喜愛。2048 游戲作為一款經典的數字合并游戲,擁有龐大的玩家群體。本文將詳細介紹一個用單文件 HTML 實現的可愛風格 2048 游戲項目,它不僅具備傳統 2048 游戲的基本功能,還在界面設計和視覺效果上進行了優化,讓玩家在游戲過程中感受到可愛與樂趣。
二、項目概述
這個 2048 游戲項目采用單文件 HTML 編寫,融合了 HTML、CSS 和 JavaScript 三種技術。界面設計采用響應式布局,確保在不同設備上都能完美展示。游戲中使用了一系列可愛的圖片替代傳統的數字,為游戲增添了更多的趣味性。主要模塊包括標題、最高分 / 得分顯示、游戲卡片區域以及游戲規則說明。
三、功能實現
3.1 界面設計
3.1.1 整體布局
使用 HTML 和 CSS 構建了游戲的整體布局。通過?flexbox
?和?grid
?布局實現了響應式設計,使得游戲界面在不同尺寸的屏幕上都能自適應。頁面背景顏色設置為?#faf8ef
,營造出溫馨可愛的氛圍。
html
<body><div id="header"><h1>可愛 2048 游戲</h1><div id="score-board"><div id="score">得分: 0</div><div id="high-score">最高分: 0</div></div></div><div id="game-board"></div><div id="game-rules"><p>游戲規則:使用鍵盤方向鍵(上、下、左、右)控制卡片移動,相同的卡片會合并成一個數值更大的卡片,目標是合并出數值為 2048 的卡片。</p></div><div id="win-modal"><div id="win-modal-content"><p>恭喜你已經合并了一只宇宙無敵最可愛的貓咪</p><button onclick="closeWinModal()">確認</button></div></div>
</body>
3.1.2 樣式設計
標題文字顏色和游戲規則的顏色都設置為?#776e65
,游戲規則的字號為 14px,使界面看起來更加協調。標題與最高分、得分排在一行,標題左對齊,高分、得分右對齊,增強了界面的美觀性。
css
body {background-color: #faf8ef;font-family: Arial, sans-serif;display: flex;flex-direction: column;align-items: center;justify-content: center;min-height: 100vh;margin: 0;
}#header {display: flex;justify-content: space-between;align-items: center;width: 90%;max-width: 500px;color: #776e65;
}h1 {margin: 0;
}#score-board {display: flex;gap: 10px;
}#score,
#high-score {background-color: #bbada0;color: white;padding: 5px 10px;border-radius: 5px;
}#game-board {display: grid;grid-template-columns: repeat(4, 1fr);grid-template-rows: repeat(4, 1fr);gap: 10px;background-color: #bbada0;padding: 10px;border-radius: 5px;width: 90%;max-width: 500px;margin: 20px 0;
}.cell {background-color: rgba(238, 228, 218, 0.35);border-radius: 5px;aspect-ratio: 1/1;
}.tile {width: 100%;height: 100%;background-size: cover;border-radius: 5px;
}#game-rules {text-align: left;color: #776e65;width: 90%;max-width: 500px;font-size: 14px;
}#win-modal {display: none;position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.5);align-items: center;justify-content: center;
}#win-modal-content {background-color: white;padding: 20px;border-radius: 5px;text-align: center;
}
3.2 游戲邏輯
3.2.1 圖片映射
使用 JavaScript 定義了圖片與數字的映射關系,將圖片鏈接存儲在?images
?對象中,以便在游戲中根據數字顯示相應的圖片。
javascript
const images = {2: 'https://p9-flow-imagex-sign.byteimg.com/ocean-cloud-tos/image_generation/df099f209335f8b25e1d4ab9ce2867ff_1741677321668230149.png~tplv-a9rns2rl98-image.png?rk3s=25bff839&x-expires=1773213321&x-signature=reNM%2F907NNX7Rc%2BE4FflYbWaRKo%3D',4: 'https://p9-flow-imagex-sign.byteimg.com/ocean-cloud-tos/image_generation/322b9826909d14458d22e0931fd06aac_1741677330491084517.png~tplv-a9rns2rl98-image.png?rk3s=25bff839&x-expires=1773213330&x-signature=a1ptVuhTOwjrpRZSdnL%2FUKYV9MY%3D',8: 'https://p3-flow-imagex-sign.byteimg.com/ocean-cloud-tos/image_generation/1a563d103b7496a5b9eb365ff9ea58bd_1741677409407029394.png~tplv-a9rns2rl98-image.png?rk3s=25bff839&x-expires=1773213409&x-signature=L0drmZ0N1Z2%2BjUD9g9gcP0Nn7TM%3D',// 其他數字對應的圖片鏈接...
};
3.2.2 棋盤初始化
初始化棋盤數組?board
,并調用?addRandomTile()
?函數在棋盤上隨機生成兩個初始卡片。
javascript
let board = [[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]
];addRandomTile();
addRandomTile();
createBoard();
3.2.3 卡片移動和合并
實現了?moveLeft()
、moveRight()
、moveUp()
?和?moveDown()
?四個函數,用于處理鍵盤方向鍵事件,控制卡片的移動和合并。在移動過程中,調用?mergeTiles()
?函數合并相鄰且數值相同的卡片。
javascript
function moveLeft() {let moved = false;for (let i = 0; i < 4; i++) {const oldRow = [...board[i]];board[i] = mergeTiles(board[i]);if (oldRow.join(',')!== board[i].join(',')) {moved = true;}}if (moved) {addRandomTile();}updateScore();createBoard();
}function mergeTiles(row) {let newRow = row.filter(tile => tile!== 0);for (let i = 0; i < newRow.length - 1; i++) {if (newRow[i] === newRow[i + 1]) {newRow[i] *= 2;score += newRow[i];if (newRow[i] === 2048) {showWinModal();}newRow[i + 1] = 0;}}newRow = newRow.filter(tile => tile!== 0);while (newRow.length < 4) {newRow.push(0);}return newRow;
}
3.2.4 得分和勝利提示
使用?score
?變量記錄當前得分,highScore
?變量記錄最高分,并將最高分存儲在瀏覽器的本地存儲中。當合并出 2048 時,調用?showWinModal()
?函數顯示勝利提示模態框。
javascript
function showWinModal() {winModal.style.display = 'flex';
}function closeWinModal() {winModal.style.display = 'none';
}function updateScore() {if (score > highScore) {highScore = score;highScoreElement.textContent = `最高分: ${highScore}`;localStorage.setItem('highScore', highScore);}scoreElement.textContent = `得分: ${score}`;
}
四、項目運行
將上述代碼保存為一個 HTML 文件,然后在瀏覽器中打開該文件,即可開始玩這個可愛風格的 2048 游戲。使用鍵盤方向鍵(上、下、左、右)控制卡片移動,嘗試合并出 2048,挑戰自己的最高分。
五、總結
通過這個項目,我們學習了如何使用 HTML、CSS 和 JavaScript 實現一個簡單而有趣的 2048 游戲。從界面設計到游戲邏輯的實現,每個步驟都展示了前端開發的基本技巧和方法。同時,項目中使用的響應式布局和圖片替代數字的設計,也為游戲增添了更多的趣味性和吸引力。希望這個項目能為你帶來啟發,讓你在前端開發的道路上不斷探索和進步。
以上就是關于這個可愛風格 2048 游戲項目的詳細介紹,你可以根據自己的需求對代碼進行修改和擴展,開發出更加個性化的游戲。