Skip to content

Instantly share code, notes, and snippets.

@varjmes
Last active December 23, 2015 16:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save varjmes/6664548 to your computer and use it in GitHub Desktop.
Save varjmes/6664548 to your computer and use it in GitHub Desktop.
Rock, Paper, Scissors -> Is there a simpler way to do this?
var userChoice = prompt("Do you choose rock, paper or scissors?");
var computerChoice = Math.random();
if (computerChoice < 0.34) {
computerChoice = "rock";
} else if(computerChoice <= 0.67) {
computerChoice = "paper";
} else {
computerChoice = "scissors";
}
var compare = function(choice1, choice2) {
if (choice1 === choice2) {
return "The result is a tie!";
}
if (choice1 === "rock") {
if (choice2 === "scissors") {
return "rock wins";
} else {
return "paper wins";
}
}
if (choice1 === "paper") {
if (choice2 === "rock") {
return "paper wins";
} else {
return "scissors wins";
}
}
if (choice1 === "scissors") {
if (choice2 === "paper") {
return "scissors wins";
} else {
return "rock wins";
}
}
if (choice1 != "rock" || choice1 != "paper" || choice1 != "scissors") {
return choice1.toUppercase() + " is not a valid choice!";
};
compare(userChoice, computerChoice);
@d33pfri3d
Copy link

You could make the choices an array and then make the computer pick a random choice - save doing the if/else statement and then assigning the choice (not tested yet):

var choices = ['rock', 'paper', 'scissors'];
var computerChoice = choices[Math.floor(Math.random() * myArray.length)];

@barisbalic
Copy link

Because you're only choosing the winning result, you don't really need to nest your checks, the order doesn't matter. I don't know of any nice native Javascript array comparison methods but you could use #some a bit like this...

var rockChosen = bothChoicesAsArray.some(function(c) { return c == 'rock' });
var scissorsChosen = bothChoicesAsArray.some(function(c) { return c == 'rock' });

if( rockChosen && scissorsChosen) then do something

You could probably squeeze it down a little more by pulling out the check into a separate re-useable function.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment