Хорошо, значит, ваша проблема в том, что у вас нет логики для продолжения игры. То есть (основываясь на том, что я вижу в вашем посте прямо сейчас) каждый игровой раунд эксклюзивен, и результаты не составляют каждый раунд. Чтобы решить эту проблему, вам нужно реализовать игровой цикл, чтобы контролировать ход игры и разрешить несколько раундов за сессию.
Сказав это, вот что я придумал и немного протестировал, чтобы помочь вам:
function computerPlay () {
const options = [ 'rock', 'paper', 'scissors' ];
return options[Math.floor(Math.random()*options.length)];
}
function computerWins ( playerSelection, computerSelection ) {
return ( playerSelection === 'paper' && computerSelection === 'scissors' ) ||
( playerSelection === 'scissors' && computerSelection === 'rock' ) ||
( playerSelection === 'rock' && computerSelection === 'paper' );
}
function playerWins ( playerSelection, computerSelection ) {
return ( playerSelection === 'paper' && computerSelection === 'rock' ) ||
( playerSelection === 'rock' && computerSelection === 'scissors' ) ||
playerSelection === 'scissors' && computerSelection === 'paper';
}
function playRound ( score, playerSelection, computerSelection ) {
let result = {};
// Computer wins
if ( computerWins( playerSelection, computerSelection ) ) {
score--;
//Stop negative scores
if ( score < 0 ) {
score = 0;
}
result = { message : 'Computer wins, and the score is: ', score };
}
// Player wins
else if ( playerWins( playerSelection, computerSelection ) ) {
score++;
result = { message : 'Player wins and the score is: ', score };
}
// Same selection
else {
result = { message : 'Tie game and the score is: ', score };
}
return result;
}
function annouceWinner ( score, message ) {
console.log( `${message} ${score}` );
}
function main () {
let score = 0;
while ( score < 5 ) {
let roundResult = playRound( score, 'paper', computerPlay() );
score = roundResult.score;
annouceWinner( score, roundResult.message );
}
}
main();
Вы заметите, что я создал несколько служебных методов и немного их очистил.
- Теперь существует метод
computerWins
для хранения логики, которая определяет, когда компьютер выигрывает. Это хорошо, потому что если по какой-то причине эта логика нуждается в рефакторинге, это нужно сделать только одним способом!
- Теперь существует
playerWins
метод для хранения логики, которая определяет, когда игрок выигрывает.
- Теперь существует метод
announceWinner
. В этом нет необходимости, но это позволяет легко отделить часть сообщений от функции основного цикла.
- Теперь существует метод
main
. Это сердце, оно контролирует ход вашей программы и позволяет вам иметь несколько «раундов» за сеанс.
Пример вывода:
Computer wins, and the score is: 1
Tie game and the score is: 1
Player wins and the score is: 2
Player wins and the score is: 3
Computer wins, and the score is: 2
Tie game and the score is: 2
Player wins and the score is: 3
Player wins and the score is: 4
Player wins and the score is: 5