Skip to content

Instantly share code, notes, and snippets.

@ryanhightower
Last active August 29, 2015 14:19
Show Gist options
  • Save ryanhightower/748acf3f8ea3295a1b11 to your computer and use it in GitHub Desktop.
Save ryanhightower/748acf3f8ea3295a1b11 to your computer and use it in GitHub Desktop.
JS Bin// source http://jsbin.com/vogile
/****************************************************************
* Rock, Paper, Scissors, Lizard, Spock,
* Spider-Man, Batman, Wizard, Glock
***************************************************************/
'// noprotect';
function numberToName(number, choices){
return choices[number];
}
function nameToNumber(name, choices){
return choices.indexOf(name);
}
function gameResult(player1, player2, resultsArr){
if(player1==player2) return "Tie game.";
for(var i=0; i<resultsArr.length; i++){
if(resultsArr[i].indexOf(player1)>=0 && resultsArr[i].indexOf(player2)>=0){
return resultsArr[i];
}
}
return ("An error occured. No matching result.");
}
function rpsls(name){
compNumber = Math.floor(Math.random() * 9);
playerNumber = nameToNumber(name, choices);
difference = (playerNumber - compNumber);
differenceModular = (difference + 9) % 9;
// console.log("differenceModular: "+differenceModular);
// console.log( "Player chooses " + name);
compName = numberToName(compNumber, choices);
console.log( "You chose: "+name + " and Computer chooses: "+compName);
var result = gameResult(name, compName, results);
if (0 < differenceModular && differenceModular <= 4){
result += " Player wins!";
}
else if (4 < differenceModular){
result += " Computer wins!";
}
return result;
}
var player,
// The order or choices in the array matters!
choices = ["Rock", // 0
"Spock", // 1
"Batman", // 2
"Glock", // 3
"Paper", // 4
"Lizard", // 5
"Wizard", // 6
"Spider-Man", // 7
"Scissors"], // 8
results = [
"Spock vaporizes Rock.", // 0 (0,1)
"Batman explodes Rock.", // 1 (0,2)
"Glock breaks Rock.", // 2 (0,3)
"Paper covers Rock.", // 3 (0,4)
"Rock crushes Lizard.", // 4 (0,5)
"Rock interrupts Wizard.", // 5 (0,6)
"Rock knocks out Spider-Man.", // 6 (0,7)
"Rock crushes Scissors.", // 7 (0,8)
"Batman hangs Spock.", // 8 (1,2)
"Glock shoots Spock.", // 9 (1,3)
"Paper disproves Spock.", // 10 (1,4)
"Lizard poisons Spock.", // 11 (1,5)
"Spock zaps Wizard.", // 12 (1,6)
"Spock befuddles Spider-Man.", // 13 (1,7)
"Spock smashes Scissors.", // 14 (1,8)
"Glock kills Batman's mom.", // 15 (2,3)
"Paper delays Batman.", // 16 (2,4)
"Lizard confuses Batman (because he looks like Killer Croc).", // 17 (2,5)
"Wizard stuns Batman.", // 18 (2,6)
"Batman scares Spider-Man.", // 19 (2,7)
"Batman dismantles Scissors.", // 20 (2,8)
"Paper jams Glock.", // 21 (3,4)
"Lizard is too small for Glock.", // 22 (3,5)
"Wizard melts Glock.", // 23 (3,6)
"Spider-Man disarms Glock.", // 24 (3,7)
"Glock dents Scissors.", // 25 (3,8)
"Lizard eats Paper.", // 26 (4,5)
"Wizard burns Paper.", // 27 (4,6)
"Spider-Man rips Paper.", // 28 (4,7)
"Scissors cuts Paper.", // 29 (4,8)
"Wizard transforms Lizard.", // 30 (5,6)
"Spider-Man defeats Lizard.", // 31 (5,7)
"Scissors decapitates Lizard.", // 32 (5,8)
"Spider-Man annoys Wizard.", // 33 (6,7)
"Scissors cut Wizard.", // 34 (6,8)
"Scissors cut Spider-Man.", // 35 (7,8)
];
while((player = prompt("Choose 'Rock', 'Paper', 'Scissors', 'Lizard', 'Spock', 'Spider-Man', 'Batman', 'Wizard' or 'Glock'.")) && choices.indexOf(player) < 0 ){
alert("I said, choose 'Rock', 'Paper', 'Scissors', 'Lizard', 'Spock', 'Spider-Man', 'Batman', 'Wizard' or 'Glock'.");
}
if(!player){ console.log("Bye!"); }else{
console.log(rpsls(player, choices, results) );
}
// TESTS
// console.log(numberToName(8,choices)); console.log(nameToNumber("Rock",choices));
// console.log(numberToName(7,choices)); console.log(nameToNumber("Spock",choices));
// console.log(numberToName(6,choices)); console.log(nameToNumber("Paper",choices));
// console.log(numberToName(5,choices)); console.log(nameToNumber("Lizard",choices));
// console.log(numberToName(4,choices)); console.log(nameToNumber("Scissors",choices));
// console.log(numberToName(3,choices)); console.log(nameToNumber("Spider-Man",choices));
// console.log(numberToName(2,choices)); console.log(nameToNumber("Batman",choices));
// console.log(numberToName(1,choices)); console.log(nameToNumber("Wizard",choices));
// console.log(numberToName(0,choices)); console.log(nameToNumber("Glock",choices));
// console.log(gameResult('Rock','Rock',results));
// console.log(gameResult('Rock','Paper',results));
// console.log(gameResult('Rock','Glock',results));
// console.log(gameResult('Rock','Wizard',results));
// console.log(gameResult('Rock','Batman',results));
// console.log(rpsls("Rock") );
// console.log(rpsls("Spock") );
// console.log(rpsls("Paper") );
// console.log(rpsls("Lizard") );
// console.log(rpsls("Scissors") );
// console.log(rpsls("Spider-Man") );
// console.log(rpsls("Batman") );
// console.log(rpsls("Wizard") );
// console.log(rpsls("Glock") );
//image: http://www.sheldonsquote.com/medias/435/458.jpg
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment