科学教育

搜索
查看: 568|回复: 1
打印 上一主题 下一主题

曹语彤贪吃蛇

[复制链接]

1

主题

2

帖子

11

积分

新手上路

Rank: 1

积分
11
跳转到指定楼层
楼主
发表于 2025-10-10 14:56:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
帮我生成一个贪吃蛇游戏的代码,html,css,js。
回复

使用道具 举报

0

主题

1145

帖子

1715

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1715
沙发
发表于 2025-10-10 14:56:49 | 只看该作者
当我们创建一个简单的贪吃蛇游戏时,代码会有一些复杂,但是我会尽量给你解释得简单易懂一些。

首先,我们需要在 HTML 文件中创建一个画布来显示游戏,可以像这样:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>贪吃蛇游戏</title>
  7.     <link rel="stylesheet" href="styles.css">
  8. </head>
  9. <body>
  10.     <canvas id="gameCanvas"></canvas>
  11.     <script src="script.js"></script>
  12. </body>
  13. </html>
复制代码


然后,在 CSS 文件中,我们可以设置画布的样式,例如:

  1. #gameCanvas {
  2.     display: block;
  3.     margin: 0 auto;
  4.     background-color: black;
  5. }
复制代码


最后,在 JavaScript 文件中编写游戏逻辑,让贪吃蛇能够移动、吃食物等。这段代码可能会比较长,我会尽量简要地介绍:

  1. const canvas = document.getElementById('gameCanvas');
  2. const ctx = canvas.getContext('2d');

  3. const snakeSize = 20;
  4. const canvasWidth = 600;
  5. const canvasHeight = 400;

  6. let snake = [{ x: 10, y: 10 }];
  7. let food = { x: 0, y: 0 };
  8. let dx = 0;
  9. let dy = 0;
  10. let score = 0;

  11. function drawSnakePart(snakePart) {
  12.     ctx.fillStyle = 'green';
  13.     ctx.fillRect(snakePart.x * snakeSize, snakePart.y * snakeSize, snakeSize, snakeSize);
  14. }

  15. function drawFood() {
  16.     ctx.fillStyle = 'red';
  17.     ctx.fillRect(food.x, food.y, snakeSize, snakeSize);
  18. }

  19. function moveSnake() {
  20.     const head = { x: snake[0].x + dx, y: snake[0].y + dy };
  21.     snake.unshift(head);

  22.     if (head.x === food.x && head.y === food.y) {
  23.         score++;
  24.         createFood();
  25.     } else {
  26.         snake.pop();
  27.     }
  28. }

  29. function createFood() {
  30.     food.x = Math.floor(Math.random() * (canvasWidth / snakeSize)) * snakeSize;
  31.     food.y = Math.floor(Math.random() * (canvasHeight / snakeSize)) * snakeSize;
  32. }

  33. function checkCollision() {
  34.     if (snake[0].x < 0 || snake[0].x >= canvasWidth / snakeSize ||
  35.         snake[0].y < 0 || snake[0].y >= canvasHeight / snakeSize) {
  36.         gameOver();
  37.     }

  38.     for (let i = 1; i < snake.length; i++) {
  39.         if (snake[i].x === snake[0].x && snake[i].y === snake[0].y) {
  40.             gameOver();
  41.         }
  42.     }
  43. }

  44. function gameOver() {
  45.     alert('游戏结束!你的得分是:' + score);
  46.     snake = [{ x: 10, y: 10 }];
  47.     score = 0;
  48.     dx = 0;
  49.     dy = 0;
  50.     createFood();
  51. }

  52. function updateGame() {
  53.     ctx.clearRect(0, 0, canvasWidth, canvasHeight);

  54.     moveSnake();
  55.     checkCollision();

  56.     drawFood();
  57.     snake.forEach(drawSnakePart);

  58.     setTimeout(() => {
  59.         requestAnimationFrame(updateGame);
  60.     }, 100);
  61. }

  62. createFood();
  63. updateGame();

  64. document.addEventListener('keydown', (e) => {
  65.     const keyPressed = e.key;

  66.     if (keyPressed === 'ArrowUp' && dy === 0) {
  67.         dx = 0;
  68.         dy = -1;
  69.     }

  70.     if (keyPressed === 'ArrowDown' && dy === 0) {
  71.         dx = 0;
  72.         dy = 1;
  73.     }

  74.     if (keyPressed === 'ArrowLeft' && dx === 0) {
  75.         dx = -1;
  76.         dy = 0;
  77.     }

  78.     if (keyPressed === 'ArrowRight' && dx === 0) {
  79.         dx = 1;
  80.         dy = 0;
  81.     }
  82. });
复制代码


这就是一个简单的贪吃蛇游戏的代码示例。希望我的解释对你有帮助,如果有任何问题都可以问我哦!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表