简单的猜拳游戏,请问错误在哪?

var userchoice = prompt("please choose Rock Paper or Scissor!");
var pcchoice = Math.random();
switch(pcchoice) {
    case (pcchoice <= 0.33):
        pcchoice = 'rock';
        break;
    case (pcchoice > 0.33 && pcchoice <= 0.66):
        pcchoice = 'paper';
        break;
    default:
        pcchoice = 'scissor';
    }
function rockGame(userchoice) {
    console.log(userchoice);
    console.log(pcchoice);
    if(userchoice === pcchoice) {
        console.log('Tie!');
    } else if(userchoice === 'rock') {
        if(pcchoice === 'scissor') {
            console.log('You win!');
        } else {
            console.log('PC win!');
        }
    } else if(userchoice === 'scissor') {
        if(pcchoice === 'paper') {
            console.log('You win!');
        } else {
            console.log('PC win!');
        }    
    } else if(userchoice === 'paper'){
        if(pcchoice === 'rock') {
            console.log('You win!');
        } else {
            console.log('PC win!');
        }
    } else {
        console.log('输入错误!');    
    }
}

rockGame();
阅读 2k
2 个回答
function main() {
var userchoice = prompt("please choose Rock Paper or Scissor!");
var pcchoice = Math.random();
if (pcchoice <= 0.33) {
    pcchoice = 'rock';
} else if (pcchoice > 0.33 && pcchoice <= 0.66) {
    pcchoice = 'paper';
} else {
    pcchoice = 'scissor';
}
rockGame(userchoice, pcchoice);
}

function rockGame(userchoice, pcchoice) {

console.log(userchoice);
console.log(pcchoice);
if(userchoice === pcchoice) {
    console.log('Tie!');
} else if(userchoice === 'rock') {
    if(pcchoice === 'scissor') {
        console.log('You win!');
    } else {
        console.log('PC win!');
    }
} else if(userchoice === 'scissor') {
    if(pcchoice === 'paper') {
        console.log('You win!');
    } else {
        console.log('PC win!');
    }    
} else if(userchoice === 'paper'){
    if(pcchoice === 'rock') {
        console.log('You win!');
    } else {
        console.log('PC win!');
    }
} else {
    console.log('输入错误!');    
}
}

main();

试试~


号外:

查MDN时意外发现switch有个hacky写法居然是支持条件选择的……参见这里的“多条件case方法”里的“方法二”,大概就是得写成:

var pcchoice = Math.random();
switch (true) {
    case pcchoice <= 0.33:
        pcchoice = 'rock';
        break;
    case pcchoice > 0.33 && pcchoice <= 0.66:
        pcchoice = 'paper';
        break;
    default:
        pcchoice = 'scissor';
}

这样~~
至于具体怎么写,按习惯就好咯。

三点:

  1. rockGame();没传userchoice,因为你定义了形参但是没传所以函数内取得的是undefined。

  2. switch case用法错误,case你可以理解为单一匹配,不能匹配范围,所以case (pcchoice <= 0.33)相当于
    case (true)case (false)(等式判断的结果),然而switch(pcchoice)pccchoice是个小数,匹配不上truefalse,所以每次都是执行的default。可以改用if else if ...

  3. Rock Paper or Scissor你的文本提示是大写。代码里判断用的是小写,让人很为难啊。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题