Um jogo simples de “Papel, Tesoura, Pedra” em poucas linhas

Vamos preparar alguns dados e funções para serem usados ​​posteriormente:

var outcomes = ['rock', 'scissors', 'paper'];

// Creates random outcome
var randomOutcome = function () {
return outcomes[Math.floor(Math.random() * outcomes.length)];
};

// Init prompter (ask user for answer)
var prompter = function () {
var answer = prompt('Select your outcome (paper, scissors, rock)');
return (outcomes.indexOf(answer) !== -1) ? answer : prompter();
};

Ok, agora temos quase tudo que precisamos. Agora podemos disparar o prompter:

// Get user answer
var userChoice = prompter();

Ok, temos a resposta do usuário … Vamos perguntar ao computador:

// Generate computers answer
var computerChoice = randomOutcome();

Ótimo. Isso é tudo de que precisamos. Agora, a magia.

var userChoiceIndex = outcomes.indexOf(userChoice);
var computerChoiceIndex = outcomes.indexOf(computerChoice);

console
.log('Your choice: '+ userChoice);
console
.log('Computer choice: ' + computerChoice);

if (userChoiceIndex === computerChoiceIndex) {
console
.log('Draw');
}
else if (outcomes.splice(userChoiceIndex - 1, 1)[0] === computerChoice) {
console
.log('Computer wins')
}
else {
console
.log('You win');
}

A parte difícil aqui é esta linha:

(outcomes.splice(userChoiceIndex - 1, 1)[0] === computerChoice)

O que ele realmente faz é pegar o elemento antes que os usuários respondam e compará-lo com a escolha do computador. Se for o último elemento do array, leva o primeiro elemento e assim por diante.
A pedra ganha a tesoura, a tesoura ganha o papel e o papel cobre a pedra que ganha a tesoura etc.

Isso é tudo!