html代码大全贪吃蛇:HTML贪吃蛇游戏,从零开始的代码实现
在前端开发中,贪吃蛇是一个经典的游戏项目,它不仅能帮助初学者理解HTML和JavaScript的基础知识,还能展示如何通过代码实现一个完整的游戏逻辑,本文将通过一个完整的HTML贪吃蛇游戏代码示例,带您一步步了解如何实现这个经典游戏。

贪吃蛇游戏的核心逻辑
贪吃蛇游戏的核心逻辑包括以下几个部分:

- 蛇的移动:蛇由一系列方块组成,通过键盘控制方向移动。
- 食物生成:随机生成食物,蛇吃到食物后身体变长。
- 碰撞检测:检测蛇是否撞到墙壁或自身。
- 得分系统:每吃一个食物得一分。
完整代码实现
下面是一个完整的贪吃蛇游戏代码,包含HTML、CSS和JavaScript部分:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">贪吃蛇游戏</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
font-family: Arial, sans-serif;
}
canvas {
border: 2px solid #333;
background-color: #fff;
}
.game-container {
text-align: center;
}
.score {
font-size: 24px;
margin-bottom: 10px;
}
button {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 5px;
}
</style>
</head>
<body>
<div class="game-container">
<div class="score">得分: <span id="score">0</span></div>
<canvas id="gameCanvas" width="400" height="400"></canvas>
<br>
<button id="startButton">开始游戏</button>
</div>
<script>
// 获取Canvas元素和上下文
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
const scoreElement = document.getElementById('score');
const startButton = document.getElementById('startButton');
// 游戏参数
const gridSize = 20; // 网格大小
const tileCount = canvas.width / gridSize;
let snake = []; // 蛇的身体
let food = {}; // 食物位置
let dx = gridSize; // 蛇的移动方向(初始向右)
let dy = 0;
let score = 0;
let gameSpeed = 100; // 游戏速度(毫秒)
let gameRunning = false;
let gameLoop;
// 初始化游戏
function initGame() {
// 初始化蛇的位置(居中)
snake = [
{x: 10, y: 10},
{x: 9, y: 10},
{x: 8, y: 10}
];
// 生成食物
generateFood();
// 重置游戏状态
dx = gridSize;
dy = 0;
score = 0;
scoreElement.textContent = score;
gameRunning = true;
}
// 生成食物
function generateFood() {
food = {
x: Math.floor(Math.random() * tileCount),
y: Math.floor(Math.random() * tileCount)
};
// 确保食物不会生成在蛇身上
for (let i = 0; i < snake.length; i++) {
if (snake[i].x === food.x && snake[i].y === food.y) {
return generateFood();
}
}
}
// 绘制游戏
function draw() {
// 清空画布
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, canvas.width, canvas.height);
// 绘制蛇
snake.forEach((segment, index) => {
ctx.fillStyle = index === 0 ? 'green' : 'lightgreen'; // 蛇头绿色,蛇身浅绿色
ctx.fillRect(segment.x * gridSize, segment.y * gridSize, gridSize, gridSize);
});
// 绘制食物
ctx.fillStyle = 'red';
ctx.fillRect(food.x * gridSize, food.y * gridSize, gridSize, gridSize);
}
// 更新游戏状态
function update() {
// 移动蛇
const head = {x: snake[0].x + dx, y: snake[0].y + dy};
snake.unshift(head);
// 检查是否吃到食物
if (head.x === food.x && head.y === food.y) {
score++;
scoreElement.textContent = score;
generateFood();
// 增加游戏速度
if (gameSpeed > 50) {
gameSpeed -= 2;
}
} else {
// 如果没吃到食物,移除尾部
snake.pop();
}
// 检查碰撞
if (checkCollision()) {
gameOver();
}
}
// 检查碰撞
function checkCollision() {
const head = snake[0];
// 检查是否撞墙
if (head.x < 0 || head.x >= tileCount || head.y < 0 || head.y >= tileCount) {
return true;
}
// 检查是否撞到自己
for (let i = 1; i < snake.length; i++) {
if (head.x === snake[i].x && head.y === snake[i].y) {
return true;
}
}
return false;
}
// 游戏结束
function gameOver() {
gameRunning = false;
clearInterval(gameLoop);
ctx.fillStyle = 'black';
ctx.font = '30px Arial';
ctx.fillText('游戏结束!', canvas.width / 2 - 100, canvas.height / 2);
}
// 键盘控制
document.addEventListener('keydown', (e) => {
if (!gameRunning) return;
switch (e.key) {
case 'ArrowUp':
if (dy === 0) { // 防止180度转向
dx = 0;
dy = -gridSize;
}
break;
case 'ArrowDown':
if (dy === 0) {
dx = 0;
dy = gridSize;
}
break;
case 'ArrowLeft':
if (dx === 0) {
dx = -gridSize;
dy = 0;
}
break;
case 'ArrowRight':
if (dx === 0) {
dx = gridSize;
dy = 0;
}
break;
}
});
// 开始游戏按钮
startButton.addEventListener('click', () => {
if (!gameRunning) {
initGame();
draw();
gameLoop = setInterval(() => {
update();
draw();
}, gameSpeed);
}
});
// 初始绘制
draw();
</script>
</body>
</html> 代码解析
HTML结构:包含一个Canvas元素用于绘制游戏,一个显示得分的元素,以及一个开始游戏的按钮。
CSS样式:简单美化了游戏界面,包括Canvas的边框和按钮的样式。
JavaScript逻辑:
initGame(): 初始化游戏,设置蛇的初始位置和食物。generateFood(): 随机生成食物,确保不在蛇身上。draw(): 绘制蛇和食物。update(): 更新游戏状态,包括移动蛇、检查碰撞和吃食物。checkCollision(): 检测蛇是否撞墙或自身。gameOver(): 游戏结束处理。- 键盘事件监听:控制蛇的移动方向。
- 开始游戏按钮:触发游戏循环。
扩展与优化
- 增加难度:可以通过增加蛇的移动速度或减少网格大小来提高难度。
- 添加音效:在吃到食物或游戏结束时播放音效。
- 保存最高分:使用localStorage保存最高分记录。
- 美化界面:使用更精美的图片或动画来增强游戏体验。
通过这个示例,您可以轻松地创建一个基础的贪吃蛇游戏,并根据自己的需求进行扩展和优化,希望这篇文章能帮助您掌握HTML和JavaScript的基础知识,并激发您对前端开发的兴趣!
相关文章:
文章已关闭评论!









