Simplify result function with math. http://jsfiddle.net/afrievalt/qBbJn/
var options = ["paper", "rock", "lizard", "spock", "scissors"], result = [" ties ", " beats ", " loses to "], bigBang = function(choice1, choice2) { var index1 = options.indexOf(choice1), //spock => 3 index2 = options.indexOf(choice2), //rock=> 1 dif = index2 - index1; // 1 - 3 => -2 if(dif < 0) { // -2 < 0 => truthy dif += options.length; // -2 + 5 => 3 } while(dif > 2) { //3 > 2 => truthy dif -= 2; // 3 - 2 => 1 } return choice1 + result[dif] + choice2; //spock beats rock };
.
bigBang("spock", "paper"); // spock losses to paper var i = Math.floor(Math.random() * 5), randomChoice = options[i]; bigBang(randomChoice, userChoice);
this function will also work with options = [“cockroach”, “nuke”, “shoe”], (from that 70s show) or any odd length array like options = [“water”, “fire”, “paper”, “rock”, “tree”, “metal”, “mud”] //todo: throw error if any index = -1