+ An AI program does not have to place all 40 pieces, but must at least place the flag ('F').
+ However, note that an AI program with no mobile pieces will immediately lose.
+ ---------------------------------------------------
+ Example:
+ ---------------------------------------------------
+ >> RED ../../agents/vixen/vixen.py 10 10
+ << FB8sB479B8
+ << BB31555583
+ << 6724898974
+ << 967B669999
+
+ In this example, the AI will be playing as "RED". It's opponent is the "vixen" sample AI.
+ The board width and height will always be 10.
+
+ The AI responds with a sensible setup for the "RED" player, putting the flag in the back corner.
+
+ 2. Turn
+ ---------------------------------------------------
+ Description
+ ---------------------------------------------------
+ After the Setup phase, a number of Turns occur, until the game ends.
+
+ Warning: The game may end between turns, in which case a "QUIT" message is sent.
+ The "QUIT" message will be sent in place of the first line in the synopsis shown below.
+ Read "3. End Game" below.
+ ---------------------------------------------------
+ Synopsis
+ ---------------------------------------------------
+ For the AI with colour "RED" only, and only on the very first turn:
+ >> START
+ >> $ROW1
+ >> $ROW2
+ >> $ROW3
+ >> $ROW4
+ >> $ROW5
+ >> $ROW6
+ >> $ROW7
+ >> $ROW8
+ >> $ROW9
+ >> $ROW10
+ << $X $Y $DIRECTION [$MULTIPLIER=1]
+ >> $X $Y $DIRECTION [$MULTIPLIER=1] $OUTCOME
+
+ For the AI with colour "RED" on every subsequent turn, and the AI with colour "BLUE" on all turns:
+ >> $LASTMOVE $OUTCOME
+ >> $ROW1
+ >> $ROW2
+ >> $ROW3
+ >> $ROW4
+ >> $ROW5
+ >> $ROW6
+ >> $ROW7
+ >> $ROW8
+ >> $ROW9
+ >> $ROW10
+ << $X $Y $DIRECTION [$MULTIPLIER=1]
+ >> $X $Y $DIRECTION [$MULTIPLIER=1] $OUTCOME | QUIT [$RESULT]
+ ---------------------------------------------------
+ Explanation:
+ ---------------------------------------------------
+
+ [Recieved data 1]
+
+ LASTMOVE - The last move made
+ - That is, the move made by the opponent AI, immediately before this move
+ - It is a direct copy of the opponent AI's response
+ - On the very first turn, since no move has been made, "START" is printed to the RED AI
+
+ OUTCOME - The interpretation of the move by the manager program; will be one of the following
+ - Successful, uneventful move: "OK"
+ - Illegal move: "ILLEGAL"
+ - The moved piece attacked and destroyed an opponent piece: "KILLS $ATTACKER_RANK $DEFENDER_RANK"
+ - ATTACKER_RANK and DEFENDER_RANK are the ranks of the attacking and defending piece respectively
+ - The moved piece was destroyed by an opponent piece that it attacked: "DIES $ATTACKER_RANK $DEFENDER_RANK"
+ - ATTACKER_RANK and DEFENDER_RANK are the ranks of the attacking and defending piece respectively
+ - The moved piece attacked an opponent piece, and both pieces were destroyed: "BOTHDIE $ATTACKER_RANK $DEFENDER_RANK"
+ - ATTACKER_RANK and DEFENDER_RANK are the ranks of the attacking and defending piece respectively
+ - Game ended due to the attacker capturing a flag: "VICTORY_FLAG"
+ - Game ended due to the destruction of a player's last mobile piece (either attacker or defender): "
+
+ ROW1 -> ROW10 - The state of the board will be printed
+ - Each line represents a row on the board, from the top downwards
+ - The characters are as desribed above in "GAME RULES"
+ - Enemy pieces will NOT be revealed, even if they have been involved in combat. They are always shown as '#'.
+ - It is recommended that AI's rely on the LASTMOVE and OUTCOME results to keep state
+ - Interpreting these lines is not necessary, or recommended
+ - They still exist because I say so. GET OVER IT.
+
+ [Sent data]
+
+ X - The x coordinate of the piece to be moved. Ranges from 0 (zero) to 9 (nine) (left to right)
+ Y - The y coordinate of the piece to be moved. Ranges from 0 (zero) to 9 (nine) (top to bottom)
+ DIRECTION - The direction to move the piece in. May be either "LEFT", "RIGHT", "UP" or "DOWN"
+ MULTIPLIER - Scouts may move more than one square.
+ - To move a scout multiple spaces, print an integer indicating the number of spaces immediately after DIRECTION
+
+ [Recieved data 2]
+
+ The manager program will check the validity of the move, and respond by repeating it back to the AI, followed by OUTCOME.
+ OUTCOME is as described above.
+ ---------------------------------------------------
+ Example:
+ ---------------------------------------------------
+
+ First turn for RED:
+ -------------------
+ >> START
+ >> FB8sB479B8
+ >> BB31555583
+ >> 6724898974
+ >> 967B669999
+ >> ..++..++..
+ >> ..++..++..
+ >> ##########
+ >> ##########
+ >> ##########
+ >> ##########
+ << 0 3 DOWN
+ >> 0 3 DOWN OK
+ -------------------
+ Continuing from the Setup example, the RED AI is told to start, and then the board is printed.
+ Note that only RED's pieces are revealed. The obstacles are always in the same place, as shown.
+ Refer to the "GAME RULES" section for an explanation of each piece character.
+
+ The AI decides to move its scout (9) at (0,3) downwards by one place.
+
+ The manager reports that this move was successful.
+
+ Second Turn for RED:
+ -------------------
+ >> 9 6 UP 3 BOTHDIE 9 9
+ >> FB8sB479B8
+ >> BB31555583
+ >> 6724898974
+ >> .67B66999.
+ >> 9.++..++..
+ >> ..++..++..
+ >> #########.
+ >> ##########
+ >> ##########
+ >> ##########
+ << 9 2 DOWN
+ >> 9 2 DOWN OK
+ -------------------
+ The next message recieved by the RED AI tells it that BLUE has moved its piece at (9,6) up by 3.
+ This brought the piece into contact with RED's scout (9) at (9,3)
+ Since BLUE's piece was also a scout (9), both pieces die, indicated by "BOTHDIE" followed by their ranks (9 and 9)
+
+ The board is printed again. Note that RED's first move is reflected
+ (the scout (9) at (0,4)), and BLUE's last move (both (9,6) and (9,3) are now empty).