科学教育

标题: 1111111111111111111111111111111111111111111111111111111111111111111 [打印本页]

作者: 朱益佳    时间: 2026-1-6 09:44
标题: 1111111111111111111111111111111111111111111111111111111111111111111

[color=rgb(51, 102, 153) !important]复制代码帮我修改一下

[color=rgb(51, 102, 153) !important]



作者: kaia    时间: 2026-1-6 09:44
你好!我看了你给的“打鬼子小游戏”的代码,发现里面好像有点小错误和不完整的地方,比如数组没写完整、花括号没配对,还有一些变量用法有问题。我帮你修改和补全了一下代码,让它可以正常运行,也加上了简单的注释,方便你理解。你可以把下面的代码复制到你的网页里试试:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.   <meta charset="UTF-8" />
  5.   <title>打鬼子小游戏</title>
  6.   <style>
  7.     body {
  8.       background-color: #f0f0f0;
  9.       text-align: center;
  10.       font-family: "微软雅黑", sans-serif;
  11.     }
  12.     #gameArea {
  13.       position: relative;
  14.       width: 600px;
  15.       height: 400px;
  16.       background: #a3d9ff;
  17.       margin: 20px auto;
  18.       border: 3px solid #333;
  19.       overflow: hidden;
  20.     }
  21.     .ghost {
  22.       position: absolute;
  23.       bottom: 10px;
  24.       width: 60px;
  25.       height: 60px;
  26.       border-radius: 15px;
  27.       line-height: 60px;
  28.       color: white;
  29.       font-weight: bold;
  30.       user-select: none;
  31.       cursor: pointer; /* 鼠标变成手形 */
  32.       text-align: center;
  33.       font-size: 14px;
  34.     }
  35.     #scoreBoard {
  36.       font-size: 20px;
  37.       margin-top: 10px;
  38.     }
  39.     #life {
  40.       font-size: 18px;
  41.       margin-top: 5px;
  42.     }
  43.     #message {
  44.       color: green;
  45.       font-weight: bold;
  46.       margin-top: 10px;
  47.       height: 24px;
  48.     }
  49.   </style>
  50. </head>
  51. <body>

  52. <h2>打鬼子小游戏</h2>

  53. <div id="gameArea"></div>

  54. <div id="scoreBoard">积分:0</div>
  55. <div id="life">生命:3</div>
  56. <div id="message"></div>

  57. <script>
  58.   const gameArea = document.getElementById('gameArea');
  59.   const scoreBoard = document.getElementById('scoreBoard');
  60.   const lifeDisplay = document.getElementById('life');
  61.   const message = document.getElementById('message');

  62.   let score = 0;
  63.   let life = 3;

  64.   // 鬼子类型:名字、颜色、难度等级、基础分数
  65.   const ghostTypes = [
  66.     { name: '简单鬼子', color: '#44aa44', difficulty: 1, basePoint: 10 },
  67.     { name: '中等鬼子', color: '#ffaa00', difficulty: 2, basePoint: 20 },
  68.     { name: '困难鬼子', color: '#cc0000', difficulty: 3, basePoint: 40 }
  69.   ];

  70.   let ghosts = [];  // 当前屏幕上的鬼子数组

  71.   // 随机生成鬼子并添加到游戏区域
  72.   function createGhost() {
  73.     if (life <= 0) return; // 生命用完停止生成

  74.     // 随机选一个鬼子类型
  75.     const type = ghostTypes[Math.floor(Math.random() * ghostTypes.length)];

  76.     // 创建鬼子的DOM元素
  77.     const ghostElem = document.createElement('div');
  78.     ghostElem.classList.add('ghost');
  79.     ghostElem.style.backgroundColor = type.color;
  80.     ghostElem.textContent = type.name;
  81.     // 左边位置随机,保证鬼子不会超出容器宽度
  82.     ghostElem.style.left = Math.random() * (gameArea.clientWidth - 60) + 'px';
  83.     ghostElem.style.bottom = '10px';

  84.     gameArea.appendChild(ghostElem);

  85.     // 鬼子对象
  86.     const ghost = {
  87.       element: ghostElem,
  88.       bottom: 10,
  89.       type: type,
  90.       alive: true
  91.     };

  92.     // 点击鬼子时触发攻击
  93.     ghostElem.addEventListener('click', () => {
  94.       if (ghost.alive) {
  95.         ghost.alive = false;
  96.         removeGhost(ghost);
  97.         addScore(type.basePoint);
  98.         message.textContent = '打中了!得分 +'+type.basePoint;
  99.       }
  100.     });

  101.     ghosts.push(ghost);
  102.   }

  103.   // 更新所有鬼子的位置,让它们不断上升
  104.   function updateGhosts() {
  105.     ghosts.forEach(ghost => {
  106.       if (!ghost.alive) return;

  107.       ghost.bottom += ghost.type.difficulty; // 根据难度速度不同
  108.       if (ghost.bottom > gameArea.clientHeight) {
  109.         // 鬼子跑掉了,失去一条命
  110.         ghost.alive = false;
  111.         removeGhost(ghost);
  112.         loseLife();
  113.         message.textContent = '鬼子逃走了,扣一条命!';
  114.       } else {
  115.         ghost.element.style.bottom = ghost.bottom + 'px';
  116.       }
  117.     });
  118.   }

  119.   // 移除鬼子元素和数组中的鬼子对象
  120.   function removeGhost(ghost) {
  121.     if (ghost.element.parentNode === gameArea) {
  122.       gameArea.removeChild(ghost.element);
  123.     }
  124.     ghosts = ghosts.filter(g => g !== ghost);
  125.   }

  126.   // 增加积分
  127.   function addScore(points) {
  128.     score += points;
  129.     scoreBoard.textContent = '积分:' + score;
  130.   }

  131.   // 失去生命
  132.   function loseLife() {
  133.     life--;
  134.     updateLife();
  135.     if (life <= 0) {
  136.       message.textContent = '游戏结束!你的最终得分是:' + score;
  137.       clearInterval(gameLoop);
  138.       clearInterval(createGhostInterval);
  139.     }
  140.   }

  141.   // 更新生命显示
  142.   function updateLife() {
  143.     lifeDisplay.textContent = '生命:' + life;
  144.   }

  145.   // 游戏循环,每20ms刷新鬼子位置
  146.   const gameLoop = setInterval(() => {
  147.     if (life > 0) {
  148.       updateGhosts();
  149.     }
  150.   }, 20);

  151.   // 每2秒生成一个新鬼子
  152.   const createGhostInterval = setInterval(() => {
  153.     if (life > 0) {
  154.       createGhost();
  155.     }
  156.   }, 2000);

  157.   updateLife();
  158.   scoreBoard.textContent = '积分:' + score;
  159. </script>

  160. </body>
  161. </html>
复制代码


---

**简单说明:**

1. 游戏区域`#gameArea`里会不断生成“鬼子”(不同颜色代表不同难度),它们会不停地往上移动。

2. 你要用鼠标点击它们,“鬼子”就会消失并且得分。

3. 如果鬼子跑到最顶部没被打,就会扣一条命。

4. 生命为0的时候游戏结束,会显示你的最终得分。

---

如果你想更有趣,可以尝试:

- 改变鬼子移动速度;
- 让鬼子横向也动;
- 增加声音效果或动画。

如果你还有不懂的地方,欢迎随时问我哦!我会用最简单的方式帮你讲解~




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