前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >❤️创意网页:贪吃蛇游戏 - 创造一个经典的小游戏

❤️创意网页:贪吃蛇游戏 - 创造一个经典的小游戏

作者头像
命运之光
发布2024-03-20 12:48:57
发布2024-03-20 12:48:57
33410
代码可运行
举报
运行总次数:0
代码可运行

简介

欢迎来到本篇技术博客!今天,我们将一起学习如何使用HTML5 Canvas和JavaScript创造一个经典的小游戏 - 贪吃蛇游戏。我们将会为您提供代码解析以及游戏玩法说明。让我们开始吧!

动态图展示

准备工作

在开始之前,我们需要做一些准备工作:

  1. 确保您有一个支持HTML5的现代web浏览器(如Chrome、Firefox、Safari等)。
  2. 创建一个HTML文件,并复制以下代码作为基础:
代码语言:javascript
代码运行次数:0
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>贪吃蛇游戏</title>
  <style>
    body {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      margin: 0;
    }
    canvas {
      border: 2px solid black;
    }
  </style>
</head>
<body>
  <canvas id="gameCanvas" width="400" height="400"></canvas>
  <script>
    // JavaScript代码将在下面添加
  </script>
</body>
</html>

创造贪吃蛇游戏

我们已经有了一个基本的HTML结构,其中包含一个Canvas元素用于绘制游戏画面。接下来,我们将添加JavaScript代码来创造贪吃蛇游戏。

代码语言:javascript
代码运行次数:0
复制
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');

const boxSize = 20;
const canvasSize = 400;
const snake = [];
let direction = 'right';
let food = {};

function drawSnakePart(x, y) {
  // ... 绘制蛇身体的代码 ...
}

function drawFood(x, y) {
  // ... 绘制食物的代码 ...
}

function generateFood() {
  // ... 生成新食物的代码 ...
}

function checkCollision(x, y, array) {
  // ... 检查碰撞的代码 ...
}

function draw() {
  // ... 游戏循环的代码 ...
}

// 监听方向键事件,控制蛇的移动方向
document.addEventListener('keydown', (event) => {
  // ... 控制方向的代码 ...
});

// 初始化蛇身体,创建三个蛇身体部分
snake.push({ x: boxSize * 2, y: boxSize });
snake.push({ x: boxSize, y: boxSize });
snake.push({ x: 0, y: boxSize });

generateFood();
draw();

在这段代码中,我们定义了一些变量和函数用于创建和控制贪吃蛇游戏。

首先,我们定义了一些常量,包括每个格子的大小boxSize、画布的大小canvasSize、蛇的身体snake、蛇的运动方向direction以及食物的位置food

然后,我们定义了两个绘制函数drawSnakePartdrawFood,用于在画布上绘制蛇的身体和食物。

接着,我们定义了一个generateFood函数,用于在画布上随机生成新的食物。

我们还定义了一个checkCollision函数,用于检查蛇头是否与蛇身体或画布边界发生碰撞。

接下来,我们定义了一个draw函数,用于控制游戏的主循环。在该函数中,我们会根据蛇的运动方向更新蛇的位置,并检查蛇是否吃到了食物或碰到了边界或自身。

最后,我们通过监听方向键事件,来控制蛇的运动方向。初始化时,我们将蛇的身体设置为三个部分,并在画布上生成新的食物。

运行游戏

现在,将上述HTML代码保存为一个HTML文件,并在浏览器中打开它。您将会看到一个黑色边框的画布,即游戏的主界面。使用方向键控制蛇的运动,吃掉食物,并尝试不要碰到画布边界或自身。

完整代码
代码语言:javascript
代码运行次数:0
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>贪吃蛇游戏</title>
  <style>
    body {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      margin: 0;
    }
    canvas {
      border: 2px solid black;
    }
  </style>
</head>
<body>
  <canvas id="gameCanvas" width="400" height="400"></canvas>
  <script>
    const canvas = document.getElementById('gameCanvas');
    const ctx = canvas.getContext('2d');

    const boxSize = 20;
    const canvasSize = 400;
    const snake = [];
    let direction = 'right';
    let food = {};

    function drawSnakePart(x, y) {
      ctx.fillStyle = 'green';
      ctx.fillRect(x, y, boxSize, boxSize);
      ctx.strokeStyle = 'black';
      ctx.strokeRect(x, y, boxSize, boxSize);
    }

    function drawFood(x, y) {
      ctx.fillStyle = 'red';
      ctx.fillRect(x, y, boxSize, boxSize);
      ctx.strokeStyle = 'black';
      ctx.strokeRect(x, y, boxSize, boxSize);
    }

    function generateFood() {
      food = {
        x: Math.floor(Math.random() * (canvasSize / boxSize)) * boxSize,
        y: Math.floor(Math.random() * (canvasSize / boxSize)) * boxSize,
      };
    }

    function checkCollision(x, y, array) {
      // Check if the given position collides with the snake's body
      for (let i = 0; i < array.length; i++) {
        if (x === array[i].x && y === array[i].y) {
          return true;
        }
      }
      return false;
    }

    function draw() {
      ctx.clearRect(0, 0, canvasSize, canvasSize);

      // Update snake position based on direction
      const headX = snake[0].x + (direction === 'right' ? boxSize : direction === 'left' ? -boxSize : 0);
      const headY = snake[0].y + (direction === 'down' ? boxSize : direction === 'up' ? -boxSize : 0);

      // Check if the snake hits the canvas boundaries or collides with its body
      if (
        headX < 0 ||
        headX >= canvasSize ||
        headY < 0 ||
        headY >= canvasSize ||
        checkCollision(headX, headY, snake)
      ) {
        // Game over
        alert('游戏结束!');
        snake.length = 0; // Clear the snake array
        direction = 'right'; // Reset direction
        snake.push({ x: boxSize * 2, y: boxSize }); // Reset snake position
        generateFood(); // Generate new food
      }

      // Check if the snake eats the food
      if (headX === food.x && headY === food.y) {
        generateFood();
      } else {
        // If not, remove the tail segment
        snake.pop();
      }

      // Add new head segment to the beginning
      const newHead = { x: headX, y: headY };
      snake.unshift(newHead);

      for (let i = 0; i < snake.length; i++) {
        const { x, y } = snake[i];
        drawSnakePart(x, y);
      }

      drawFood(food.x, food.y);

      setTimeout(draw, 100); // Control snake speed (100ms)
    }

    // Listen for arrow key presses to control the snake
    document.addEventListener('keydown', (event) => {
      const key = event.key;
      if (key === 'ArrowUp' && direction !== 'down') {
        direction = 'up';
      } else if (key === 'ArrowDown' && direction !== 'up') {
        direction = 'down';
      } else if (key === 'ArrowLeft' && direction !== 'right') {
        direction = 'left';
      } else if (key === 'ArrowRight' && direction !== 'left') {
        direction = 'right';
      }
    });

    // Initialize the snake with 3 parts
    snake.push({ x: boxSize * 2, y: boxSize });
    snake.push({ x: boxSize, y: boxSize });
    snake.push({ x: 0, y: boxSize });

    generateFood();
    draw();
  </script>
</body>
</html>

代码的使用方法(超简单什么都不用下载)

🍓1.打开记事本
🍓2.将上面的源代码复制粘贴到记事本里面将文件另存为HTML文件点击保存即可
🍓3.打开html文件(大功告成(●'◡'●))

总结

在本篇博客中,我们学习了如何使用HTML5 Canvas和JavaScript创造一个经典的小游戏 - 贪吃蛇游戏。通过绘制蛇的身体和食物,并监听方向键事件,我们成功地实现了一个简单而有趣的游戏。

希望您享受了本次贪吃蛇游戏的创作过程,并对游戏开发产生了兴趣。感谢您的阅读,祝您编程愉快!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 动态图展示
  • 准备工作
  • 创造贪吃蛇游戏
  • 运行游戏
  • 代码的使用方法(超简单什么都不用下载)
    • 🍓1.打开记事本
    • 🍓2.将上面的源代码复制粘贴到记事本里面将文件另存为HTML文件点击保存即可
    • 🍓3.打开html文件(大功告成(●'◡'●))
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档