JavaScript中如何获取prompt输入并用于函数?剪刀石头布游戏问题排查
剪刀石头布游戏修复方案
问题排查
你的代码存在三个核心问题,导致prompt不弹出或游戏逻辑失效:
getUserChoice函数未返回用户输入的值,调用后得到的是undefinedgetComputerChoice里的Math.random没加括号调用,拿到的是函数对象而非随机数,判断逻辑完全失效- 没有主动调用
playRound函数,整个代码不会自动执行
修复后的完整代码
function getUserChoice() { // 获取用户输入并转小写,避免大小写差异影响判断 let userChoice = window.prompt('rock, paper or scissors?'); return userChoice ? userChoice.toLowerCase() : null; } function getComputerChoice() { // 调用Math.random()生成0-1的随机数 let computerChoice = Math.random(); if (computerChoice < 0.34){ return 'rock'; } else if (computerChoice <= 0.67){ return 'paper'; } else { return 'scissors'; } } function playRound() { const playerSelection = getUserChoice(); // 处理用户取消输入的情况 if (!playerSelection) { console.log('游戏已取消'); return; } // 校验输入是否合法 if (!['rock', 'paper', 'scissors'].includes(playerSelection)) { console.log('请输入有效的选项:rock、paper或scissors'); return; } const computerSelection = getComputerChoice(); if (playerSelection === 'rock' && computerSelection === 'scissors') { console.log('你赢了!石头击败剪刀'); } else if (playerSelection === 'scissors' && computerSelection === 'paper') { console.log('你赢了!剪刀击败布'); } else if(playerSelection === 'paper' && computerSelection === 'rock') { console.log('你赢了!布击败石头'); } else if(playerSelection === 'scissors' && computerSelection === 'rock') { console.log('你输了!石头击败剪刀'); } else if(playerSelection === 'paper' && computerSelection === 'scissors') { console.log('你输了!剪刀击败布'); } else if (playerSelection === 'rock' && computerSelection === 'paper') { console.log('你输了!布击败石头'); } else { console.log('平局'); } } // 启动游戏 playRound();
修复说明
- 给
getUserChoice添加返回值,同时将用户输入转为小写,避免因大小写不一致导致判断错误 - 修正
Math.random()的调用方式,确保生成有效的随机数值 - 增加输入合法性校验,处理用户输入无效内容或取消prompt的场景
- 主动调用
playRound()触发游戏流程,这样页面加载后会自动弹出输入框
修复后游戏可以正常运行:页面加载时弹出输入框获取用户选择,生成电脑的随机选择,对比后在控制台输出胜负结果。
内容的提问来源于stack exchange,提问作者João Vitor de Oliveira
相关产品推荐
相关产品推荐

