创建JavaScript贪吃蛇游戏

2025-03-29T12:37:13+08:00 | 3分钟阅读 | 更新于 2025-03-29T12:37:13+08:00

Macro Zhao

创建JavaScript贪吃蛇游戏

推荐超级课程:

@TOC

创建一个JavaScript贪吃蛇游戏是一个既有趣又有益的项目,适合初学者和有经验的开发者。贪吃蛇游戏是一个经典而简单的概念,是练习JavaScript技能的绝佳项目。在本文中,我们将逐步介绍如何使用JavaScript创建一个基本的贪吃蛇游戏。最后,您将拥有一个完全可以在浏览器中运行的贪吃蛇游戏。

1. 设置环境

首先,您需要一个基本的HTML文件来编写JavaScript代码。创建一个index.html文件并设置基本结构:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript贪吃蛇游戏</title>
    <style>
        body { display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; }
        canvas { border: 1px solid black; }
    </style>
</head>
<body>
    <canvas id="gameCanvas" width="400" height="400"></canvas>
    <script src="snake.js"></script>
</body>
</html>

2. 创建游戏板

接下来,创建一个snake.js文件,并开始选择画布元素并设置绘图上下文:

const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
const gridSize = 20; // 每个网格单元格的大小
const rows = canvas.height / gridSize;
const cols = canvas.width / gridSize;

3. 实现贪吃蛇

定义贪吃蛇的初始状态和绘制它的函数:

let snake = [
    { x: 10, y: 10 },
    { x: 9, y: 10 },
    { x: 8, y: 10 }
];
let direction = { x: 1, y: 0 };

function drawSnake() {
    ctx.fillStyle = 'green';
    snake.forEach(segment => {
        ctx.fillRect(segment.x * gridSize, segment.y * gridSize, gridSize, gridSize);
    });
}

function moveSnake() {
    const head = { x: snake[0].x + direction.x, y: snake[0].y + direction.y };
    snake.unshift(head);
    snake.pop();
}

4. 添加食物

添加功能以在游戏板上随机放置食物并绘制它:

let food = { x: 15, y: 15 };

function drawFood() {
    ctx.fillStyle = 'red';
    ctx.fillRect(food.x * gridSize, food.y * gridSize, gridSize, gridSize);
}

function randomFoodPosition() {
    return {
        x: Math.floor(Math.random() * cols),
        y: Math.floor(Math.random() * rows)
    };
}

function checkFoodCollision() {
    if (snake[0].x === food.x && snake[0].y === food.y) {
        food = randomFoodPosition();
        snake.push({}); // 向贪吃蛇添加一个新的片段
    }
}

5. 处理用户输入

实现函数以处理箭头键输入以控制贪吃蛇的移动:

document.addEventListener('keydown', event => {
    switch(event.key) {
        case 'ArrowUp':
            if (direction.y === 0) direction = { x: 0, y: -1 };
            break;
        case 'ArrowDown':
            if (direction.y === 0) direction = { x: 0, y: 1 };
            break;
        case 'ArrowLeft':
            if (direction.x === 0) direction = { x: -1, y: 0 };
            break;
        case 'ArrowRight':
            if (direction.x === 0) direction = { x: 1, y: 0 };
            break;
    }
});

6. 更新游戏状态

创建一个函数来更新游戏状态并检查碰撞:

function gameLoop() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    moveSnake();
    checkFoodCollision();
    drawFood();
    drawSnake();
    if (checkCollision()) {
        alert("游戏结束!");
        document.location.reload();
    } else {
        setTimeout(gameLoop, 100);
    }
}

function checkCollision() {
    for (let i = 1; i < snake.length; i++) {
        if (snake[i].x === snake[0].x && snake[i].y === snake[0].y) {
            return true# 分数 { 字体大小: 20px; 下边距: 10px; }
</风格>
</头>
<身体>
    <div id="分数">分数: 0</div>
    <画布 id="游戏画布" 宽度="400" 高度="400"></画布>
    <脚本 src="snake.js"></脚本>
</身体>
</html>

8. 运行游戏

最后,启动游戏循环:

gameLoop();

9. 结论

恭喜您!您已经创建了一个基本的JavaScript贪吃蛇游戏。这个项目涵盖了处理用户输入、更新游戏状态和在画布上绘图等基本编程概念。有很多方法可以扩展和改进这个游戏,比如添加不同级别、实现更好的图形或优化游戏逻辑。享受编码和游戏乐趣吧!

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee