科学教育

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

关于贪吃蛇代码

[复制链接]

9

主题

19

帖子

273

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
273
跳转到指定楼层
楼主
发表于 2024-7-16 20:23:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可以为我写一个贪吃蛇代码吗?
回复

使用道具 举报

0

主题

1145

帖子

1715

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1715
沙发
发表于 2024-7-16 20:23:41 | 只看该作者
当然可以!让我们一起来写一个简单的贪吃蛇游戏吧。为了让你更好地理解,我们会用HTML、CSS和JavaScript这三种语言来完成这个小项目。

1. **HTML部分(index.html)**:
首先,我们需要一个基本的结构,包含一个画布(canvas),用来绘制我们的游戏。请将以下代码保存为 `index.html` 文件。

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>贪吃蛇</title>
  6.     <style>
  7.         canvas {
  8.             background-color: #000;
  9.             display: block;
  10.             margin: 0 auto;
  11.         }
  12.     </style>
  13. </head>
  14. <body>
  15.     <canvas id="gameCanvas" width="400" height="400"></canvas>
  16.     <script src="snake.js"></script>
  17. </body>
  18. </html>
复制代码


2. **CSS部分**:
CSS部分已经在上面的HTML文件里包含了,用于给我们的画布(canvas)一个背景颜色,让它看起来更像是个游戏界面。

3. **JavaScript部分(snake.js)**:
这是最重要的部分,在这里我们将实现在画布上绘制贪吃蛇和控制它运动的逻辑。请将以下代码保存为 `snake.js` 文件。

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

  3. const gridSize = 20;      // 每个方格的大小
  4. const gridCount = 20;     // 网格数量
  5. let snake = [ {x: 10, y: 10} ];  // 蛇的初始位置
  6. let snakeLength = 1;      // 蛇的初始长度
  7. let food = {x: 15, y: 15};   // 食物的初始位置
  8. let direction = 'RIGHT';  // 蛇的初始方向

  9. // 绘制游戏场景
  10. function drawGame() {
  11.     // 清除画布
  12.     ctx.clearRect(0, 0, canvas.width, canvas.height);

  13.     // 绘制食物
  14.     ctx.fillStyle = 'red';
  15.     ctx.fillRect(food.x * gridSize, food.y * gridSize, gridSize, gridSize);

  16.     // 绘制蛇
  17.     ctx.fillStyle = 'lime';
  18.     for (let part of snake) {
  19.         ctx.fillRect(part.x * gridSize, part.y * gridSize, gridSize, gridSize);
  20.     }

  21.     // 移动蛇
  22.     let head = { x: snake[0].x, y: snake[0].y }; // 获取蛇头的位置
  23.     if (direction == 'LEFT') head.x--;
  24.     if (direction == 'UP') head.y--;
  25.     if (direction == 'RIGHT') head.x++;
  26.     if (direction == 'DOWN') head.y++;

  27.     // 检查蛇是否吃到食物
  28.     if (head.x === food.x && head.y === food.y) {
  29.         snakeLength++;  // 增加蛇的长度
  30.         food = {          // 生成新的食物位置
  31.             x: Math.floor(Math.random() * gridCount),
  32.             y: Math.floor(Math.random() * gridCount)
  33.         };
  34.     }

  35.     // 把新的头部加到蛇上
  36.     snake.unshift(head);

  37.     // 保持蛇的长度
  38.     if (snake.length > snakeLength) {
  39.         snake.pop();
  40.     }

  41.     // 检查蛇是否撞到自己或墙壁
  42.     if (head.x < 0 || head.x >= gridCount || head.y < 0 || head.y >= gridCount || isSnakeCollideSelf(snake)) {
  43.         alert("游戏结束!");
  44.         resetGame();
  45.     }

  46.     requestAnimationFrame(drawGame); // 不断调用drawGame
  47. }

  48. // 检查蛇是否撞到自己
  49. function isSnakeCollideSelf(snake) {
  50.     for (let i = 1; i < snake.length; i++) {
  51.         if (snake[i].x === snake[0].x && snake[i].y === snake[0].y) {
  52.             return true;
  53.         }
  54.     }
  55.     return false;
  56. }

  57. // 处理键盘输入
  58. document.addEventListener('keydown', function (event) {
  59.     if (event.key === 'ArrowLeft' && direction !== 'RIGHT') direction = 'LEFT';
  60.     if (event.key === 'ArrowUp' && direction !== 'DOWN') direction = 'UP';
  61.     if (event.key === 'ArrowRight' && direction !== 'LEFT') direction = 'RIGHT';
  62.     if (event.key === 'ArrowDown' && direction !== 'UP') direction = 'DOWN';
  63. });

  64. // 重置游戏
  65. function resetGame() {
  66.     snake = [ {x: 10, y: 10} ];
  67.     snakeLength = 1;
  68.     direction = 'RIGHT';
  69.     food = {
  70.         x: Math.floor(Math.random() * gridCount),
  71.         y: Math.floor(Math.random() * gridCount)
  72.     };
  73. }

  74. requestAnimationFrame(drawGame); // 开始游戏
复制代码


看,这就是一个简单的贪吃蛇游戏代码。你可以把这些文件放在同一个目录下,然后用浏览器打开 `index.html` 文件,就可以玩这个游戏啦!

有不明白的地方随时问我哦!祝你玩的开心!
回复 支持 反对

使用道具 举报

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

本版积分规则

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