目錄
游戲簡介
游戲功能與特點
如何玩轉貪吃蛇
游戲設計與實現
HTML結構
JavaScript核心實現
代碼結構:
效果
關于“其他游戲”
游戲簡介
貪吃蛇是一款經典的單人小游戲,玩家通過控制蛇的移動,吃掉食物來增加長度,避免撞到墻壁或自身,挑戰最高分數。本文將詳細介紹該貪吃蛇小游戲的功能、玩法以及代碼實現。
游戲功能與特點
- 動態網格系統:根據選中的模式調整網格大小和游戲區域。
- 可選模式:提供20x20、30x30、40x40、50x50四種網格模式,適應不同難度需求。
- 難度調節:支持六檔難度,從0.5秒到0.05秒不等,速度快則難度高。
- score計分系統:吃掉食物得10分,實時顯示當前得分。
- 游戲重啟:游戲結束后顯示最終分數,玩家可重新開始挑戰。
如何玩轉貪吃蛇
-
游戲目標
控制蛇向食物(紅方塊)移動,每次吃掉食物蛇會變長,得分增加,避免碰到邊界或自己。 -
基本操作
- 方向控制:上下左右箭頭鍵或W、A、S、D鍵。
- 開始游戲:點擊“開始游戲”按鈕啟動。
-
注意事項
- 避免讓蛇頭撞到墻壁。
- 確保蛇不與自身碰撞。
游戲設計與實現
HTML結構
<!DOCTYPE html>
<html lang="zh-CN">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>貪吃蛇</title> <link rel="stylesheet" href="css/greedy_snake.css">
</head>
<body> <!-- 導航、游戲容器等DOM元素 --> <script src="js/greedy_snake.js"></script>
</body>
</html>
JavaScript核心實現
-
參數初始化
let gridSize = 20; // 網格大小 let snake = []; // 蛇的身體數組 let food = {}; // 食物位置 let dx = 0; // 橫向移動單位 let dy = 0; // 縱向移動單位 let score = 0; // 當前分數 let gameSpeed = 1000; // 默認移動速度 let isGameRunning = false; // 游戲運行狀態
-
主要函數
initGame():初始化游戲參數、蛇的起始位置和食物。 draw():繪制游戲界面,包括食物和蛇的各個段。 update():更新蛇的位置,檢查是否吃到食物或發生碰撞。 gameLoop():游戲主循環,控制繪制和更新的頻率。 generateFood():隨機生成食物,確保不在蛇身上。 isCollision():檢查蛇頭是否碰到邊界或自身。
-
事件監聽
document.addEventListener('keydown', (event) => { // 根據鍵盤輸入調整蛇的方向 const key = event.key.toLowerCase(); switch (key) { case 'arrowup': case 'w': if (dy !== 1) { dx = 0; dy = -1; } break; // 其他方向類似處理 }
});
代碼結構:
greedy_snake.html:
<!DOCTYPE html>
<html lang="zh-CN">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>貪吃蛇</title> <link rel="stylesheet" href="css/greedy_snake.css">
</head>
<body> <nav class="navbar"> <ul> <li><a href="/index.html">首頁</a></li> <li><a href="/greedy_snake.html">貪吃蛇</a></li> <li><a href="/other.html">其他游戲</a></li> </ul> </nav> <div class="game-container"> <div class="settings"> <div class="select-mode"> <label for="mode">模式:</label> <select id="mode"> <option value="20">20x20</option> <option value="30" selected>30x30</option> <option value="40">40x40</option> <option value="50">50x50</option> </select> </div> <div class="select-difficulty"> <label for="difficulty">難度:</label> <select id="difficulty"> <!-- 默認為0.6秒/次 --><option value="1">1(0.5秒/次)</option> <option value="2">2(0.4秒/次)</option> <option value="3" selected>3(0.3秒/次)</option> <option value="4">4(0.2秒/次)</option> <option value="5">5(0.1秒/次)</option> <option value="6">6(0.0.5秒/次)</option> </select> </div> <button id="generate">開始游戲</button> </div> <div id="result" class="result"></div> <canvas id="gameCanvas" class="game-canvas"></canvas> </div> <script src="js/greedy_snake.js"></script>
</body>
</html>
greedy_sanke.js:
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d'); // 設置Canvas大小
canvas.width = 800;
canvas.height = 400; // 游戲參數
let gridSize = 20; // 網格大小
let snake = []; // 蛇的身體數組
let food = {}; // 食物位置
let dx = 0; // 橫向移動單位
let dy = 0; // 縱向移動單位
let score = 0; // 當前分數
let gameSpeed = 1000; // 默認移動速度
let isGameRunning = false; // 游戲運行狀態 // 初始化游戲
function initGame() {
} // 初始化蛇的位置
function initSnake() {
} // 生成食物
function generateFood() {
} // 繪制游戲界面
function draw() {
} // 更新蛇的位置
function update() {
} // 檢查碰撞
function isCollision() {
} // 游戲主循環
function gameLoop() {
} // 開始游戲
function startGame() {
} // 游戲結束
function gameOver() {
} // 監聽鍵盤事件
document.addEventListener('keydown', (event) => {
}); // 初始化游戲
initGame();
draw(); // 監聽開始按鈕點擊事件
document.getElementById('generate').addEventListener('click', startGame);
greedy_snake.css:
body {font-family: Arial, sans-serif;background-color: #f2f2f2;margin: 0;padding: 0;
}.navbar {background-color: #4CAF50; /* 導航欄背景色 */overflow: hidden;
}.navbar ul {list-style-type: none; /* 去掉默認的列表樣式 */padding: 0;margin: 0;display: flex; /* 使用 Flexbox 布局 */justify-content: center; /* 居中對齊 */
}.navbar li {float: left;
}.navbar li a {display: block;color: white; /* 鏈接顏色 */text-align: center; padding: 14px 20px; /* 內邊距 */text-decoration: none; /* 去掉下劃線 */
}.navbar li a:hover {background-color: #3e8e41; /* 懸停效果 */
}.game-container {max-width: 80%;max-height: 80%;margin: 20px auto;text-align: center;overflow: auto;background-color: #fff; /* 游戲容器背景色 */border-radius: 10px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);padding: 20px; /* 內邊距 */
}.game-canvas { max-width: 80%; height: 600px;max-height: 80%; border: 2px solid #333; background-color: #fff;
} .settings {margin: 20px;
}.select-mode, .select-difficulty {margin: 10px 0;
}.select-mode, .select-difficulty { margin-bottom: 10px; padding: 5px; display: inline-block;
} .select-mode label, .select-difficulty label { display: inline-block; width: 50px;
} select { padding: 5px; border: 1px solid #ccc; border-radius: 4px;
} button { padding: 8px 16px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer;
} button:hover { background-color: #45a049;
} /* 自定義滾動條樣式 */
::-webkit-scrollbar {width: 8px;height: 8px;
}::-webkit-scrollbar-track {background: #f1f1f1;
}::-webkit-scrollbar-thumb {background: #888;border-radius: 4px;
}::-webkit-scrollbar-thumb:hover {background: #555;
}
效果
關于“其他游戲”
通過iframe展示的3個鏈接的小游戲,點擊選中的小游戲,游戲區域會自動展示該游戲界面.