Моя игра отлично работает, за исключением случаев, когда я побеждаю, когда участвует ящерица или спок, я не могу понять, почему, потому что, когда я теряю ее, я вижу, что теряю, что правильно. Я пытался искать опечатки, но не мог найти. Если кто-нибудь может понять, что я ошибаюсь, я бы это оценил.
Вот скрипка, чтобы вы могли увидеть проблему: http://jsfiddle.net/5RGwv/
Вот мой HTML:
<div id="center">
<button id="button" onclick="play()">Play</button>
<p>You rolled:</p><span id="myroll"></span>
<p>Your opponent rolled:</p><span id="opproll"></span>
<p id="outcome"></p>
</div>
Javascript:
function play() {
var ROCK = 0;
var PAPER = 1;
var SCISSORS = 2;
var LIZARD = 3;
var SPOCK = 4;
var choices = ['rock', 'paper', 'scissors', 'lizard', 'spock'];
var myRoll = Math.floor(Math.random()*choices.length);
var opponentRoll = Math.floor(Math.random()*choices.length);
document.getElementById("myroll").innerHTML=choices[myRoll];
document.getElementById("opproll").innerHTML=choices[opponentRoll];
if (myRoll == opponentRoll) {
document.getElementById("outcome").innerHTML="It a draw.";
return;
} //end of if
switch(myRoll) {
case ROCK:
document.getElementById("outcome").innerHTML=(opponentRoll == SCISSORS ? 'You win!' : 'You lose!');
return;
case ROCK:
document.getElementById("outcome").innerHTML=(opponentRoll == LIZARD ? 'You win!' : 'You lose!');
return;
case PAPER:
document.getElementById("outcome").innerHTML=(opponentRoll == ROCK ? 'You win!' : 'You lose!');
return;
case PAPER:
document.getElementById("outcome").innerHTML=(opponentRoll == SPOCK ? 'You win!' : 'You lose!');
return;
case SCISSORS:
document.getElementById("outcome").innerHTML=(opponentRoll == PAPER ? 'You win!' : 'You lose!');
return;
case SCISSORS:
document.getElementById("outcome").innerHTML=(opponentRoll == LIZARD ? 'You win!' : 'You lose!');
return;
case LIZARD:
document.getElementById("outcome").innerHTML=(opponentRoll == SPOCK ? 'You win!' : 'You lose!');
return;
case LIZARD:
document.getElementById("outcome").innerHTML=(opponentRoll == PAPER ? 'You win!' : 'You lose!');
return;
case SPOCK:
document.getElementById("outcome").innerHTML=(opponentRoll == SCISSORS ? 'You win!' : 'You lose!');
return;
case SPOCK:
document.getElementById("outcome").innerHTML=(opponentRoll == ROCK ? 'You win!' : 'You lose!');
return;
} //end of switch(myRoll)
} //end of play()
Замените оператор switch
следующим:
var result = false;
switch(myRoll) {
case ROCK:
result = opponentRoll == SCISSORS || opponentRoll == LIZARD;
break;
case PAPER:
result = opponentRoll == ROCK || opponentRoll == SPOCK;
break;
case SCISSORS:
result = opponentRoll == PAPER || opponentRoll == LIZARD;
break;
case LIZARD:
result = opponentRoll == SPOCK || opponentRoll == PAPER;
break;
case SPOCK:
result = opponentRoll == SCISSORS || opponentRoll == ROCK;
break;
}
document.getElementById("outcome").innerHTML = result ? 'You win!' : 'You lose!';
Этот кусок кода использует switch
только для проверки, выиграли вы или нет. Затем в конце устанавливается значение.
Поскольку вы побеждаете, если вы бросаете "рок", а противник "lizard" ножницы противников, я объединил эти заявления.
Вы можете сократить код еще больше, просто проверив для случаев win
, например:
var result = myRoll == ROCK && (opponentRoll == SCISSORS || opponentRoll == LIZARD) ||
myRoll == PAPER && (opponentRoll == ROCK || opponentRoll == SPOCK) ||
myRoll == SCISSORS && (opponentRoll == PAPER || opponentRoll == LIZARD) ||
myRoll == LIZARD && (opponentRoll == PAPER || opponentRoll == SPOCK) ||
myRoll == SPOCK && (opponentRoll == ROCK || opponentRoll == SCISSORS);
document.getElementById("outcome").innerHTML = result ? 'You win!' : 'You lose!';
Если какая-либо из этих 5 строк true
, вы выиграли.
return
на break
или вы никогда не достигнете конца оператора