这个教程将教会您如何从零开始制作一款网页版小游戏,小学生都能轻易上手,您可以带孩子一起设计制作,让他从玩游戏转变成一个开发者的思路,不比单纯玩游戏更有启发吗?
第一步:准备工作
第一,你只需要一个简单的文本编辑器(列如Windows自带的记事本,或者更好的VS Code)和一个现代浏览器(如Chrome、Edge等)。不需要安装任何复杂的软件!
第二步:创建基础HTML文件
打开你的文本编辑器,新建一个文件,将以下代码复制进去:
“`html
<!DOCTYPE html>
<html>
<head>
<title>我的第一个贪吃蛇游戏</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
font-family: Arial, sans-serif;
}
#gameContainer {
text-align: center;
}
#gameBoard {
border: 3px solid #333;
background-color: #000;
}
#scoreText {
font-size: 24px;
margin-bottom: 10px;
color: #333;
}
#resetBtn {
font-size: 18px;
padding: 8px 16px;
margin-top: 10px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
</style>
</head>
<body>
<div id=”gameContainer”>
<div id=”scoreText”>得分: 0</div>
<canvas id=”gameBoard” width=”400″ height=”400″></canvas>
<br>
<button id=”resetBtn”>重新开始</button>
</div>
<script>
// 游戏代码将在这里编写
</script>
</body>
</html>
“`
将这个文件保存为 snake-game.html。目前用浏览器打开这个文件,你会看到一个黑色的游戏区域和基本界面。
第三步:理解游戏基础概念
在开始编写游戏逻辑前,先了解贪吃蛇的几个核心概念:
· 游戏区域:蛇移动的场地
· 蛇身:由多个方块组成的移动物体
· 食物:蛇需要吃到的目标
· 得分:每吃一个食物增加的分数
第四步:编写游戏逻辑
目前我们来编写JavaScript代码。找到HTML文件中的 <script> 标签,在里面添加以下代码:
“`javascript
// 获取游戏元素
const gameBoard = document.getElementById(“gameBoard”);
const ctx = gameBoard.getContext(“2d”);
const scoreText = document.getElementById(“scoreText”);
const resetBtn = document.getElementById(“resetBtn”);
// 游戏变量
const unitSize = 20; // 每个格子的大小
let running = false;
let xVelocity = unitSize; // x方向速度
let yVelocity = 0; // y方向速度
let foodX;
let foodY;
let score = 0;
// 蛇的初始位置(身体各部分坐标)
let snake = [
{x: unitSize * 4, y: 0},
{x: unitSize * 3, y: 0},
{x: unitSize * 2, y: 0},
{x: unitSize, y: 0},
{x: 0, y: 0}
];
// 初始化游戏
window.addEventListener(“keydown”, changeDirection);
resetBtn.addEventListener(“click”, resetGame);
gameStart();
function gameStart() {
running = true;
scoreText.textContent = “得分: 0”;
createFood();
nextTick();
}
function nextTick() {
if(running) {
setTimeout(() => {
clearBoard();
drawFood();
moveSnake();
drawSnake();
checkGameOver();
nextTick();
}, 150); // 控制游戏速度,数字越大速度越慢
}
}
function clearBoard() {
ctx.fillStyle = “black”;
ctx.fillRect(0, 0, gameBoard.width, gameBoard.height);
}
function createFood() {
// 在随机位置生成食物
function randomFood(min, max) {
const randNum = Math.round((Math.random() * (max – min) + min) / unitSize) * unitSize;
return randNum;
}
foodX = randomFood(0, gameBoard.width – unitSize);
foodY = randomFood(0, gameBoard.height – unitSize);
}
function drawFood() {
ctx.fillStyle = “red”;
ctx.fillRect(foodX, foodY, unitSize, unitSize);
}
function moveSnake() {
const head = {x: snake[0].x + xVelocity, y: snake[0].y + yVelocity};
snake.unshift(head); // 在头部添加新的位置
// 如果吃到食物
if(head.x === foodX && head.y === foodY) {
score += 10;
scoreText.textContent = “得分: ” + score;
createFood();
} else {
snake.pop(); // 没吃到食物,移除尾部
}
}
function drawSnake() {
ctx.fillStyle = “lime”;
snake.forEach(snakePart => {
ctx.fillRect(snakePart.x, snakePart.y, unitSize, unitSize);
});
}
function changeDirection(event) {
const keyPressed = event.keyCode;
const LEFT = 37;
const UP = 38;
const RIGHT = 39;
const DOWN = 40;
const goingUp = (yVelocity === -unitSize);
const goingDown = (yVelocity === unitSize);
const goingRight = (xVelocity === unitSize);
const goingLeft = (xVelocity === -unitSize);
switch(true) {
case(keyPressed === LEFT && !goingRight):
xVelocity = -unitSize;
yVelocity = 0;
break;
case(keyPressed === UP && !goingDown):
xVelocity = 0;
yVelocity = -unitSize;
break;
case(keyPressed === RIGHT && !goingLeft):
xVelocity = unitSize;
yVelocity = 0;
break;
case(keyPressed === DOWN && !goingUp):
xVelocity = 0;
yVelocity = unitSize;
break;
}
}
function checkGameOver() {
switch(true) {
// 撞墙检测
case(snake[0].x < 0):
case(snake[0].x >= gameBoard.width):
case(snake[0].y < 0):
case(snake[0].y >= gameBoard.height):
running = false;
break;
// 撞到自己检测
case(snake.slice(1).some(part => part.x === snake[0].x && part.y === snake[0].y)):
running = false;
break;
}
if(!running) {
scoreText.textContent = “游戏结束! 最终得分: ” + score;
}
}
function resetGame() {
score = 0;
xVelocity = unitSize;
yVelocity = 0;
snake = [
{x: unitSize * 4, y: 0},
{x: unitSize * 3, y: 0},
{x: unitSize * 2, y: 0},
{x: unitSize, y: 0},
{x: 0, y: 0}
];
gameStart();
}
“`
第五步:测试游戏
保存文件后,在浏览器中刷新页面。目前你应该可以:
· 使用键盘的 方向键(↑↓←→)控制蛇的移动
· 看到红色的食物和绿色的蛇
· 吃到食物后得分增加,蛇身变长
· 撞墙或撞到自己时游戏结束
· 点击”重新开始”按钮重新游戏

第六步:自定义和优化
目前你的基础游戏已经完成了!你可以尝试修改一些参数来个性化你的游戏:
1. 调整游戏速度:找到 setTimeout 中的 150 这个数字,改小会变快,改大会变慢
2. 改变颜色:修改 drawFood() 和 drawSnake() 中的颜色值
3. 调整游戏区域大小:修改 <canvas> 标签的 width 和 height 属性
遇到问题怎么办?
如果游戏无法运行,可以这样排查:
1. 检查代码是否完全复制正确
2. 确保文件保存为 .html 格式
3. 在浏览器中按 F12 打开开发者工具,查看控制台是否有错误信息
完成这个基础版本后,你可以尝试添加更多功能:
· 添加音效(吃东西的声音、游戏结束的声音)
· 增加障碍物
· 实现关卡系统
· 添加移动端触摸控制
这个教程展示了如何使用DeepSeek协助你理解代码逻辑并实现完整功能。当你想要添加新功能时,可以直接向DeepSeek提问,列如:”如何为我的贪吃蛇游戏添加音效?”或者”怎样让游戏难度随分数增加而提高?”
祝贺你完成了第一个网页游戏!目前你已经有能力在此基础上继续探索和创作了。














暂无评论内容