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

切换难度后按空格键触发打字测速游戏重置的问题求助

切换难度后按空格键触发打字测速游戏重置的问题求助

嘿,我仔细看了你的代码和问题描述,很快就找到问题根源啦!

问题到底出在哪?

你现在的handleDifficultyChange函数里,切换难度时直接调用了resetGame()——这个函数会把所有游戏状态(计时器、打字速度、准确率、当前输入位置、错误计数)全重置为初始值,还会重新拉取对应难度的文本。所以其实在你切换难度的那一刻,游戏已经被重置了,之后按空格键触发的只是新游戏的计时启动,但你误以为是按空格导致的重置。

而你的期望是切换难度后,只是更新文本内容,保持游戏进程不中断(比如计时器继续走,不需要从头开始),对吧?

解决方案

我们需要修改handleDifficultyChange函数,不再调用resetGame(),而是单独处理难度切换的逻辑:只更新文本、重置当前输入位置,同时保留计时器和统计数据(你也可以根据需求调整是否保留统计)。

修改后的代码

把原来的handleDifficultyChange函数替换成下面这样,同时新增一个更新文本的专用函数:

function handleDifficultyChange(e) {
  const selectedDifficulty = e.target.getAttribute("data-difficulty");
  currentDifficulty = selectedDifficulty; 
  // 不再调用resetGame,改用自定义的文本更新函数
  updateSampleText();
  difficultyOptions.classList.remove("active"); 
  highlightCurrentDifficulty(); 
}

// 新增:专门用于切换难度时更新文本的函数
async function updateSampleText() {
  // 记录计时器之前是否在运行
  const wasTimerRunning = !!startTime;
  
  // 获取对应难度的新文本
  sampleText = await getWords(currentDifficulty);
  // 更新页面上的文本显示
  textDisplay.innerHTML = sampleText
    .split("")
    .map((char) => `<span>${char}</span>`)
    .join("");
  
  // 重置当前输入位置和光标样式
  currentIndex = 0;
  const spans = textDisplay.querySelectorAll("span");
  spans.forEach((span) => {
    span.classList.remove("correct", "incorrect", "current");
  });
  initializeCursor();

  // 如果之前计时器在运行,继续保持计时状态
  if (wasTimerRunning && !timerInterval) {
    startTimer();
  }
}

如果切换难度后你希望重置统计数据(比如错误计数、速度显示),可以在updateSampleText里加上这几句:

// 可选:重置统计数据
mistakesCounter = 0;
speedDisplay.textContent = "0";
accuracyDisplay.textContent = "0";

额外说明

如果你其实是希望切换难度后启动新的一轮游戏,但不想让按空格时看起来像“二次重置”,那可以在切换难度后自动启动计时器,或者在界面上提示用户已经进入新游戏。但从你的期望描述来看,上面的修改更贴合你的需求。

备注:内容来源于stack exchange,提问作者Zoooriiel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:03:03