The canonical rock-paper-scissors-lizard-spock library.
npm i --save rpsls
The default export is a class with only static members.
import R from 'rpsls'
The class will contain the following static members. See the explanation for each member in the sections below.
- TIE
- PLAYER1
- PLAYER2
- ROCK
- PAPER
- SCISSORS
- LIZARD
- SPOCK
- getMoveName
- play
The five moves in the game are accessed via static getters. They are aliases for the number 0 through 4.
console.log(
R.ROCK, //0
R.PAPER, //1
R.SCISSORS, //2
R.LIZARD, //3
R.SPOCK //4
);
The three outcomes of the game are static getters. They are aliases for the numbers 0, 1, and 2.
console.log(
R.TIE, //0
R.PLAYER1, //1
R.PLAYER2 //2
);
The static play
method requires two parameters that represent the moves for player 1 and player 2 respectively.
An object will be returned with the details of the game.
The structure of the return object varies slightly depending upon whether the game is a tie or not.
let game = R.play(R.ROCK, R.ROCK);
//game will look like this
{
outcome: 0, //TIE
result: "rock vs rock is a tie"
}
let game = R.play(R.SPOCK, R.LIZARD);
//game will look like this
{
outcome: 2, //PLAYER2
winner: 3, //LIZARD
loser: 4, //SPOCK
method: 'poisons'
result: 'lizard poisons spock'
}
The static getMoveName
method takes a single parameter that represents a move. A string will be returned that is the readable name of the given move.
R.getMoveName(R.SPOCK); //'spock'
R.getMoveName(4); //'spock'
Both play
and getMoveName
with throw an error if anything besides the integer numeric values of 0, 1, 2, 3, 4
are passed to them.
R.play(R.ROCK, 'foo'); //error
R.play(R.ROCK, '2'); //error
R.play(R.ROCK, 1.1); //error
R.play(R.ROCK, 5); //error
R.getMoveName('bar'); //error
R.getMoveName('2'); //error
R.getMoveName(1.1); //error
R.getMoveName(5); //error
This serves as a reminder to myself of how to develop this project.
- clone repo
- npm i
- npm run typings
- edit .ts/.spec.ts
- npm run build
- npm test
- update npm version
- commit