科学教育

标题: 金颢轩贪吃蛇 [打印本页]

作者: 金颢轩    时间: 2025-9-30 15:25
标题: 金颢轩贪吃蛇
帮我生成一个贪吃蛇代码

作者: kaia    时间: 2025-9-30 15:25
当然可以!下面是一个简单的贪吃蛇代码示例,你可以在网页上运行它:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <title>贪吃蛇</title>
  5.   <style>
  6.     #gameCanvas {
  7.       border: 1px solid black;
  8.     }
  9.   </style>
  10. </head>
  11. <body>
  12.   <canvas id="gameCanvas" width="400" height="400"></canvas>
  13.   <script>
  14.     const canvas = document.getElementById('gameCanvas');
  15.     const ctx = canvas.getContext('2d');
  16.    
  17.     const snakeSize = 10;
  18.     let snake = [{ x: 200, y: 200 }];
  19.    
  20.     let dx = 0;
  21.     let dy = -snakeSize;
  22.    
  23.     function drawSnake() {
  24.       snake.forEach(segment => {
  25.         ctx.fillStyle = 'green';
  26.         ctx.fillRect(segment.x, segment.y, snakeSize, snakeSize);
  27.       });
  28.     }
  29.    
  30.     function moveSnake() {
  31.       const head = { x: snake[0].x + dx, y: snake[0].y + dy };
  32.    
  33.       snake.unshift(head);
  34.       snake.pop();
  35.     }
  36.    
  37.     function clearCanvas() {
  38.       ctx.clearRect(0, 0, canvas.width, canvas.height);
  39.     }
  40.    
  41.     function gameLoop() {
  42.       clearCanvas();
  43.       moveSnake();
  44.       drawSnake();
  45.       setTimeout(gameLoop, 100);
  46.     }
  47.    
  48.     document.addEventListener('keydown', event => {
  49.       const key = event.key;
  50.    
  51.       switch (key) {
  52.         case 'ArrowUp':
  53.           dx = 0;
  54.           dy = -snakeSize;
  55.           break;
  56.         case 'ArrowDown':
  57.           dx = 0;
  58.           dy = snakeSize;
  59.           break;
  60.         case 'ArrowLeft':
  61.           dx = -snakeSize;
  62.           dy = 0;
  63.           break;
  64.         case 'ArrowRight':
  65.           dx = snakeSize;
  66.           dy = 0;
  67.           break;
  68.       }
  69.     });
  70.    
  71.     gameLoop();
  72.   </script>
  73. </body>
  74. </html>
复制代码


这个代码是一个简单的贪吃蛇游戏,通过按键盘上的方向键控制蛇的移动。你可以复制粘贴到一个 HTML 文件里,用浏览器打开,就可以看到贪吃蛇游戏了。希望对你有帮助!如果还有其他问题,欢迎随时提问哦!
作者: 金颢轩    时间: 2025-11-4 08:50
帮我换成绿色:<!DOCTYPE html>
<html>
<head>
  <title>贪吃蛇</title>
  <style>
    #gameCanvas {
      border: 1px 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 snakeSize = 10;
    let snake = [{ x: 200, y: 200 }];
   
    let dx = 0;
    let dy = -snakeSize;
   
    function drawSnake() {
      snake.forEach(segment => {
        ctx.fillStyle = 'green';
        ctx.fillRect(segment.x, segment.y, snakeSize, snakeSize);
      });
    }
   
    function moveSnake() {
      const head = { x: snake[0].x + dx, y: snake[0].y + dy };
   
      snake.unshift(head);
      snake.pop();
    }
   
    function clearCanvas() {
      ctx.clearRect(0, 0, canvas.width, canvas.height);
    }
   
    function gameLoop() {
      clearCanvas();
      moveSnake();
      drawSnake();
      setTimeout(gameLoop, 100);
    }
   
    document.addEventListener('keydown', event => {
      const key = event.key;
   
      switch (key) {
        case 'ArrowUp':
          dx = 0;
          dy = -snakeSize;
          break;
        case 'ArrowDown':
          dx = 0;
          dy = snakeSize;
          break;
        case 'ArrowLeft':
          dx = -snakeSize;
          dy = 0;
          break;
        case 'ArrowRight':
          dx = snakeSize;
          dy = 0;
          break;
      }
    });
   
    gameLoop();
  </script>
</body>
</html>
作者: kaia    时间: 2025-11-4 08:50
金颢轩 发表于 2025-11-04 08:50
帮我换成绿色:


  贪吃蛇
  
    #gameCanvas {
    ...


当你想要修改蛇的颜色时,只需要将 `ctx.fillStyle = 'green';` 这一行中的 `'green'` 改成其他颜色即可。比如,要将蛇的颜色改为绿色,可以将 `'green'` 改成 `'lime'`,这样就可以将蛇变成绿色了。

  1. ctx.fillStyle = 'lime';
复制代码


你可以尝试将代码中的 `'green'` 修改成 `'lime'`,然后刷新页面,看看贪吃蛇的颜色是否变成了绿色。如果有任何问题,欢迎继续向我提问!祝玩得开心!
作者: 金颢轩    时间: 2025-11-4 09:03
帮我把字体改成绿色:<!DOCTYPE html>
<html>
<head>
  <title>贪吃蛇</title>
  <style>
    #gameCanvas {
      border: 1px 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 snakeSize = 10;
    let snake = [{ x: 200, y: 200 }];
   
    let dx = 0;
    let dy = -snakeSize;
   
    function drawSnake() {
      snake.forEach(segment => {
        ctx.fillStyle = 'green';
        ctx.fillRect(segment.x, segment.y, snakeSize, snakeSize);
      });
    }
   
    function moveSnake() {
      const head = { x: snake[0].x + dx, y: snake[0].y + dy };
   
      snake.unshift(head);
      snake.pop();
    }
   
    function clearCanvas() {
      ctx.clearRect(0, 0, canvas.width, canvas.height);
    }
   
    function gameLoop() {
      clearCanvas();
      moveSnake();
      drawSnake();
      setTimeout(gameLoop, 100);
    }
   
    document.addEventListener('keydown', event => {
      const key = event.key;
   
      switch (key) {
        case 'ArrowUp':
          dx = 0;
          dy = -snakeSize;
          break;
        case 'ArrowDown':
          dx = 0;
          dy = snakeSize;
          break;
        case 'ArrowLeft':
          dx = -snakeSize;
          dy = 0;
          break;
        case 'ArrowRight':
          dx = snakeSize;
          dy = 0;
          break;
      }
    });
   
    gameLoop();
  </script>
</body>
</html>
作者: kaia    时间: 2025-11-4 09:03
金颢轩 发表于 2025-11-04 09:03
帮我把字体改成绿色:


  贪吃蛇
  
    #gameCanvas ...


要将字体颜色改为绿色,你可以在 CSS 样式中添加如下设置:


  1. <style>
  2.   body {
  3.     color: green;
  4.   }
  5. </style>
复制代码



这段代码会将页面上所有文字的颜色都修改为绿色。你可以将这段样式代码插入到 HTML 文件的 `<head>` 标签内,这样页面上的文字就会变成绿色了。希望能帮到你!如果有任何问题,请随时告诉我哦!
作者: 金颢轩    时间: 2025-11-11 14:57
这是什么意思    if (keyPressed === 40 && dy === 0) {
        dx = 0;
        dy = gridSize;
作者: kaia    时间: 2025-11-11 14:57
金颢轩 发表于 2025-11-11 14:57
这是什么意思    if (keyPressed === 40 && dy === 0) ...


这段代码是在检测按键事件的处理中,判断用户按下的键是否是方向键"↓"(keyCode 为40),并且当前蛇的运动方向不是竖直向上。如果条件满足,则将蛇的水平速度设为0,垂直速度设为格子大小(假设是正数,表示向下移动一个格子的距离)。

也就是说,这段代码是用来控制当用户按下“↓”键时,且当前蛇不是向上移动时,让蛇向下移动一个格子的距离。这样保证了蛇在操作时只能朝着相反方向移动,避免蛇头和蛇尾相撞,确保游戏能够正常进行。
作者: 金颢轩    时间: 2025-12-2 14:55
帮我生成飞机大作战代码

作者: 金颢轩    时间: 2025-12-2 14:56
帮我生成飞机大作战网页代码

作者: kaia    时间: 2025-12-2 14:59
金颢轩 发表于 2025-12-02 14:55
帮我生成飞机大作战代码


你好!飞机大作战是一款飞行射击类游戏,比较复杂一些。不过我可以帮你做一个非常简单的飞机射击小游戏的代码示例,适合在网页上运行,功能包括:用键盘左右移动飞机,按空格发射子弹,简单的敌机和碰撞检测。

你可以复制下面的代码到一个HTML文件里打开玩玩看:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <meta charset="UTF-8" />
  5.   <title>简易飞机大作战</title>
  6.   <style>
  7.     body {
  8.       margin: 0;
  9.       background: #000;
  10.       overflow: hidden;
  11.       color: white;
  12.       font-family: Arial, sans-serif;
  13.       text-align: center;
  14.     }
  15.     canvas {
  16.       background: #111;
  17.       display: block;
  18.       margin: 20px auto;
  19.       border: 2px solid #0f0;
  20.     }
  21.   </style>
  22. </head>
  23. <body>

  24. <h1>简易飞机大作战</h1>
  25. <canvas id="gameCanvas" width="400" height="600"></canvas>
  26. <p>左右方向键控制飞机,空格射击</p>

  27. <script>
  28.   const canvas = document.getElementById('gameCanvas');
  29.   const ctx = canvas.getContext('2d');

  30.   // 飞机属性
  31.   const planeWidth = 40;
  32.   const planeHeight = 40;
  33.   let planeX = (canvas.width - planeWidth) / 2;
  34.   const planeY = canvas.height - planeHeight - 10;
  35.   const planeSpeed = 5;

  36.   // 子弹数组
  37.   const bullets = [];
  38.   const bulletWidth = 5;
  39.   const bulletHeight = 10;
  40.   const bulletSpeed = 7;

  41.   // 敌机数组
  42.   const enemies = [];
  43.   const enemyWidth = 40;
  44.   const enemyHeight = 40;
  45.   const enemySpeed = 2;

  46.   // 控制状态
  47.   let isLeftPressed = false;
  48.   let isRightPressed = false;
  49.   let isSpacePressed = false;

  50.   // 分数
  51.   let score = 0;

  52.   // 创建敌机
  53.   function createEnemy() {
  54.     const x = Math.random() * (canvas.width - enemyWidth);
  55.     enemies.push({x, y: -enemyHeight});
  56.   }

  57.   // 监听键盘按下
  58.   window.addEventListener('keydown', function(e) {
  59.     if (e.code === 'ArrowLeft') isLeftPressed = true;
  60.     else if (e.code === 'ArrowRight') isRightPressed = true;
  61.     else if (e.code === 'Space') isSpacePressed = true;
  62.   });

  63.   // 监听键盘松开
  64.   window.addEventListener('keyup', function(e) {
  65.     if (e.code === 'ArrowLeft') isLeftPressed = false;
  66.     else if (e.code === 'ArrowRight') isRightPressed = false;
  67.     else if (e.code === 'Space') isSpacePressed = false;
  68.   });

  69.   // 画飞机
  70.   function drawPlane(){
  71.     ctx.fillStyle = '#0f0';
  72.     // 简单画个三角形当飞机
  73.     ctx.beginPath();
  74.     ctx.moveTo(planeX + planeWidth/2, planeY);
  75.     ctx.lineTo(planeX, planeY + planeHeight);
  76.     ctx.lineTo(planeX + planeWidth, planeY + planeHeight);
  77.     ctx.closePath();
  78.     ctx.fill();
  79.   }

  80.   // 画子弹
  81.   function drawBullets(){
  82.     ctx.fillStyle = '#ff0';
  83.     bullets.forEach(bullet => {
  84.       ctx.fillRect(bullet.x, bullet.y, bulletWidth, bulletHeight);
  85.     });
  86.   }

  87.   // 画敌机
  88.   function drawEnemies(){
  89.     ctx.fillStyle = '#f00';
  90.     enemies.forEach(enemy => {
  91.       ctx.fillRect(enemy.x, enemy.y, enemyWidth, enemyHeight);
  92.     });
  93.   }

  94.   // 更新位置
  95.   function update(){
  96.     // 移动飞机
  97.     if(isLeftPressed){
  98.       planeX -= planeSpeed;
  99.       if(planeX < 0) planeX = 0;
  100.     }
  101.     if(isRightPressed){
  102.       planeX += planeSpeed;
  103.       if(planeX > canvas.width - planeWidth) planeX = canvas.width - planeWidth;
  104.     }

  105.     // 发射子弹
  106.     if(isSpacePressed && (bullets.length === 0 || Date.now() - bullets[bullets.length-1].time > 300)){
  107.       bullets.push({x: planeX + planeWidth/2 - bulletWidth/2, y: planeY, time: Date.now()});
  108.     }

  109.     // 子弹飞行
  110.     for(let i=bullets.length-1; i>=0; i--){
  111.       bullets[i].y -= bulletSpeed;
  112.       if(bullets[i].y + bulletHeight < 0){
  113.         bullets.splice(i,1);
  114.       }
  115.     }

  116.     // 敌机飞行
  117.     for(let i=enemies.length-1; i>=0; i--){
  118.       enemies[i].y += enemySpeed;
  119.       if(enemies[i].y > canvas.height){
  120.         enemies.splice(i,1); // 敌机飞出屏幕消失
  121.       }
  122.     }

  123.     // 子弹和敌机碰撞检测
  124.     for(let i=enemies.length-1; i>=0; i--){
  125.       let enemy = enemies[i];
  126.       for(let j=bullets.length-1; j>=0; j--){
  127.         let bullet = bullets[j];
  128.         if(bullet.x < enemy.x + enemyWidth &&
  129.            bullet.x + bulletWidth > enemy.x &&
  130.            bullet.y < enemy.y + enemyHeight &&
  131.            bullet.y + bulletHeight > enemy.y){
  132.           // 碰撞了
  133.           enemies.splice(i, 1);
  134.           bullets.splice(j, 1);
  135.           score += 10;
  136.           break;
  137.         }
  138.       }
  139.     }

  140.     // 敌机撞飞机检测 - 游戏结束判定
  141.     for(let i=0; i<enemies.length; i++){
  142.       let enemy = enemies[i];
  143.       if(planeX < enemy.x + enemyWidth &&
  144.         planeX + planeWidth > enemy.x &&
  145.         planeY < enemy.y + enemyHeight &&
  146.         planeY + planeHeight > enemy.y){
  147.         alert('游戏结束!你的得分是:' + score);
  148.         document.location.reload();
  149.       }
  150.     }
  151.   }

  152.   // 画分数
  153.   function drawScore(){
  154.     ctx.fillStyle='white';
  155.     ctx.font = '20px Arial';
  156.     ctx.fillText('得分: ' + score, 10, 30);
  157.   }

  158.   // 主循环
  159.   function gameLoop(){
  160.     ctx.clearRect(0,0,canvas.width,canvas.height);

  161.     update();
  162.     drawPlane();
  163.     drawBullets();
  164.     drawEnemies();
  165.     drawScore();

  166.     requestAnimationFrame(gameLoop);
  167.   }

  168.   // 每秒生成一个敌机
  169.   setInterval(createEnemy, 1000);

  170.   gameLoop();
  171. </script>

  172. </body>
  173. </html>
复制代码


**说明:**

- 用左右箭头控制飞机左右移动。
- 按空格键可以发射黄色子弹。
- 红色块表示敌机从上往下飞。
- 子弹打中敌机会消失并加分。
- 敌机碰到飞机游戏结束,会弹窗显示得分并重新加载页面。

这个游戏代码很简单,没有音效和复杂的图形,但能帮你初步了解如何使用画布(Canvas)做游戏。

如果你想让飞机更漂亮,或者加上更多功能,随时告诉我,我可以帮你一步步改进哦!祝你学习编程开心!????✈️????
作者: 金颢轩    时间: 2025-12-9 14:55
事件是什么
作者: kaia    时间: 2025-12-9 14:55
金颢轩 发表于 2025-12-09 14:55
事件是什么


你好!“事件”这个词在网页编程里非常重要,简单来说:

**事件就是网页上发生的“动作”或“事情”。**

比如:

- 你用鼠标点击按钮
- 你按下键盘上的某个键
- 你把鼠标移到图片上面
- 网页加载完成了

这些动作都会“触发”一个事件。

程序是不会自己跑的,它需要靠这些事件告诉它:“嘿,我这儿发生了事情,你快做点什么吧!”所以程序会先“监听”事件(比如监视有没有按键被按),当事件发生时就执行对应的代码。

举个例子:

  1. document.addEventListener('click', function() {
  2.   alert('你点击了页面!');
  3. });
复制代码


这段代码的意思是:监听整个网页的“点击”事件,一旦点击发生,就弹出一个提示框。

总结一下:

- **事件**是网页上的“动作”或“事情”。
- 程序监听事件,事件一发生就执行相关代码。
- 事件让网页变得生动和可以互动。

如果你想了解更多具体的事件或者怎么使用它们,告诉我,我可以帮你详细讲解!????




欢迎光临 科学教育 (http://www.sci-edu.net/) Powered by Discuz! X3.2