Skip to content

toonsend/midway

Repository files navigation

#A Battleship Tournament Server Build Status

####Authentication

####Maps

####Playing a game


## request authentication ***

In the http header of any request you need to include your Midway API Key

curl -H "HTTP-MIDWAY-API-KEY: <%= @api_key %>" http://<%= @hostname %>/teams/<%= @team_id %>/maps

###Errors

{
  "error_code": "INVALID_API_KEY",
  "message": "The api key does not match the team_id"
}
  • INVALID_API_KEY, Api Key does not match team id
  • INVALID_TEAM_ID, Team Id does not exist
  • MISSING_API_KEY, Api Key is missing

## create map ####POST /teams/:team_id/maps ***

Adds a map to your team's list. You need to upload at least one map before you can play

###Request Parameters

  • grid map in a five element array of ships. A ship is of the form x pos, y pos, ship size, direction of ship. The grid must contain
| Type of ships    | Size |
|------------------|------|
| aircraft carrier | 5    |
| Battleship       | 4    |
| submarine        | 3    |
| cruiser          | 3    |
| destroyer        | 2    |
  • [[2, 1, 5, "across"], [0, 3, 4, "down"], [2, 6, 3, "across"], [6, 4, 3, "across"], [3, 4, 2, "down"]] would be
|   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 |   |   |   |   |   |   |   |   |   |   |
| 1 |   |   | x | x | x | x | x |   |   |   |
| 2 |   |   |   |   |   |   |   |   |   |   |
| 3 | x |   |   |   |   |   |   |   |   |   |
| 4 | x |   |   | x |   |   | x | x | x |   |
| 5 | x |   |   | x |   |   |   |   |   |   |
| 6 | x |   | x | x | x |   |   |   |   |   |
| 7 |   |   |   |   |   |   |   |   |   |   |
| 8 |   |   |   |   |   |   |   |   |   |   |
| 9 |   |   |   |   |   |   |   |   |   |   |

###Example Request

curl -H "HTTP-MIDWAY-API-KEY: <%= @api_key %>" -H "Content-Type: application/json" -X POST -d '{"grid":[[2, 1, 5, "across"], [0, 3, 4, "down"], [2, 6, 3, "across"], [6, 4, 3, "across"], [3, 4, 2, "down"]]}' http://<%= @hostname %>/teams/<%= @team_id %>/maps

###Example Response

The new map. If the POST was not successful then status code 422 will be returned along with the error which prevented the map from being created.

  • id Unique identifier for the map, used to update or delete it
  • error_code An error code, if applicable.
  • message An error message, if applicable.
{
  "id": "2"
}

###Errors

{
  "error_code": "SHIP_OUT_OF_BOUNDS",
  "message": "Ships are positioned outside of map"
}
  • NOT_ENOUGH_SHIPS, Not enough ships
  • TOO_MANY_SHIPS, Too many ships
  • WRONG_SHIP_SIZE, Ships are not of the required size
  • SHIPS_OVERLAP, Ships in collision
  • SHIP_OUT_OF_BOUNDS, Ship is positioned outside of map
  • BADLY_FORMED_REQUEST, Request is invalid

## list maps #### GET /teams/:team_id/maps ***

Gets a list of your teams maps

###Request paramaters:

none

###Example Request

curl -H "HTTP-MIDWAY-API-KEY: <%= @api_key %>" -H "Content-Type: application/json" http://<%= @hostname %>/teams/<%= @team_id %>/maps

###Example Response

The list of your maps.

  • grids An array of all the team's uploaded maps
  • error_code An error code, if applicable.
  • message An error message, if applicable.
{
  "grids": { 1 => [[0, 0, 5, "across"], [6, 2, 4, "across"], [3, 6, 3, "down"], [7, 8, 3, "across"], [4, 6, 2, "across"]],
             2 => [[2, 1, 5, "across"], [0, 3, 4, "down"], [2, 6, 3, "across"], [6, 4, 3, "across"], [3, 4, 2, "down"]]}
}

## delete map ####DELETE /teams/:team_id/maps/:id ***

Deletes the given map

###Request paramaters:

none

###Example Request

curl -H "HTTP-MIDWAY-API-KEY: <%= @api_key %>" -H "Content-Type: application/json" -X DELETE  http://<%= @hostname %>/teams/<%= @team_id %>/maps/1

###Example Response

  • id Unique identifier for the map, used to update or delete it

{"id":1}

###Errors

{
  "error_code": "MAP_NOT_FOUND",
  "message": {"error_code":"MAP_NOT_FOUND","message":"Map 1 not found."}
}
  • MAP_NOT_FOUND, Map with that team id and or id does not exist

## make a move ####POST /teams/:team_id/game ***

This plays your next move in the current game. Games are started and ended automatically.

###Request Parameters

  • move A two element array with the x and y position of your move
  • test If you pass 'true' to this option it will start a test game, irrespective of the tournament you are in

###Return Parameters

  • game_id The id of the current game
  • grid The current grid with 'x' marking any hit position
  • opponent_id Your opponents team id
  • status Status of the move can be "miss", "hit", "hit and destroyed"
  • move A two element array with the x and y position of your move
  • game_status Game status can be 'in_progress', 'completed'
  • moves Current move count

###Example Request

curl -H "HTTP-MIDWAY-API-KEY: <%= @api_key %>" -H "Content-Type: application/json" -X POST -d '{"move":[2,1]}' http://<%= @hostname %>/teams/<%= @team_id %>/game

###Example Response

{
  "game_id": 2,
  "grid": ["oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxo"]
  "opponent_id": 3,
  "status": "hit",
  "move": [2,1],
  "game_status": "completed",
  "moves": 34
}

###Errors

{
  "error_code": "OUT_OF_RANGE",
  "message": "move is outside of map"
}
  • OUT_OF_RANGE, move is outside of map
  • NO_GAME, There is currently no game to play
  • NO_TOURNAMENT, Your team is not currently in any in progress tournament
  • BADLY_FORMED_REQUEST, Request is invalid
  • NO_MAPS_UPLOADED, Your team does not have any maps so can not enter tournament

## game status ####GET /teams/:team_id/game ***

This returns the state of the current game

###Request Parameters

none

###Return Parameters

  • game_id The id of the current game
  • grid The current grid with 'x' marking any hit position
  • opponent_id Your opponents team id
  • game_status Game status can be 'in_progress', 'completed'
  • moves Current move count

###Example Request

curl -H "HTTP-MIDWAY-API-KEY: <%= @api_key %>" -H "Content-Type: application/json" http://<%= @hostname %>/teams/<%= @team_id %>/game

###Example Response

{
  "game_id":6,
  "grid": ["ox***xoxox","ox*****xox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxox","oxoxoxoxo"]
  "opponent_id":4,
  "game_status":"in_progress",
  "moves":27
}

About

Battleships tournament server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published