You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript谜语游戏:满足答错条件时如何为计时器扣除时长?

嘿,作为JavaScript新手能想到做计时惩罚机制真的很棒!我来一步步帮你实现这个功能~

实现步骤详解

1. 重构计时器核心逻辑(解决可修改时间的问题)

你原来的计时器是基于初始duration计算差值,没办法动态修改剩余时间,所以我们需要把剩余时间改成可全局访问的变量,让答错时能直接修改它:

// 全局变量存储剩余时间(单位:秒,45分钟=2700秒)
let remainingTime = 45 * 60;
let timerInterval; // 存储定时器ID,防止重复启动/方便终止

// 格式化时间为MM:SS格式的工具函数
function formatTime(seconds) {
  const minutes = Math.floor(seconds / 60);
  const secs = seconds % 60;
  // 用padStart补零,保证两位数的规范显示
  return `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
}

// 启动/更新计时器的函数
function startTimer(display) {
  // 先清除之前的定时器(避免重复启动导致计时加速)
  if (timerInterval) clearInterval(timerInterval);
  
  // 每秒更新一次计时器
  timerInterval = setInterval(() => {
    remainingTime--;
    
    // 更新页面上的计时器显示
    display.textContent = formatTime(remainingTime);
    
    // 剩余时间为0时触发游戏结束逻辑
    if (remainingTime <= 0) {
      clearInterval(timerInterval);
      alert("时间到!游戏结束");
      // 这里可以添加游戏结束的后续逻辑,比如显示结果、重置游戏等
    }
  }, 1000);
}

2. 实现答错扣时间的功能

写一个专门处理惩罚的函数,在玩家答错答案时调用它:

function penalizePlayer() {
  // 扣除5分钟(转换为300秒)
  remainingTime -= 5 * 60;
  
  // 防止剩余时间变成负数
  if (remainingTime < 0) {
    remainingTime = 0;
  }
  
  // 立即更新计时器显示(不用等下一秒)
  const display = document.getElementById('timer-display'); // 替换成你实际的计时器元素ID
  display.textContent = formatTime(remainingTime);
  
  // 可选:给玩家一个视觉提示
  alert("答错啦!扣除5分钟时间");
}

3. 整合到答题验证逻辑里

假设你有提交答案的按钮或表单,在验证答案错误时调用penalizePlayer()

// 示例:提交答案的事件监听
document.getElementById('submit-answer').addEventListener('click', () => {
  const playerAnswer = document.getElementById('player-input').value;
  const correctAnswer = "你的正确答案内容"; // 替换成实际的正确答案
  
  if (playerAnswer !== correctAnswer) {
    // 答错,执行惩罚
    penalizePlayer();
  } else {
    // 答对的逻辑,比如进入下一题、加分等
    alert("答对啦!继续加油");
  }
});

4. 初始化计时器

页面加载完成后启动计时器:

// 页面加载完成后执行初始化
document.addEventListener('DOMContentLoaded', () => {
  const display = document.getElementById('timer-display');
  startTimer(display);
});

针对你现有代码的小提示

你原来的代码里有$("input[@name=Verdachte]:checked").val()这种jQuery语法,如果你还在使用jQuery,也可以把上面的DOM操作改成jQuery写法,比如:

  • const display = $('#timer-display');
  • display.text(formatTime(remainingTime));
  • 事件监听改成$('#submit-answer').click(() => { ... })

另外要注意:如果游戏有多道题,记得切换题目时不要重复启动计时器,确保timerInterval只存在一个实例。

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

火山引擎 最新活动