A very basic reference implementation of a Rock, Paper, Scissors (Dynamite, Waterbomb) bot. This version always plays ROCK and doesn't track anything at all about its opponent.
Feel free to fork this repo as a starting point which handles the basic plumbing for you, and bring your own functionality!
Your bot will face off against another for a game of Rock, Paper, Scissors with a twist.
The basic rules are simple: rock beats scissors, scissors beat paper, and paper beats rock.
The twist, however, is that dynamite beats all of the classic moves. Waterbomb beats dynamite, but loses to all of the classic moves.
A game will run for many rounds, and the first player to win enough points (1000 by default) wins the game.
You have a limited supply of dynamite (100 by default). If you try to throw dynamite after you've run out, you'll throw a waterbomb instead.
Points from draws are carried over to the next round. So for example if you and your opponent had both played ROCK twice in a row, then the next round is worth three points.
Your bot needs to implement 3 endpoints:
Called once at the start of a match. Use this to initialise your bot. Must return HTTP status code 200. Receives a JSON payload:
|opponentName||ABC123||Name of the bot you're playing against|
|pointsToWin||1000||Total points needed to win the match|
|maxRounds||2000||Maximum number of rounds before the match is a draw|
|dynamiteCount||100||Number of dynamite you can throw. Attempts to throw more than this number with throw a waterbomb instead|
Called to get your bot's move for the next round. Must return a JSON payload with HTTP status code 200. Valid payloads are ROCK, PAPER, SCISSORS, DYNAMITE, WATERBOMB (case sensitive).
Called to inform you of your opponent's last move. Must return HTTP status code 200. Received a JSON payload:
|opponentLastMove||PAPER||Last move made by your opponent. Valid values are ROCK, PAPER, SCISSORS, DYNAMITE, WATERBOMB (case sensitive)|