科学教育

搜索
查看: 1611|回复: 12
打印 上一主题 下一主题

金颢轩贪吃蛇

[复制链接]

1

主题

17

帖子

65

积分

注册会员

Rank: 2

积分
65
跳转到指定楼层
楼主
发表于 2025-9-30 15:25:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
帮我生成一个贪吃蛇代码
回复

使用道具 举报

0

主题

1145

帖子

1715

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1715
13#
发表于 2025-12-9 14:55:19 | 只看该作者


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

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

比如:

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

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

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

举个例子:

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


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

总结一下:

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

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

使用道具 举报

1

主题

17

帖子

65

积分

注册会员

Rank: 2

积分
65
12#
 楼主| 发表于 2025-12-9 14:55:14 | 只看该作者
事件是什么
回复 支持 反对

使用道具 举报

0

主题

1145

帖子

1715

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1715
11#
发表于 2025-12-2 14:59:15 | 只看该作者
金颢轩 发表于 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)做游戏。

如果你想让飞机更漂亮,或者加上更多功能,随时告诉我,我可以帮你一步步改进哦!祝你学习编程开心!????✈️????
回复 支持 反对

使用道具 举报

1

主题

17

帖子

65

积分

注册会员

Rank: 2

积分
65
10#
 楼主| 发表于 2025-12-2 14:56:51 | 只看该作者
帮我生成飞机大作战网页代码
回复 支持 反对

使用道具 举报

1

主题

17

帖子

65

积分

注册会员

Rank: 2

积分
65
9#
 楼主| 发表于 2025-12-2 14:55:11 | 只看该作者
帮我生成飞机大作战代码
回复 支持 反对

使用道具 举报

0

主题

1145

帖子

1715

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1715
8#
发表于 2025-11-11 14:57:20 | 只看该作者
金颢轩 发表于 2025-11-11 14:57
这是什么意思    if (keyPressed === 40 && dy === 0) ...


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

也就是说,这段代码是用来控制当用户按下“↓”键时,且当前蛇不是向上移动时,让蛇向下移动一个格子的距离。这样保证了蛇在操作时只能朝着相反方向移动,避免蛇头和蛇尾相撞,确保游戏能够正常进行。
回复 支持 反对

使用道具 举报

1

主题

17

帖子

65

积分

注册会员

Rank: 2

积分
65
7#
 楼主| 发表于 2025-11-11 14:57:13 | 只看该作者
这是什么意思    if (keyPressed === 40 && dy === 0) {
        dx = 0;
        dy = gridSize;
回复 支持 反对

使用道具 举报

0

主题

1145

帖子

1715

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1715
6#
发表于 2025-11-4 09:03:39 | 只看该作者
金颢轩 发表于 2025-11-04 09:03
帮我把字体改成绿色:


  贪吃蛇
  
    #gameCanvas ...


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


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



这段代码会将页面上所有文字的颜色都修改为绿色。你可以将这段样式代码插入到 HTML 文件的 `<head>` 标签内,这样页面上的文字就会变成绿色了。希望能帮到你!如果有任何问题,请随时告诉我哦!
回复 支持 反对

使用道具 举报

1

主题

17

帖子

65

积分

注册会员

Rank: 2

积分
65
5#
 楼主| 发表于 2025-11-4 09:03:33 | 只看该作者
帮我把字体改成绿色:<!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>
回复 支持 反对

使用道具 举报

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

本版积分规则

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