@tmp-evaluation-tasks/rps-game v0.1.5
Rock-Paper-Scissors Game
CLI and REST application for Rock-Scissors-Paper game.
Project structure
See: Map.md
Installation
Requirement: Node.js 14+
npm i -g @tmp-evaluation-tasks/rps-gameUsage
To run CLI-version, type the following command:
rps-gameFollow the hints in the terminal to play the game.
If you have a Redis server, running at localhost, you can enable Redis storage, by adding REDIS=localhost environment variable before the command:
REDIS=localhost rps-gameThere is also another implementation, built as a web-server with RESTful API.
To run RESTful API server, type the following command:
rps-game-serverIf you have a Redis server, running at localhost, you can enable Redis storage, by adding REDIS=localhost environment variable before the command:
REDIS=localhost rps-game-serverTo test the API, you need 2 commands:
Start the game
curl -i -b ./cookies.txt -c ./cookies.txt -X POST http://127.0.0.1:3000/startMake a choice
#Any of the following:
curl -i -b ./cookies.txt -c ./cookies.txt -X POST http://127.0.0.1:3000/choice/scissors
#Or:
curl -i -b ./cookies.txt -c ./cookies.txt -X POST http://127.0.0.1:3000/choice/rock
#Or:
curl -i -b ./cookies.txt -c ./cookies.txt -X POST http://127.0.0.1:3000/choice/paperPay attention, that you need to use cookies (-b ./cookies.txt -c ./cookies.txt), because the API uses session.
Also you can test the API using a simple web-interface at http://127.0.0.1:3000 . Alternatively, you can play with my instance at https://rpsgame.boto.space/ .
The API is statefull, it means that you have to /start each time in order to make computer make its choice.
Game session (a state of current game, computer's choice and so on) is stored in Express session (that's why, if you need to test the API, you have to use a client supporting cookies).
The scoreboard is stored in a separate storage (memory or Redis, depending on the value of REDIS environment variable), which is global and has only one instance.
Development
Requirement: Node.js 14+
CLI
To build it locally, clone this repo and run:
npm ci
npm run build
npm startREST
npm ci
npm run dev:rest