Blackjack游戏开发问题:startGameButton显示状态无法恢复
二十一点游戏按钮显示问题修复方案
问题根源
你代码里的bet变量是在if (cards.length < 2)代码块内用let声明的,作用域仅限该代码块。当游戏进入结束分支(拿到二十一点或爆牌)时,访问bet会触发ReferenceError,直接中断代码执行——这就是startGameButton.style.visibility = "visible"没生效的核心原因,报错后这行代码根本没机会运行。
修复步骤
- 将
bet变量的声明移到startGame函数顶部,扩大作用域至整个函数 - 把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
相关产品推荐
相关产品推荐

