Почему не сказано, что я выигрываю, когда я играю в камне, бумаге, ножницах, ящерице, споке?

0

Моя игра отлично работает, за исключением случаев, когда я побеждаю, когда участвует ящерица или спок, я не могу понять, почему, потому что, когда я теряю ее, я вижу, что теряю, что правильно. Я пытался искать опечатки, но не мог найти. Если кто-нибудь может понять, что я ошибаюсь, я бы это оценил.

Вот скрипка, чтобы вы могли увидеть проблему: 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()
  • 0
    выглядит поклонником теории большого взрыва
  • 0
    «Я не могу понять, почему, потому что, когда я проигрываю, это показывает, что я проигрываю, и это правильно». Чем в чем конкретно проблема?
Показать ещё 10 комментариев
Теги:

1 ответ

3
Лучший ответ

Замените оператор 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, вы выиграли.

  • 0
    Замените return на break или вы никогда не достигнете конца оператора
  • 0
    @ValiD: Ой, да
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню