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

JS Cookie猜数字游戏积分异常、用户名重复弹窗问题求解

问题根源

现有代码不符合预期的核心原因有3点:

  • 用户名输入、积分初始化逻辑全部写在递归调用的guessingGame函数内部,每次进入下一关触发函数递归时,都会重新弹出用户名输入框、同时把积分重置为0,直接导致重复弹窗、积分无法累加
  • 积分更新逻辑混乱:猜对后先执行一次积分+1存Cookie,递归调用下一关结束后又重复执行一次积分+1存Cookie的冗余操作,逻辑顺序完全错误
  • 缺少Cookie读取逻辑,游戏启动时无法获取之前已经存储的用户名和积分数据,每次重新开始都相当于重置状态
修复后完整代码
// 新增Cookie读取工具方法,用于获取已存储的用户名、积分数据
const getCookie = (name) => {
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) return parts.pop().split(';').shift();
  return null;
};

playButton.addEventListener("click", () => {
  // 用户名、积分变量移到递归函数外层,递归进入下一关时不会重置值
  let playerName = getCookie("username");
  let point = Number(getCookie("point")) || 0;

  // 仅当Cookie中没有已存用户名时,才弹出输入框
  if (!playerName) {
    playerName = prompt("请输入用户名");
    setCookie("username", playerName, 1);
  }

  const guessingGame = (range) => {
    const rndGuess = Math.floor(Math.random() * range) + 1;
    console.log("当前关卡正确答案:", rndGuess);
    const guess = prompt(`请猜一个1到${range}之间的数字`);
    // 用户点击取消按钮时直接终止游戏
    if (guess === null) return;
    const playerGuess = Number(guess);

    if (rndGuess === playerGuess) {
      // 猜对后累加积分、存入Cookie,再进入下一关
      point += 1;
      setCookie("point", point, 1);
      alert(`恭喜猜对!${playerName},你当前累计积分为${point}分`);
      // 范围上限加1,进入下一关
      guessingGame(range + 1);
    } else {
      // 猜错后积分清零,同步更新Cookie
      point = 0;
      setCookie("point", point, 1);
      alert("猜错了,游戏结束!");
    }
  };
  // 初始第一关猜数范围为1-2
  guessingGame(2);
});
改动说明
  • 新增通用getCookie方法,游戏启动时优先读取本地Cookie存储的用户名和积分,避免重复弹出用户名输入框
  • 将用户名、积分变量的声明移到guessingGame函数外层的点击事件回调作用域中,递归进入下一关时不会重置这两个值,保证积分可以正常累加
  • 删除了递归调用后重复执行的积分累加、Cookie存储逻辑,仅在猜对判断分支内执行一次积分更新,避免逻辑混乱
  • 增加了用户点击猜数弹窗「取消」按钮的终止逻辑,避免空值进入数字判断导致异常
  • 猜错时同步将Cookie中存储的积分清零,保证页面存储数据和游戏实际状态一致
  • 所有用户提示文本已替换为中文,符合中文使用场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:09:29