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

Blackjack游戏开发问题:startGameButton显示状态无法恢复

二十一点游戏按钮显示问题修复方案

问题根源

你代码里的bet变量是在if (cards.length < 2)代码块内用let声明的,作用域仅限该代码块。当游戏进入结束分支(拿到二十一点或爆牌)时,访问bet会触发ReferenceError,直接中断代码执行——这就是startGameButton.style.visibility = "visible"没生效的核心原因,报错后这行代码根本没机会运行。

修复步骤

  1. 将bet变量的声明移到startGame函数顶部,扩大作用域至整个函数
  2. 把prompt返回的字符串转为数字,避免筹码计算时出现字符串拼接错误

修改后的完整函数代码

function startGame() {
    startGameButton.style.visibility = "hidden";
    let bet = 0; // 提前声明bet,确保全函数可访问
    if (!player.playerName) {
        player.playerName = prompt("What's your name?")
        player.chips = 100

        playerEl.textContent = "Player: " + player.playerName;
    }

    if (cards.length < 2) {
        // 转换输入为数字,避免计算异常
        bet = Number(prompt('how much do you want to bet (chips: ' + player.chips + ')'));
        player.chips = player.chips - bet;
        chipsEl.textContent = "Chips: " + player.chips;
    }

    let firstCard = randomCard();
    let secondCard = randomCard();
    cards = [firstCard, secondCard];
    let tableFirstCard = randomCard();
    let tableSecondCard = randomCard();
    tableCards = [tableFirstCard, tableSecondCard];
    let message = "";
    let hasBlackJack = false;
    let isAlive = true;

    sum = firstCard + secondCard;
    newCardButton.style.visibility = "visible";
    startGameButton.textContent = "New Game";

    if (sum < 21) {
        message = "Do you want to draw a new card?";
    } else if (sum === 21) {
        message = "You've got Blackjack!";
        newCardButton.style.visibility = "hidden";
        startGameButton.style.visibility = "visible";
        player.chips = player.chips + bet * 2;
        hasBlackJack = true;
    } else {
        startGameButton.style.visibility = "visible";
        isAlive = false;
        message = "Bad luck! You're out of the game!";
    }

    messageEl.textContent = message;
    cardsEl.textContent = "Cards: " + firstCard + " " + secondCard;
    tableCardsEl.textContent = "Table Cards: " + tableSecondCard + " " + tableSecondCard;
    sumEl.textContent = "Sum: " + sum;
    console.log("blackjack: " + hasBlackJack);
    console.log("is Alive: " + isAlive);
}

额外提示

  • 遇到代码执行异常时,先打开浏览器控制台(按F12)查看错误信息,能快速定位问题
  • 可以给prompt输入加校验,比如判断输入是否为有效数字、是否超过当前筹码数,避免出现不合理数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:45:28