Programmer's Reference
Each game has its own version of the gamestate JSON and move JSON with fields that are specific to that game. Each game's requirements are described on this page.
Each game has its own specific information and this is passed to it in the gamestate. This means that the gamestate has different fields in it for each game. The gamestate for each game is detailed below.
You may not need to use some of the fields in the gamestate for different games. For example, you may never be interested in the GameId field. For the majority of games you may not be interested in the GameStatus field, but, for a very few games, this can be used to help make decisions.
Example gamestate JSON
{
'Ships': [5, 4, 3, 3, 2],
'IsMover': True,
'Round': 1,
'ResponseDeadline': 1543861722513,
'MyScore': 0,
'OppScore': 0,
'MyBoard': [
['L', 'L', '0', 'H0', 'H0', 'H0', '0', ''],
['L', 'L', '1', 'H1', 'H1', 'H1', '', ''],
['L', 'L', '', 'M', '', '', '', ''],
['L', 'L', '', '', '', '', '', ''],
['L', 'L', 'L', 'L', '', '', '', ''],
['L', 'L', 'L', 'L', '', '', '4', '2'],
['', '', '3', '3', '3', '', '4', '2'],
['', '', '', 'M', 'M', '', '', '2']
],
'OppBoard': [
['L', 'L', '', '', '', '', '', ''],
['L', 'L', '', '', '', '', '', ''],
['L', 'L', 'M', '', '', '', '', 'M'],
['L', 'L', '', '', 'H', 'H', '', ''],
['L', 'L', 'L', 'L', '', 'H', 'M', ''],
['L', 'L', 'L', 'L', '', '', '', ''],
['', 'M', '', '', '', '', '', 'M'],
['', '', '', '', '', '', 'M', '']
],
'GameStatus': 'RUNNING',
'GameId': 2398045,
'OpponentId': 'housebot-practise'
}
A description of each field in the gamestate.
Key | Description |
Ships | A list of integer lengths of ships that both you and your opponent are expected to place on the board. |
IsMover | A Boolean value indicating whether it is your turn to move. It will always be true when in the calculate_move() function. (Delve deeper into the code if you want to do some processing during your opponent's turn.) |
Round | An integer value of 0 or 1, with 0 representing the ship placement round and 1 representing the ship hunting round. |
ResponseDeadline | The epoch time, in milliseconds, that a successful move has to be sent and received by to prevent you from timing out. |
DealNumber | Which deal you are up to in the match, this key only appears when the value of DealsTotal is greater than 1 |
DealsTotal | The total number of times you are going to play a whole game of Battleships in this match, this key only appears when the value is greater than 1 |
MyScore | Your current score in this game, increases by one for every deal you win. The player with the largest score at the end wins. |
OppScore | Your opponent's current score in this game, increases by one for every deal they win. The player with the largest score at the end wins |
MyBoard | A 2-dimensional array of strings representing the state of your board |
OppBoard | A 2-dimensional array of strings representing the state of your opponent's board, with their ships hidden of course |
GameStatus | A string that will have value "RUNNING" if the game is in progress or a reason the game has ended otherwise |
GameId | An integer representing the unique game id for the current game |
OpponentId | A string containing the name of your opponent |
The strings in your board can contain the following values:
- "" - A cell that hasn't been hit that contains nothing on your board, or contains unknown on your opponent's board.
- "L" - A cell containing land that hasn't been hit.
- "M" - A cell containing nothing that has been hit.
- "LM" - A cell containing land that has been hit. (Why are you firing at land?)
- "H" - A cell on your opponent's board containing a ship that has been hit.
- "Hx" - A cell on your board containing ship number x that has been hit.
- "Sx" - A cell on either player's board containing ship number x that has been sunk.
- "x" - A cell on your board containing ship number x.
Depending on which round you are in the value you have to return from the calculateMove() function is as follows:
- If you are in the ship placement round your move should be a dictionary with key name 'Placement' and value Move. Move is a list of dictionaries, one for each ship, with the following key value pairs:
- 'Row' which takes values 'A','B',etc.
- 'Column' which takes values 1,2,etc.
- 'Orientation' which take values 'H' or 'V'.
- If you are in the ship hunting round your move should be a dictionary with the following key value pairs:
- 'Row' which takes values 'A','B',etc.
- 'Column' which takes values 1,2,etc.
Here is an example of a valid ship placement move:
# The Placement list adds ships in the order that the ships are
# listed in the game style e.g. 5,4,3,3,2 places the ship of length
# 5 first, the ship of length 4 second, the ship of length 3 third.
#
# This function does not check for any land and, so, should be used
# with a gamestyle that does not include land.
{"Placement": [
{
"Row": "A",
"Column": 1,
"Orientation": "H"
},
{
"Row": "B",
"Column": 6,
"Orientation": "V"
},
{
"Row": "C",
"Column": 1,
"Orientation": "H"
},
{
"Row": "D",
"Column": 1,
"Orientation": "H"
},
{
"Row": "E",
"Column": 1,
"Orientation": "V"
}
]
}
Here is an example of a valid ship hunting move
{
"Row": "B",
"Column": 4
}
- deployRandomly(gamestate) - Given the current gamestate, returns a valid move that deploys all the ships randomly on a blank board.
- deployShip(i, j, board, length, orientation, ship_num) - Returns whether a given location (i,j) and orientation ("H", "V") can fit a given ship (ship_num) onto given board and, if it can, updates the given board with that ship's position.
- chooseRandomValidTarget(gamestate) - Given the current gamestate, returns a valid move that randomly guesses a location on the board that hasn't already been hit.
- shipsStillAfloat(gamestate) - Given the current gamestate, returns a list of the lengths of your opponent's ships that haven't been sunk.
- selectUntargetedAdjacentCell(row, column, oppBoard) - Returns a list of cells adjacent to the input cell that are free to be targeted (not including land).
- translateMove(row, column) - Given a valid coordinate on the board returns it as a correctly formatted move.
- Ship placement round - The first move in a game of battleships where you choose where you wish to place your ships.
- Ship hunting round - All subsequent moves where you guess a location you think your opponent's ships may be.
- Epoch time - The number of seconds (or in our case milliseconds) that have elapsed since January 1 1970 00:00 UTC.
Here is an example of the gamestate JSON
{
'Images': [
'https://s3.eu-west-2.amazonaws.com/aigaming/WordPuzzleGame/Images/ba41ea2e-27b7-4f2a-bc54-5ad6ec84d746/s0.jpeg',
'https://s3.eu-west-2.amazonaws.com/aigaming/WordPuzzleGame/Images/ba41ea2e-27b7-4f2a-bc54-5ad6ec84d746/s1.jpeg',
'https://s3.eu-west-2.amazonaws.com/aigaming/WordPuzzleGame/Images/ba41ea2e-27b7-4f2a-bc54-5ad6ec84d746/s2.jpeg'
],
'EndTime': 1543915708520,
'GameLength': 17000,
'IsMover': True,
'MyAnswers': ['', '', ''],
'OppAnswers': ['', '', ''],
'MyDistances': [52, 67, 48],
'OppDistances': [52, 67, 48],
'GameStatus': 'RUNNING',
'GameId': 2398324,
'OpponentId': 'housebot-practise'
}
A description of each field in the gamestate
| |
Images | A list containing http links to the three images you must process |
EndTime | The epoch time, in milliseconds at which this game will end |
Gamelength | The total game length in milliseconds |
IsMover | A boolean that represents whether you can submit a route. Always set to True as long as game is running |
MyAnswers | A list of your best solutions so far for each of the sentences. If you have not submitted a solution the string will be blank ie ''. |
OppAnswers | A list of your opponents best answers so far. If they have not submitted a solution the string will be blank ie '' |
MyDistances | A list of your current Levenshtein distances from the correct solution. A score of 0 represents you have the correct answer. For more information on how the Levenshtein distance is calculated see the challenge home page |
OppDistances | A list of your opponents current Levenshtein distances from the correct solution |
GameStatus | A string that will have value "RUNNING" if the game is in progress or a reason the game has ended otherwise. |
GameId | An integer representing the unique game id for the current game |
OpponentID | A string containing the name of your opponent |
An example of the gamestate JSON
{
'Board': [
[-1, -1, -1, 3, -1, -1, -1, 0],
[3, -1, -1, -1, 1, -1, 0, -1],
[-1, -1, -1, -1, -1, -1, -1, -1],
[0, -1, -1, -1, -1, -1, -1, -1],
[-1, -1, -1, 0, -1, -1, -1, -1],
[-1, -1, -1, -1, -1, -1, -1, -1],
[-1, 1, -1, 1, -1, 1, -1, -1],
[1, -1, 1, -1, 1, -1, -1, -1]
],
'Role': 0,
'PossibleMoves': {
'[1, 6]': [
[2, 7],
[2, 5]
],
'[3, 0]': [
[4, 1]
],
'[4, 3]': [
[5, 4],
[5, 2]
]
},
'IsMover': True,
'ResponseDeadline': 1543861883390,
'GameStatus': 'RUNNING',
'Steps': 34,
'GameId': 2398046,
'OpponentId': 'housebot-practise'
}
A description of each of the gamestate fields
Key | Description |
Board | A list of lists representing each row on the board |
Role | Whether you are the Dark or Light player. The Light player moves first |
PossibleMoves | A list of lists containing every valid move that can be made at this point in the game |
IsMover | A Boolean value indicating whether it is your turn to move. It will always be true when in the calculateMove() function. (Delve deeper into the code if you want to do some processing during your opponent's turn) |
ResponseDeadline | The epoch time, in milliseconds, that a successful move has to be sent and received by to prevent you from timing out |
GameStatus | A string that will have value "RUNNING" if the game is in progress or a reason the game has ended otherwise |
GameId | An integer representing the unique game id for the current game |
OpponentId | A string containing the name of your opponent |
The strings in your board can contain the following values:
- -1 - A cell that has not have a piece on it.
- 0 - A cell that has a Light coloured regular piece on it.
- 1 - A cell that has a Dark coloured regular piece on it.
- 2 - A cell that has a Light coloured King piece on it.
- 3 - A cell that has a Dark coloured King piece on it
An example of the gamestate JSON
{
'IsMover': True,
'ResponseDeadline': 1543935386057,
'GameStatus': 'RUNNING',
'first_center_dominoes': [3, 6],
'center_dominoes': [
[3, 2],
[2, 1],
[1, 1],
[1, 5],
[5, 0],
[0, 4],
[4, 3],
[3, 6],
[6, 1],
[1, 4]
],
'oppo_dominoes_number': 1,
'MyDominoes': [
[2, 2],
[6, 6],
[2, 6],
[1, 3]
],
'number_of_spots': 7,
'dominoes_remainder': 13,
'GameId': 2398471,
'OpponentId': 'housebot-practise'
}
A description of each field in the gamestate
Key | Description |
MyDominoes | A 2-dimensional array of integers representing the the dominoes in your hand. |
IsMover | A Boolean value indicating whether it is your turn to move. It will always be true when in the calculate_move() function |
ResponseDeadline | The epoch time, in milliseconds, that a successful move has to be sent and received by to prevent you from timing out |
first_center_dominoes | the first domino added to the domino board at the centre |
center_dominoes | All the dominoes in the domino board. |
GameStatus | A string that will have value "RUNNING" if the game is in progress or a reason the game has ended otherwise |
GameId | An integer representing the unique game id for the current game |
OpponentId | A string containing the name of your opponent |
Each domino for now only has 6 dots at maximum on the top or at the bottom of the domino.
An example of the centre_domino:
[ [4,0], [0,3], [3,6], [6,4], [4,4], [4,3] ]
Would visually be displayed as follows:

The domino in red block is the first_centre_domino
.
An example of the MyDomino:
[ [1,6], [2,2], [6,0] ]
Would visually be displayed as follows:

The value you have to return from the calculateMove() function is a dictionary states the domino you want to move and the position you want it to move to.
The suitable_domino should be in your hand and the "Position" should be either "R" or "L"
Here is an example of valid moves:
move = { " suitable_domino": [2, 1], " Position": “R”}
But the suitable domino must have a number that matches a number on one open end of the domino board and the position should be correctly matched.
An example of the gamestate JSON
{
'Board': [
[1, -1, 0, -1, -1, -1, -1],
[-1, 0, 0, -1, 1, -1, 0],
[1, 0, 1, 1, -1, 0, 1],
[0, -1, -1, -1, 0, -1, -1],
[-1, -1, 1, 1, 1, -1, -1],
[0, 0, 1, -1, -1, 0, 0],
[-1, 1, -1, 1, 1, -1, -1]
],
'PreviousBoard': [
[1, -1, 0, -1, -1, -1, -1],
[-1, 0, 0, -1, 1, -1, 0],
[-1, 0, 1, 1, -1, 0, 1],
[0, -1, -1, -1, 0, -1, -1],
[-1, -1, 1, 1, 1, -1, -1],
[0, 0, 1, -1, -1, 0, 0],
[-1, 1, -1, 1, 1, -1, -1]
],
'IsMover': True,
'ResponseDeadline': 1543936950967,
'Black': 0,
'MyRole': 0,
'IsCaptureGo': False,
'CaptureTarget': 1,
'MyCaptures': 0,
'OpponentCaptures': 0,
'MaxMoves': 200,
'MoveNumber': 26,
'LastMoveWasPass': False,
'ScoringMethod': 'STONE',
'GameStatus': 'RUNNING',
'GameId': 2398483,
'OpponentId': 'housebot-practise'
}
A description of each field in the gamestate
Key | Description |
Board | A 2-dimensional array of integers representing the state of the board. |
PreviousBoard | A 2-dimensional array of integers representing the state of the board after your last move. If you are playing Capture Go then this value will always be an empty board. |
IsMover | A Boolean value indicating whether it is your turn to move. It will always be ‘True` when in the calculateMove() function. (Delve deeper into the code if you want to do some processing during your opponent’s turn.) |
ResponseDeadline | The epoch time, in milliseconds, that a successful move has to be sent and received by to prevent you from timing out |
Black | An integer representing the ID of the player who is using black stones. It will be either `0` or `1`. |
MyRole | An integer representing your ID (`0` or `1`). |
IsCaptureGo | A Boolean value indicating whether the game style you are playing is Capture Go |
CaptureTarget | An integer representing the target number of stones to capture throughout the game in order to win. If you are not playing Capture Go then this will always be `None` |
MyCaptures | An integer representing the number of stones you have captured so far in this game. If you are not playing Capture Go then this will always be `0`. |
OpponentCaptures | An integer representing the number of stones captured by your opponent so far in this game. If you are not playing Capture Go then this will always be `0`. |
MaxMoves | An integer representing the maximum number of moves allowed in the game from start to end. Once there have been this many moves the game will end. If you are playing Capture Go then this will always be `False` |
MoveNumber | The number of the move you are to make. If you are making the first move of the game then this will be `0`. Thus the value is equivalent to the number of moves that have already happened. If you are playing Capture Go then this will always be `0` |
LastMoveWasPass | A Boolean value indicating whether the opponent has just passed their turn. At the start of the game this is `False` |
ScoringMethod | A string with value `"STONE"`, `"TERRITORY"`, or `"AREA"` to indicate whether the scoring method for the game is stone scoring, territory scoring, or area scoring. If you are playing Capture Go then this will always be `None`. |
GameStatus | A string that will have value "RUNNING" if the game is in progress, or a reason the game has ended otherwise |
The Board and the PreviousBoard 2-dimensional arrays in the gameState can contain the following integer values:
- -1 An empty (that is, unoccupied) intersection.
- 0 An intersection occupied by a stone belonging to the player with ID 0.
- 1 An intersection occupied by a stone belonging to the player with ID 1.
The value you have to return from the calculateMove() function is a dictionary which either specifies a location (X, Y) on the board to place a stone, or the location (-1, -1), indicating that you wish to pass your turn. The dictionary must have the following key value pairs:
- "X" which takes values -1, 0, 1, 2, etc.
- "Y" which takes values -1, 0, 1, 2, etc.
Here is an example of a valid move:
`{ "X": 0, "Y": 0 }`
Example of the gamestate JSON
{
'Board': [0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1],
'MyPoints': 3,
'OppPoints': 1,
'UpturnedTiles': [{
'Index': 4,
'Tile': 'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/095726b5-b151-4c05-b89f-b1cc260553c8.jpg'
}, {
'Index': 14,
'Tile': 'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/dc23c9ae-2d95-4ee7-8f4e-1b31cfdbe0ca.jpg'
}],
'CategoryList': ['Words', 'Animals', 'Landmarks'],
'OpponentMatches': 2,
'TileBacks': [
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/22ab57c2-e1a7-4fe6-a161-6df00526a8d4.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/4bca2bde-be63-468f-88f7-99fcaeaebeca.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/4bca2bde-be63-468f-88f7-99fcaeaebeca.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/4bca2bde-be63-468f-88f7-99fcaeaebeca.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/4bca2bde-be63-468f-88f7-99fcaeaebeca.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/4bca2bde-be63-468f-88f7-99fcaeaebeca.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/22ab57c2-e1a7-4fe6-a161-6df00526a8d4.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/2f70f0e9-671a-4b9d-a0a8-d14fab82d6a9.png',
'https://s3.eu-west-2.amazonaws.com/aigaming/Pairs/Games/5a39ebe4-6396-44d0-8b2f-9d113552f2ff/4bca2bde-be63-468f-88f7-99fcaeaebeca.png'
],
'IsMover': True,
'ResponseDeadline': 1543862250328,
'GameStatus': 'RUNNING',
'AnimalList': ['cat', 'dog', 'horse', 'lion', 'turtle', 'deer', 'zebra',
'rhinoceros', 'fox', 'cow', 'chicken', 'sheep', 'antelope', 'ape', 'bear',
'cheetah', 'donkey', 'eagle', 'echidna', 'elephant', 'flamingo', 'giraffe',
'goat', 'hawk', 'heron', 'hummingbird', 'kangaroo', 'koala', 'leopard',
'meerkat', 'ostrich', 'owl', 'parrot', 'penguin', 'phasianid', 'rodent',
'salamander', 'seal', 'snake', 'squirrel', 'tiger', 'vulture', 'wolf'],
'Bonus': 'Landmarks',
'Multiplier': 1,
'GameId': 2398049,
'OpponentId': 'housebot-practise'
}
Description of each of the gamestate fields
Key | Description |
Board | A list representing each tile in the game and whether that tile has been successfully matched or not. A "1" means the tile has been matched and "0" means the tile has not yet been matched.
|
UpturnedTiles | A list of dictionaries detailing the upturned tiles for this move.
|
TileBacks | A list of strings containing the URLs of the images for the backs of the tiles. |
AnimalList | A list of strings that details all possible animals that will be displayed in the game.
|
CategoryList | A list of strings that details all possible categories that tiles will belong to in the game.
|
MyPoints | Your current points score for this game |
OpponentPoints | Your opponents current points score for this game |
OpponentMatches | The number of matched tile sets that your opponent has successfully identified.
|
Bonus | A String containing the name of a category. If your move matches tiles in this bonus category, the score you receive will be multiplied by the Multiplier amount.
|
Multiplier | The current score multiplier that is affected by matching tiles that are in the Bonus Category.
|
GameId | An integer representing the unique game id for the current game
|
OpponentId | A string containing the name of your opponent
|
ResponseDeadline | The epoch time, in milliseconds, that a successful move has to be sent and received by to prevent you from timing out.
|
GameStatus | A string that will have value "RUNNING" if the game is in progress or a reason the game has ended otherwise.
|
IsMover | In this turned based game, this will always be true |
The point of the calculate_move() function is for you to return the move you want to make in the game. In the Match Game, a move is the pair of tiles that you want to turn over to see if they match.
You should determine which tiles to turn over by remembering the tiles you have already seen and trying to turn over a pair of tiles that have the same subject.
To submit your move, you return a dictionary with the Key Pair of "Tiles" and then a list of the tiles that you want to turn over. For example:
return {"Tiles": [10, 14]}
An example of the gamestate JSON
{
'NumColours': 8,
'NumPegs': 4,
'DuplicatesAllowed': True,
'IsLeading': False,
'Round': 1,
'NumGuesses': 12,
'MyGuesses': 0,
'OppGuesses': 0,
'myFinishedTime': None,
'OppFinishedTime': None,
'EndTime': 1543862748400,
'GameLength': 20000,
'MyScore': 0,
'OppScore': 0,
'IsMover': True,
'GuessesList': [],
'GameStatus': 'RUNNING',
'GameId': 2398057,
'OpponentId': 'housebot-practise'
}
A description of each field in the gamestate
Key | Description |
Comparison | A list that contains the results from your last guess. The first number represents the number of correct colours but incorrect position and the second number is where the colour and position are both correct. This entry will only exist once you have submitted at least one guess |
NumColours | The number of different colours available for each peg in the hidden sequence |
NumPegs | The number of pegs that make up each of the hidden sequences. This value will not change during the game and is determined by the game type you are currently playing. |
DuplicatesAllowed | Whether you are allowed duplicate coloured pegs in your hidden sequence. This value will not change during the game and is determined by the game type you are currently playing. |
IsLeading | A Boolean value indicating whether you are winning |
Round | A number representing the current round of the game. If 0 then you are setting up your hidden sequence. If 1 you are trying to guess your opponents hidden sequence |
NumGuesses | The total number of guesses you are allowed to try and find your opponents code. This value will not change during the game and is determined by the game type you are currently playing |
MyGuesses | The number of guesses you have currently used |
OppGuesses | The number of guesses your opponent has used |
myFinishedTime | The epoch time you submitted the correct solution. Set to 'None' if you have not found the solution |
OppFinishedTime | The epoch time your opponent submit the correct solution. Set to 'None' if they have not found the solution |
GameLength | The game length in milliseconds |
MyScore | If playing a series of games this is your running total number of games won |
OppScore | If playing a series of games this is your opponents running total number of games won |
IsMover | Always set to 'True' whilst the game is in play. |
GuessesList | A list of all your previous guesses |
GameStatus | A string that will have value "RUNNING" if the game is in progress or a reason the game has ended otherwise |
GameId | An integer representing the unique game id for the current game |
OpponentId | A string containing the name of your opponent |
There are two different types of moves that you can make in this game. You will either be setting your initial peg sequence that your opponent will need to determine, or, you will be submitting a guessed peg sequence to see if it matches.
On game startup the 'Round' entry in gameState is set to 0. This move is setting your hidden peg sequence. The sequence is a list of numbers where each number represents a peg and the value of each number can be between 0 and the 'NumColours' minus 1. For example if 'NumPegs'=6 and 'NumColours'=8 a valid move would be:
move = {"Sequence": [0,1,2,3,6,7]}
Once the 'Round' entry in gameState is set to 1 then you are trying to guess your opponents hidden sequence. A guess is a list of numbers where each number represents a peg in your opponents sequence. Again each peg can be any value between 0 and the 'NumColours' minus 1. For example if 'NumPegs'=4 and 'NumColours'=6 a valid guess would be:
move = {"Sequence":