You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

原生JS开发打地鼠游戏如何在随机网格格子中展示随机地鼠图片

问题原因

  • 你的随机图片选中逻辑写在全局作用域,页面加载时只会执行一次,游戏全程只会用第一次生成的随机图片,不会每次出现地鼠都重新随机。
  • 不需要额外查询.mole元素,直接给当前选中的随机格子设置背景即可,还能减少不必要的DOM查询开销。

修复方案

只需要调整JS代码里的随机图片生成位置,把选图逻辑移到randomSquare函数内部,每次生成地鼠时重新随机选图即可,修改后的核心代码如下:

const squares = document.querySelectorAll('.square');
const mole = document.querySelector('.mole');
const timeLeft = document.querySelector('#time-left');
const score = document.querySelector('#score');
const bgColorArray = ['https://res.cloudinary.com/dkwiijqr0/image/upload/v1630402761/Whack-a-mole/sample-mole_in4rlk.png', 'https://res.cloudinary.com/dkwiijqr0/image/upload/v1630347923/Whack-a-mole/mole-img_antxud.png'];
// 删掉原全局位置的selectBG声明,移到randomSquare内部

let result = 0;
let hitPosition;
let currentTime = 60;
let timerId = null;

function randomSquare() {
  squares.forEach((square) => {
    square.classList.remove('mole');
  });
  
  let randomSquare = squares[Math.floor(Math.random() * 9)];
  randomSquare.classList.add('mole');

  hitPosition = randomSquare.id;

  // 每次生成地鼠时重新随机选图
  const selectBG = bgColorArray[Math.floor(Math.random() * bgColorArray.length)];
  // 直接给当前选中的格子设置背景
  randomSquare.style.backgroundImage = 'url(' + selectBG + ')';
}

squares.forEach((square) => {
  square.addEventListener('mousedown', () => {
    if (square.id == hitPosition) {
      result++;
      score.textContent = result;
      hitPosition = null;
    }
  });
});

function moveMole() {
  timerId = setInterval(randomSquare, 500);
}

moveMole();

function countDown() {
  currentTime--;
  timeLeft.textContent = currentTime;

  if (currentTime == 0) {
    clearInterval(countDownTimerId);
    clearInterval(timerId);
    alert('GAME OVER! Your final score is ' + result);
  }
}

let countDownTimerId = setInterval(countDown, 1000);

修改完成后每次地鼠出现都会随机选择一张图片展示,符合需求。

内容的提问来源于stack exchange,提问作者Jimeblue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:51:03