2015-12-09 3 views
0

Я пытаюсь сделать игру rpsls с помощью javascript и jquery. У меня больше всего работает, но я не могу заставить переменные сбрасываться до 0 в конце 5 бросков. Я использовал оператор if для сброса круглой переменной в 0, но я не могу понять, как сбросить два счета до 0 после 5 раундов.Сбросить значение переменной до 0

$(document).ready(function() { 
var round = 0 
var yourScore = 0 
var compScore = 0 

$(".shoot").on("click", function() { 
    var choiceRPS = ['rock', 'paper', 'scissor','lizard','spock']; 
    var ranNum = Math.floor(Math.random() * choiceRPS.length); 
    var compChoice = choiceRPS[ranNum]; 
    var userChoice = this.id; 
    round++; 
    $("#round").html(round); 
    var compChoice = choiceRPS[ranNum]; 
    console.log(userChoice); 
    console.log(compChoice); 

    if (compChoice == userChoice) { 
    }; 

    if (userChoice === "rock") { 
    if (compChoice === "lizard" || compChoice === "scissor") { 
     yourScore++; 
     $("#yourScore").html(yourScore); 
    } else { 
     if (compChoice === "paper" || compChoice === "spock") { 
     compScore++; 
     $("#computerScore").html(compScore); 
     } 
    } 
    }; 
    if (userChoice === "paper") { 
    if (compChoice === "rock" || compChoice === "spock") { 
     yourScore++; 
     $("#yourScore").html(yourScore); 
    } else { 
     if (compChoice === "scissor" || compChoice === "lizard") { 
     compScore++; 
     $("#computerScore").html(compScore); 
     } 
    } 
    }; 
    if (userChoice === "scissor") { 
    if (compChoice === "paper" || compChoice === "lizard") { 
     yourScore++; 
     $("#yourScore").html(yourScore); 
    } else { 
     if (compChoice === "rock" || compChoice === "spock") { 
     compScore++; 
     $("#computerScore").html(compScore); 
     } 
    } 
    };  
    if (userChoice === "lizard") { 
    if (compChoice === "spock" || compChoice === "paper") { 
     yourScore++; 
     $("#yourScore").html(yourScore); 
    } else { 
     if (compChoice === "rock" || compChoice === "scissor") { 
     compScore++; 
     $("#computerScore").html(compScore); 
     } 
    } 
    };  
    if (userChoice === "spock") { 
    if (compChoice === "rock" || compChoice === "scissor") { 
     yourScore++; 
     $("#yourScore").html(yourScore); 
    } else { 
     if (compChoice === "lizard" || compChoice === "paper") { 
     compScore++; 
     $("#computerScore").html(compScore); 
     } 
    } 
    }; 
    if (round === 5) { 
    round -=5; 
    yourScore -= yourScore; 
    compScore -= compScore; 
    if (yourScore>compScore) { 
     $('#win').modal({ 
     keyboard: false 
     }); 
    } else if (yourScore<compScore) { 
     $('#lose').modal({ 
     keyboard: false 
     }); 
    } else if (yourScore==compScore) { 
     $('#tie').modal({ 
     keyboard: false 
    }); 
    }; 
}; 
}); 
}); 
+2

Почему бы не сделать так, чтобы результат был напрямую установлен на 0 (например, 'yourScore = 0') вместо того, чтобы делать вычитание? –

+0

@HunanRostomyan Да, я обнаружил, что это действительно странно. Но похоже, что это не проблема. – BAM5

ответ

0

Я сделал plnkr и понял, что ваша проблема в том, что вы обновляете только элементы #yourScore и #computerScore, когда выигрывает соответствующий элемент. Вы должны перемещать обновления элементов вне внешних операторов if. Это также упрощает ваш код.

if (userChoice === "rock") { 
    if (compChoice === "lizard" || compChoice === "scissor") { 
     yourScore++; 
    } else { 
     if (compChoice === "paper" || compChoice === "spock") { 
     compScore++; 
     } 
    } 
}; 
if (userChoice === "paper") { 
    if (compChoice === "rock" || compChoice === "spock") { 
     yourScore++; 
    } else { 
     if (compChoice === "scissor" || compChoice === "lizard") { 
     compScore++; 
     } 
    } 
}; 
if (userChoice === "scissor") { 
    if (compChoice === "paper" || compChoice === "lizard") { 
     yourScore++; 
    } else { 
     if (compChoice === "rock" || compChoice === "spock") { 
     compScore++; 
     } 
    } 
};  
if (userChoice === "lizard") { 
    if (compChoice === "spock" || compChoice === "paper") { 
     yourScore++; 
    } else { 
     if (compChoice === "rock" || compChoice === "scissor") { 
     compScore++; 
     } 
    } 
};  
if (userChoice === "spock") { 
    if (compChoice === "rock" || compChoice === "scissor") { 
     yourScore++; 
    } else { 
     if (compChoice === "lizard" || compChoice === "paper") { 
     compScore++; 
     } 
    } 
}; 

$("#yourScore").html(yourScore); 
$("#computerScore").html(compScore); 

http://plnkr.co/edit/FofGShFtTMED8IY4fP1b?p=preview

Кроме того, в вашей проверки выигрыша, вы должны сбросить переменные после того, как вы проверить, кто выиграл, или же он всегда будет ничья, так как yourScore и compScore оба будут 0.

Кроме того, это выглядит как хорошее упражнение, поэтому я собираюсь немного оптимизировать ваше решение :)

+0

Aaand [оптимизирован] (http://plnkr.co/edit/ap5bojyfRoLnniWcqymJ?p=preview). Я понял, что это всего лишь вероятная игра, в которой 2 из 5 вы выигрываете, а 2 из 5 вы проигрываете. Единственная причина, по которой вам понадобилась бы такая логика, которую вы имели раньше, - это играть в кого-то другого. – BAM5

+0

Тогда я думаю, вы могли бы оптимизировать его дальше, так что есть только одна кнопка? Вы взяли с собой все самое интересное. [jsfiddle with fun back] (http://jsfiddle.net/5wpacmuh/1/) –

+0

Хехех, ну, с лицом, стоящим перед ним, есть те же самые шансы :) Но да, вы могли бы бросить его на одну кнопку, но тогда вы не будет давать пользователю иллюзию выбора: P – BAM5

-1

Вы пробовали двигать ваши заявления за пределами вашей document.ready? Вы можете инициализировать их внутри.

i.e. 
var round = 0; 
var yourScore = 0; 
var compScore = 0; 
$(document).ready(function() { 
... 

Я только что пробовал ваше решение и, похоже, работает. Он сбрасывается до 0, затем на следующей кнопке он увеличивается до 1.

Смежные вопросы