Merge pull request #45 from gnieark/master

master to dev
This commit is contained in:
Gnieark 2015-12-27 18:10:34 +01:00
commit 6d8f696af6
5 changed files with 725 additions and 227 deletions

10
.gitignore vendored
View File

@ -1,2 +1,12 @@
*/.DS_Store
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db
src/config.php
src/countBattles.txt

View File

@ -1,106 +1,324 @@
<p>Battleship is played in two steps:</p>Ces derniers doivent répondre selon les spécifications ci dessous
<ul><li>Place ships on the map</li>
<li>strikes</li>
</ul>
<p>At each turn of the game, Arena makes http(s) queries to your bots. This queries contains POST parameters. Your bots have to answer as it is specified here.</p>
<h2>Parameters' description sent by arena.</h2>
<table class="tabledoc"><tr><th>POST parameter</th><th>Description</th></tr>
<tr><td>game</td><td> string, always "Battleship". Is needed if your bot URL is used for several games.</td></tr>
<tr><td>match_id</td><td>string, matches this regex: ^[0-9]+-(1|2)$<br/>
First number (digits before hyphen) logs the match. Number after hyphen logs the bot.If you are the first player it's "1", otherwhise "2".<br/>
It could be usefull if you want to make statistics</td></tr>
<tr><td>act</td><td> Can have two values:<br/>
<ul>
<li>"init" We start the game, you have to place your ships.</li>
<li>"fight" Shoot.</li>
</ul></td></tr>
<tr><td>opponent</td><td>
Your opponent's authentification string
Chaîne de caractères identifiant votre adversaire. Ainsi, vous pouvez pousser le délire jusqu'à faire un algorythme qui s'adapte en fonction de l'adversaire et de l'historique des combats avec ce dernier.</td></tr>
<tr><td>width</td><td>Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.</td>
<tr><td>height</td><td>Entier, compris entre 1 et 100, bornes incluses, Vous indique la hauteur de la map.</td></tr>
<tr><td>ship1</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 1 case à placer.</td></tr>
<tr><td>ship2</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 2 cases à placer.</td></tr>
<tr><td>ship3</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 3 cases à placer.</td></tr>
<tr><td>...</td><td>...</td></tr>
<tr><td>ship6</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 6 cases à placer.</td></tr>
<tr><td>your_strikes</td>
<td>
<p>chaîne de caractères représentant un array au format JSON.<br/>
Ce parametre n'est envoyé que lors de la phase de tirs du jeu (act=fight). Il vous indique les tirs que vous avez déjà effectués et leur résultats.<br/>
Lors du premier tour de jeu, il représente un array vide</p>
<p><i>[ ]</i></p>
<p>Lors du deuxième tour de jeu, il contient le tir précédent et son résultat:</p>
<p><i>[{"target":"2,0","result":""}]</i></p>
<p>Lors du troisième tour de jeu, les deux tirs précédents</p>
<p><i>[{"target":"2,0","result":"hit"},{"target":"5,1","result":"hit"}]</i></p>
<p>Chaque tir est un sous array pour lesquels:</p>
<ul><li>L'index target indique les coordonées du tir x,y</li>
<li>result peut être
<ul>
<li>Vide "" signifie que le tir n'a rien touché</li>
<li>"hit" Un navire ennemi a été touché</li>
<li>"hit and sunk" Un navire ennemi a été touché et coulé</li>
</ul>
</li>
</ul>
</td></tr>
<tr><td>his_strikes</td><td>idem sauf qu'il s'agit du tir de l'adversaire.</td></tr>
</table>
<h2>Ce que doit retourner votre bot</h2>
<h3>Lors de l'initialisation de la partie</h3>
<p>Lors de l'initialisation d'une partie StupidIA VS StupidsIA, l'arène a envoyé au bot les parametres POST suivants:</p>
<pre>game=Battleship&amp;match_id=828-1&amp;act=init&amp;opponent=stupidIA&amp;width=10&amp;height=10&amp;ship1=0&amp;ship2=1&amp;ship3=2&amp;ship4=1&amp;ship5=1&amp;ship6=0</pre>
<p>Soit, sous forme plus lisible:</p>
<pre>
[game] => Battleship
[match_id] => 828-1
[act] => init
[opponent] => stupidIA
[width] => 10
[height] => 10
[ship1] => 0
[ship2] => 1
[ship3] => 2
[ship4] => 1
[ship5] => 1
[ship6] => 0
</pre>
<p>La page http que doit générer votre bot contient la position des navires.</p>
<p>Vous retournez une chaine de caractères codant tableau JSON ayant autant d'enregistrements que de navires.
Chaque navire est défini par les coordonnées de ses extrémités.</p>
<p>
Battleship is played in two stages :
</p>
<ul>
<li>La grille commence au point 0,0.</li>
<li>Les entiers; ordonnée et abscisses définissant un point sont séparés d'une virgule &quot;,&quot;.</li>
<li>Les deux points définissant les extrémités d'un navire sont séparés par un tiret &quot;-&quot;.</li>
<li>Boats placement on maps</li>
<li>Shootout</li>
</ul>
<h4>Exemple de placement de 5 bateaux tailles respectives 5, 4, 3, 3, 2 cases:</h4>
<pre>
["3,3-3,7","2,1-2,4","0,1-0,3","7,3-7,1","8,8-7,8"]
</pre>
<p>Bien évidemment si vos bateaux se chevauchent, ou si leur nombre et leur longueur ne correspond pas à la demande de l'arène, vous perdez la partie</p>
<p>L'ordre des bateaux n'a pas d'importance. De la même manière, pour un bateau l'ordre de ses points n'importe pas non plus.</p>
<p>Vu sur la grille, l'exemple précédent donnerait:</p>
<table class="battleshipGrid nofloat" id="tbl1">
<tr><td></td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr>
<tr><td>0</td><td class="empty" id="bot1-0-0"></td><td class="shipOn" id="bot1-0-1"></td><td class="shipOn" id="bot1-0-2"></td><td class="shipOn" id="bot1-0-3"></td><td class="empty" id="bot1-0-4"></td><td class="empty" id="bot1-0-5"></td><td class="empty" id="bot1-0-6"></td><td class="empty" id="bot1-0-7"></td><td class="empty" id="bot1-0-8"></td><td class="empty" id="bot1-0-9"></td></tr>
<tr><td>1</td><td class="empty" id="bot1-1-0"></td><td class="empty" id="bot1-1-1"></td><td class="empty" id="bot1-1-2"></td><td class="empty" id="bot1-1-3"></td><td class="empty" id="bot1-1-4"></td><td class="empty" id="bot1-1-5"></td><td class="empty" id="bot1-1-6"></td><td class="empty" id="bot1-1-7"></td><td class="empty" id="bot1-1-8"></td><td class="empty" id="bot1-1-9"></td></tr>
<tr><td>2</td><td class="empty" id="bot1-2-0"></td><td class="shipOn" id="bot1-2-1"></td><td class="shipOn" id="bot1-2-2"></td><td class="shipOn" id="bot1-2-3"></td><td class="shipOn" id="bot1-2-4"></td><td class="empty" id="bot1-2-5"></td><td class="empty" id="bot1-2-6"></td><td class="empty" id="bot1-2-7"></td><td class="empty" id="bot1-2-8"></td><td class="empty" id="bot1-2-9"></td></tr>
<tr><td>3</td><td class="empty" id="bot1-3-0"></td><td class="empty" id="bot1-3-1"></td><td class="empty" id="bot1-3-2"></td><td class="shipOn" id="bot1-3-3"></td><td class="shipOn" id="bot1-3-4"></td><td class="shipOn" id="bot1-3-5"></td><td class="shipOn" id="bot1-3-6"></td><td class="shipOn" id="bot1-3-7"></td><td class="empty" id="bot1-3-8"></td><td class="empty" id="bot1-3-9"></td></tr>
<tr><td>4</td><td class="empty" id="bot1-4-0"></td><td class="empty" id="bot1-4-1"></td><td class="empty" id="bot1-4-2"></td><td class="empty" id="bot1-4-3"></td><td class="empty" id="bot1-4-4"></td><td class="empty" id="bot1-4-5"></td><td class="empty" id="bot1-4-6"></td><td class="empty" id="bot1-4-7"></td><td class="empty" id="bot1-4-8"></td><td class="empty" id="bot1-4-9"></td></tr>
<tr><td>5</td><td class="empty" id="bot1-5-0"></td><td class="empty" id="bot1-5-1"></td><td class="empty" id="bot1-5-2"></td><td class="empty" id="bot1-5-3"></td><td class="empty" id="bot1-5-4"></td><td class="empty" id="bot1-5-5"></td><td class="empty" id="bot1-5-6"></td><td class="empty" id="bot1-5-7"></td><td class="empty" id="bot1-5-8"></td><td class="empty" id="bot1-5-9"></td></tr>
<tr><td>6</td><td class="empty" id="bot1-6-0"></td><td class="empty" id="bot1-6-1"></td><td class="empty" id="bot1-6-2"></td><td class="empty" id="bot1-6-3"></td><td class="empty" id="bot1-6-4"></td><td class="empty" id="bot1-6-5"></td><td class="empty" id="bot1-6-6"></td><td class="empty" id="bot1-6-7"></td><td class="empty" id="bot1-6-8"></td><td class="empty" id="bot1-6-9"></td></tr>
<tr><td>7</td><td class="empty" id="bot1-7-0"></td><td class="shipOn" id="bot1-7-1"></td><td class="shipOn" id="bot1-7-2"></td><td class="shipOn" id="bot1-7-3"></td><td class="empty" id="bot1-7-4"></td><td class="empty" id="bot1-7-5"></td><td class="empty" id="bot1-7-6"></td><td class="empty" id="bot1-7-7"></td><td class="shipOn" id="bot1-7-8"></td><td class="empty" id="bot1-7-9"></td></tr>
<tr><td>8</td><td class="empty" id="bot1-8-0"></td><td class="empty" id="bot1-8-1"></td><td class="empty" id="bot1-8-2"></td><td class="empty" id="bot1-8-3"></td><td class="empty" id="bot1-8-4"></td><td class="empty" id="bot1-8-5"></td><td class="empty" id="bot1-8-6"></td><td class="empty" id="bot1-8-7"></td><td class="shipOn" id="bot1-8-8"></td><td class="empty" id="bot1-8-9"></td></tr>
<tr><td>9</td><td class="empty" id="bot1-9-0"></td><td class="empty" id="bot1-9-1"></td><td class="empty" id="bot1-9-2"></td><td class="empty" id="bot1-9-3"></td><td class="empty" id="bot1-9-4"></td><td class="empty" id="bot1-9-5"></td><td class="empty" id="bot1-9-6"></td><td class="empty" id="bot1-9-7"></td><td class="empty" id="bot1-9-8"></td><td class="empty" id="bot1-9-9"></td></tr>
<p>
At each turn, the arena made HTTP(s) queries containing POST parameters, to your bots.<br/>
They must respond to the specifications below.
</p>
<h2>Descriptif des paramètres envoyés par l'arène</h2>
<table class="tabledoc">
<tr>
<th>Parameter</th>
<th>Description</th>
</tr>
<tr>
<td>game</td>
<td>
String, will always "Battleship".<br/>
Can be used if your url is used for several games.
</td>
</tr>
<tr>
<td>match_id</td>
<td>
String. Match the following regular expression : ^[0-9]+-(1|2)$<br/>
The first number (digits before the hyphen) identified the game.<br/>
The number after the hyphen indicates whether you are the first or second bot in the order to play.<br/>
It will serve you if your AI makes statistics on games.
</td>
</tr>
<tr>
<td>act</td>
<td>
Can take two values :<br/>
<ul>
<li>"init" : We start the game, you must place your ships</li>
<li>"fight" : You send a shot</li>
</ul>
</td>
</tr>
<tr>
<td>opponent</td>
<td>
String identifying your opponent.<br/>
So you can grow up delirium by developping an algorithm that adapts depending on the opponent and the history of fighting with it.
</td>
</tr>
<tr>
<td>width</td>
<td>Integer, between 1 and 100, inclusive, indicates the width of the map.</td>
</tr>
<tr>
<td>height</td>
<td>Integer, between 1 and 100, inclusive, indicates the height of the map.</td>
</tr>
<tr>
<td>ship1</td>
<td>Integer, between 0 and 10, inclusive, indicates the number of boats with length of 1 box to set.</td>
</tr>
<tr>
<td>ship2</td>
<td>Integer, between 0 and 10, inclusive, indicates the number of boats with length of 2 box to set.</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>ship6</td>
<td>Integer, between 0 and 10, inclusive, indicates the number of boats with length of 6 box to set.</td>
</tr>
<tr>
<td>your_strikes</td>
<td>
<p>
String, representing an array in JSON format.<br/>
This parameter is only sent when the game is in shooting phase (act=fight).<br/>
It tells you the shots you've already made and their results.<br/>
In the first round of play, it is an empty array.
</p>
<p>
<i>[ ]</i>
</p>
<p>
In the second round of game, it contains the previous shot and the result :
</p>
<p>
<i>[{"target":"2,0","result":""}]</i>
</p>
<p>
In the third round of play, the two previous shots :
</p>
<p>
<i>[{"target":"2,0","result":"hit"},{"target":"5,1","result":"hit"}]</i>
</p>
<p>
Each shot is a sub array for which :
</p>
<ul>
<li>The index target indicates the coordinates of the target shooting x,y</li>
<li>
result may be :
<ul>
<li>Empty "" means that the shot did not hit anything</li>
<li>"hit" An enemy ship has been hit</li>
<li>"hit and sunk" An enemy ship was hit and sunk</li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
<td>his_strikes</td>
<td>Same except that this is the shot of the opponent.</td>
</tr>
</table>
<h3>Lors du combat</h3>
<p> Voici quelques exemples des parametres envoyés par l'arène.</p>
<h4>Premier tour de jeu (your_strikes et his_strikes sont vides)</h4>
<h2>What must return your bot</h2>
<h3>During initialization of the game</h3>
<p>
Lors de l'initialisation d'une partie StupidIA VS StupidsIA, l'arène a envoyé au bot les parametres POST suivants :
During initialization of part StupidIA VS StupidIA, the arena send to your bot the following parameters in POST :
</p>
<pre>
game=Battleship&amp;match_id=828-1&amp;act=init&amp;opponent=stupidIA&amp;width=10&amp;height=10&amp;ship1=0&amp;ship2=1&amp;ship3=2&amp;ship4=1&amp;ship5=1&amp;ship6=0
</pre>
<p>
Or, more readable :
</p>
<pre>
[game] => Battleship
[match_id] => 828-1
[act] => init
[opponent] => stupidIA
[width] => 10
[height] => 10
[ship1] => 0
[ship2] => 1
[ship3] => 2
[ship4] => 1
[ship5] => 1
[ship6] => 0
</pre>
<p>
The HTTP page that must generate your bot contains the position of ships.
</p>
<p>
You return a character string that is a JSON array with as many records as ships.<br/>
Each ship is defined by the coordinates of its ends.
</p>
<ul>
<li>The grid starts at the point 0,0.</li>
<li>Integers, ordinate and abscissa, defining a point, are separated by a comma &quot;,&quot;.</li>
<li>The two points defining the ends a ship shall be separated by a hyphen &quot;-&quot;.</li>
</ul>
<h4>Placement example of 5 boats with respective sizes 5, 4, 3, 3, 2 boxes :</h4>
<pre>
["3,3-3,7","2,1-2,4","0,1-0,3","7,3-7,1","8,8-7,8"]
</pre>
<p>
Of course if your boat overlap, or if their number and length does not match the demand of the arena, you lose the game.
</p>
<p>
The order of the boats does not matter.<br/>
Similarly, for a boat, the order of its points does not matter either.
</p>
<p>
Seen on the grid, the example above would be :
</p>
<table class="battleshipGrid nofloat" id="tbl1">
<tr>
<td></td>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>0</td>
<td class="empty" id="bot1-0-0"></td>
<td class="shipOn" id="bot1-0-1"></td>
<td class="shipOn" id="bot1-0-2"></td>
<td class="shipOn" id="bot1-0-3"></td>
<td class="empty" id="bot1-0-4"></td>
<td class="empty" id="bot1-0-5"></td>
<td class="empty" id="bot1-0-6"></td>
<td class="empty" id="bot1-0-7"></td>
<td class="empty" id="bot1-0-8"></td>
<td class="empty" id="bot1-0-9"></td>
</tr>
<tr>
<td>1</td>
<td class="empty" id="bot1-1-0"></td>
<td class="empty" id="bot1-1-1"></td>
<td class="empty" id="bot1-1-2"></td>
<td class="empty" id="bot1-1-3"></td>
<td class="empty" id="bot1-1-4"></td>
<td class="empty" id="bot1-1-5"></td>
<td class="empty" id="bot1-1-6"></td>
<td class="empty" id="bot1-1-7"></td>
<td class="empty" id="bot1-1-8"></td>
<td class="empty" id="bot1-1-9"></td>
</tr>
<tr>
<td>2</td>
<td class="empty" id="bot1-2-0"></td>
<td class="shipOn" id="bot1-2-1"></td>
<td class="shipOn" id="bot1-2-2"></td>
<td class="shipOn" id="bot1-2-3"></td>
<td class="shipOn" id="bot1-2-4"></td>
<td class="empty" id="bot1-2-5"></td>
<td class="empty" id="bot1-2-6"></td>
<td class="empty" id="bot1-2-7"></td>
<td class="empty" id="bot1-2-8"></td>
<td class="empty" id="bot1-2-9"></td>
</tr>
<tr>
<td>3</td>
<td class="empty" id="bot1-3-0"></td>
<td class="empty" id="bot1-3-1"></td>
<td class="empty" id="bot1-3-2"></td>
<td class="shipOn" id="bot1-3-3"></td>
<td class="shipOn" id="bot1-3-4"></td>
<td class="shipOn" id="bot1-3-5"></td>
<td class="shipOn" id="bot1-3-6"></td>
<td class="shipOn" id="bot1-3-7"></td>
<td class="empty" id="bot1-3-8"></td>
<td class="empty" id="bot1-3-9"></td>
</tr>
<tr>
<td>4</td>
<td class="empty" id="bot1-4-0"></td>
<td class="empty" id="bot1-4-1"></td>
<td class="empty" id="bot1-4-2"></td>
<td class="empty" id="bot1-4-3"></td>
<td class="empty" id="bot1-4-4"></td>
<td class="empty" id="bot1-4-5"></td>
<td class="empty" id="bot1-4-6"></td>
<td class="empty" id="bot1-4-7"></td>
<td class="empty" id="bot1-4-8"></td>
<td class="empty" id="bot1-4-9"></td>
</tr>
<tr>
<td>5</td>
<td class="empty" id="bot1-5-0"></td>
<td class="empty" id="bot1-5-1"></td>
<td class="empty" id="bot1-5-2"></td>
<td class="empty" id="bot1-5-3"></td>
<td class="empty" id="bot1-5-4"></td>
<td class="empty" id="bot1-5-5"></td>
<td class="empty" id="bot1-5-6"></td>
<td class="empty" id="bot1-5-7"></td>
<td class="empty" id="bot1-5-8"></td>
<td class="empty" id="bot1-5-9"></td>
</tr>
<tr>
<td>6</td>
<td class="empty" id="bot1-6-0"></td>
<td class="empty" id="bot1-6-1"></td>
<td class="empty" id="bot1-6-2"></td>
<td class="empty" id="bot1-6-3"></td>
<td class="empty" id="bot1-6-4"></td>
<td class="empty" id="bot1-6-5"></td>
<td class="empty" id="bot1-6-6"></td>
<td class="empty" id="bot1-6-7"></td>
<td class="empty" id="bot1-6-8"></td>
<td class="empty" id="bot1-6-9"></td>
</tr>
<tr>
<td>7</td>
<td class="empty" id="bot1-7-0"></td>
<td class="shipOn" id="bot1-7-1"></td>
<td class="shipOn" id="bot1-7-2"></td>
<td class="shipOn" id="bot1-7-3"></td>
<td class="empty" id="bot1-7-4"></td>
<td class="empty" id="bot1-7-5"></td>
<td class="empty" id="bot1-7-6"></td>
<td class="empty" id="bot1-7-7"></td>
<td class="shipOn" id="bot1-7-8"></td>
<td class="empty" id="bot1-7-9"></td>
</tr>
<tr>
<td>8</td>
<td class="empty" id="bot1-8-0"></td>
<td class="empty" id="bot1-8-1"></td>
<td class="empty" id="bot1-8-2"></td>
<td class="empty" id="bot1-8-3"></td>
<td class="empty" id="bot1-8-4"></td>
<td class="empty" id="bot1-8-5"></td>
<td class="empty" id="bot1-8-6"></td>
<td class="empty" id="bot1-8-7"></td>
<td class="shipOn" id="bot1-8-8"></td>
<td class="empty" id="bot1-8-9"></td>
</tr>
<tr>
<td>9</td>
<td class="empty" id="bot1-9-0"></td>
<td class="empty" id="bot1-9-1"></td>
<td class="empty" id="bot1-9-2"></td>
<td class="empty" id="bot1-9-3"></td>
<td class="empty" id="bot1-9-4"></td>
<td class="empty" id="bot1-9-5"></td>
<td class="empty" id="bot1-9-6"></td>
<td class="empty" id="bot1-9-7"></td>
<td class="empty" id="bot1-9-8"></td>
<td class="empty" id="bot1-9-9"></td>
</tr>
</table>
<h3>During the fight</h3>
<p>
Examples of parameters sent by the arena.
</p>
<h4>First round (your_strikes and his_strikes are empty)</h4>
<pre>
[game] => Battleship
[match_id] => 834-1
@ -116,9 +334,8 @@ Chaque navire est défini par les coordonnées de ses extrémités.</p>
[ship6] => 0
[your_strikes] => []
[his_strikes] => []
)
</pre>
<h4>Deuxième tour de jeu</h4>
<h4>Second round</h4>
<pre>
[game] => Battleship
[match_id] => 834-1
@ -135,7 +352,7 @@ Chaque navire est défini par les coordonnées de ses extrémités.</p>
[your_strikes] => [{"target":"4,6","result":""}]
[his_strikes] => [{"target":"7,8","result":""}]
</pre>
<h4>Troisième tour de jeu</h4>
<h4>Third round</h4>
<pre>
[game] => Battleship
[match_id] => 834-1
@ -152,8 +369,10 @@ Chaque navire est défini par les coordonnées de ses extrémités.</p>
[your_strikes] => [{"target":"4,6","result":""},{"target":"3,9","result":"hit"}]
[his_strikes] => [{"target":"7,8","result":""},{"target":"7,8","result":""}]
</pre>
<h4>Vous devez tout simplement retourner l'adresse de la case sur laquelle vous souhaitez x,y</h4>
<h4>You simply need to return the address of the box where you want to shoot in the form of x,y</h4>
<pre>
6,9
6,9
</pre>
<p>Pour tirer aux coordonnées x=6 y=9</p>
<p>
To shoot on the coordinates x=6 y=9
</p>

View File

@ -1,103 +1,322 @@
<p>La bataille navale se joue en deux phases:</p>
<ul><li>Placement des bateaux sur les maps</li>
<li>Echange de tirs</li>
<p>
La bataille navale se joue en deux phases :
</p>
<ul>
<li>Placement des bateaux sur les maps</li>
<li>Echange de tirs</li>
</ul>
<p>A chaque tour de jeu l'arène fait des requetes http(s) contenant des paramètres de type POST, vers vos bots. Ces derniers doivent répondre selon les spécifications ci dessous.</p>
<p>
A chaque tour de jeu l'arène fait des requetes http(s) contenant des paramètres de type POST, vers vos bots.<br/>
Ces derniers doivent répondre selon les spécifications ci dessous.
</p>
<h2>Descriptif des paramètres envoyés par l'arène</h2>
<table class="tabledoc"><tr><th>Paramètre</th><th>Description</th></tr>
<tr><td>game</td><td>chaîne de caractères, sera toujours "Battleship" Peut servir si votre url sert à plusieurs jeux</td></tr>
<tr><td>match_id</td><td>chaîne de caractères. répond à l'expression régulière suivante: ^[0-9]+-(1|2)$<br/>
Le premier nombre (digits avant le tiret) identifie le match. Le numéro après le tiret vous indique si vous êtes le bot 1 ou le bot 2 dans l'ordre de jeu.<br/>
Ça vous servira si votre IA fait des statistiques sur les matchs.</td></tr>
<tr><td>act</td><td> Peut prendre deux valeurs:<br/>
<ul>
<li>"init" On démarre la partie, vous devez placer vos bateaux</li>
<li>"fight" Vous envoyez un tir</li>
</ul></td></tr>
<tr><td>opponent</td><td>Chaîne de caractères identifiant votre adversaire. Ainsi, vous pouvez pousser le délire jusqu'à faire un algorythme qui s'adapte en fonction de l'adversaire et de l'historique des combats avec ce dernier.</td></tr>
<tr><td>width</td><td>Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.</td>
<tr><td>height</td><td>Entier, compris entre 1 et 100, bornes incluses, Vous indique la hauteur de la map.</td></tr>
<tr><td>ship1</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 1 case à placer.</td></tr>
<tr><td>ship2</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 2 cases à placer.</td></tr>
<tr><td>ship3</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 3 cases à placer.</td></tr>
<tr><td>...</td><td>...</td></tr>
<tr><td>ship6</td><td>Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 6 cases à placer.</td></tr>
<tr><td>your_strikes</td>
<td>
<p>chaîne de caractères représentant un array au format JSON.<br/>
Ce parametre n'est envoyé que lors de la phase de tirs du jeu (act=fight). Il vous indique les tirs que vous avez déjà effectués et leur résultats.<br/>
Lors du premier tour de jeu, il représente un array vide</p>
<p><i>[ ]</i></p>
<p>Lors du deuxième tour de jeu, il contient le tir précédent et son résultat:</p>
<p><i>[{"target":"2,0","result":""}]</i></p>
<p>Lors du troisième tour de jeu, les deux tirs précédents</p>
<p><i>[{"target":"2,0","result":"hit"},{"target":"5,1","result":"hit"}]</i></p>
<p>Chaque tir est un sous array pour lesquels:</p>
<ul><li>L'index target indique les coordonées du tir x,y</li>
<li>result peut être
<ul>
<li>Vide "" signifie que le tir n'a rien touché</li>
<li>"hit" Un navire ennemi a été touché</li>
<li>"hit and sunk" Un navire ennemi a été touché et coulé</li>
</ul>
</li>
</ul>
</td></tr>
<tr><td>his_strikes</td><td>idem sauf qu'il s'agit du tir de l'adversaire.</td></tr>
<table class="tabledoc">
<tr>
<th>Paramètre</th>
<th>Description</th>
</tr>
<tr>
<td>game</td>
<td>
Chaîne de caractères, sera toujours "Battleship".<br/>
Peut servir si votre url sert à plusieurs jeux.
</td>
</tr>
<tr>
<td>match_id</td>
<td>
Chaîne de caractères. Répond à l'expression régulière suivante: ^[0-9]+-(1|2)$<br/>
Le premier nombre (digits avant le tiret) identifie le match.<br/>
Le numéro après le tiret vous indique si vous êtes le bot 1 ou le bot 2 dans l'ordre de jeu.<br/>
Ça vous servira si votre IA fait des statistiques sur les matchs.
</td>
</tr>
<tr>
<td>act</td>
<td>
Peut prendre deux valeurs :<br/>
<ul>
<li>"init" : On démarre la partie, vous devez placer vos bateaux</li>
<li>"fight" : Vous envoyez un tir</li>
</ul>
</td>
</tr>
<tr>
<td>opponent</td>
<td>
Chaîne de caractères identifiant votre adversaire.<br/>
Ainsi, vous pouvez pousser le délire jusqu'à faire un algorythme qui s'adapte en fonction de l'adversaire et de l'historique des combats avec ce dernier.
</td>
</tr>
<tr>
<td>width</td>
<td>Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.</td>
</tr>
<tr>
<td>height</td>
<td>Entier, compris entre 1 et 100, bornes incluses, vous indique la hauteur de la map.</td>
</tr>
<tr>
<td>ship1</td>
<td>Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 1 case à placer.</td>
</tr>
<tr>
<td>ship2</td>
<td>Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 2 cases à placer.</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>ship6</td>
<td>Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 6 cases à placer.</td>
</tr>
<tr>
<td>your_strikes</td>
<td>
<p>
Chaîne de caractères représentant un array au format JSON.<br/>
Ce parametre n'est envoyé que lors de la phase de tirs du jeu (act=fight).<br/>
Il vous indique les tirs que vous avez déjà effectués et leur résultats.<br/>
Lors du premier tour de jeu, il représente un array vide.
</p>
<p>
<i>[ ]</i>
</p>
<p>
Lors du deuxième tour de jeu, il contient le tir précédent et son résultat :
</p>
<p>
<i>[{"target":"2,0","result":""}]</i>
</p>
<p>
Lors du troisième tour de jeu, les deux tirs précédents :
</p>
<p>
<i>[{"target":"2,0","result":"hit"},{"target":"5,1","result":"hit"}]</i>
</p>
<p>
Chaque tir est un sous array pour lesquels:
</p>
<ul>
<li>L'index target indique les coordonnées du tir x,y</li>
<li>
result peut être :
<ul>
<li>Vide "" signifie que le tir n'a rien touché</li>
<li>"hit" Un navire ennemi a été touché</li>
<li>"hit and sunk" Un navire ennemi a été touché et coulé</li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
<td>his_strikes</td>
<td>Idem sauf qu'il s'agit du tir de l'adversaire.</td>
</tr>
</table>
<h2>Ce que doit retourner votre bot</h2>
<h3>Lors de l'initialisation de la partie</h3>
<p>Lors de l'initialisation d'une partie StupidIA VS StupidsIA, l'arène a envoyé au bot les parametres POST suivants:</p>
<pre>game=Battleship&amp;match_id=828-1&amp;act=init&amp;opponent=stupidIA&amp;width=10&amp;height=10&amp;ship1=0&amp;ship2=1&amp;ship3=2&amp;ship4=1&amp;ship5=1&amp;ship6=0</pre>
<p>Soit, sous forme plus lisible:</p>
<p>
Lors de l'initialisation d'une partie StupidIA VS StupidsIA, l'arène a envoyé au bot les parametres POST suivants :
</p>
<pre>
[game] => Battleship
[match_id] => 828-1
[act] => init
[opponent] => stupidIA
[width] => 10
[height] => 10
[ship1] => 0
[ship2] => 1
[ship3] => 2
[ship4] => 1
[ship5] => 1
[ship6] => 0
game=Battleship&amp;match_id=828-1&amp;act=init&amp;opponent=stupidIA&amp;width=10&amp;height=10&amp;ship1=0&amp;ship2=1&amp;ship3=2&amp;ship4=1&amp;ship5=1&amp;ship6=0
</pre>
<p>La page http que doit générer votre bot contient la position des navires.</p>
<p>Vous retournez une chaine de caractères codant tableau JSON ayant autant d'enregistrements que de navires.
Chaque navire est défini par les coordonnées de ses extrémités.</p>
<p>
Soit, sous forme plus lisible :
</p>
<pre>
[game] => Battleship
[match_id] => 828-1
[act] => init
[opponent] => stupidIA
[width] => 10
[height] => 10
[ship1] => 0
[ship2] => 1
[ship3] => 2
[ship4] => 1
[ship5] => 1
[ship6] => 0
</pre>
<p>
La page http que doit générer votre bot contient la position des navires.
</p>
<p>
Vous retournez une chaine de caractères qui est un tableau JSON ayant autant d'enregistrements que de navires.<br/>
Chaque navire est défini par les coordonnées de ses extrémités.
</p>
<ul>
<li>La grille commence au point 0,0.</li>
<li>Les entiers; ordonnée et abscisses définissant un point sont séparés d'une virgule &quot;,&quot;.</li>
<li>Les deux points définissant les extrémités d'un navire sont séparés par un tiret &quot;-&quot;.</li>
<li>La grille commence au point 0,0.</li>
<li>Les entiers, ordonnée et abscisses, définissant un point, sont séparés d'une virgule &quot;,&quot;.</li>
<li>Les deux points définissant les extrémités d'un navire sont séparés par un tiret &quot;-&quot;.</li>
</ul>
<h4>Exemple de placement de 5 bateaux tailles respectives 5, 4, 3, 3, 2 cases:</h4>
<h4>Exemple de placement de 5 bateaux tailles respectives 5, 4, 3, 3, 2 cases :</h4>
<pre>
["3,3-3,7","2,1-2,4","0,1-0,3","7,3-7,1","8,8-7,8"]
["3,3-3,7","2,1-2,4","0,1-0,3","7,3-7,1","8,8-7,8"]
</pre>
<p>Bien évidemment si vos bateaux se chevauchent, ou si leur nombre et leur longueur ne correspond pas à la demande de l'arène, vous perdez la partie</p>
<p>L'ordre des bateaux n'a pas d'importance. De la même manière, pour un bateau l'ordre de ses points n'importe pas non plus.</p>
<p>Vu sur la grille, l'exemple précédent donnerait:</p>
<p>
Bien évidemment si vos bateaux se chevauchent, ou si leur nombre et leur longueur ne correspond pas à la demande de l'arène, vous perdez la partie.
</p>
<p>
L'ordre des bateaux n'a pas d'importance.<br/>
De la même manière, pour un bateau, l'ordre de ses points n'importe pas non plus.
</p>
<p>
Vu sur la grille, l'exemple précédent donnerait :
</p>
<table class="battleshipGrid nofloat" id="tbl1">
<tr><td></td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr>
<tr><td>0</td><td class="empty" id="bot1-0-0"></td><td class="shipOn" id="bot1-0-1"></td><td class="shipOn" id="bot1-0-2"></td><td class="shipOn" id="bot1-0-3"></td><td class="empty" id="bot1-0-4"></td><td class="empty" id="bot1-0-5"></td><td class="empty" id="bot1-0-6"></td><td class="empty" id="bot1-0-7"></td><td class="empty" id="bot1-0-8"></td><td class="empty" id="bot1-0-9"></td></tr>
<tr><td>1</td><td class="empty" id="bot1-1-0"></td><td class="empty" id="bot1-1-1"></td><td class="empty" id="bot1-1-2"></td><td class="empty" id="bot1-1-3"></td><td class="empty" id="bot1-1-4"></td><td class="empty" id="bot1-1-5"></td><td class="empty" id="bot1-1-6"></td><td class="empty" id="bot1-1-7"></td><td class="empty" id="bot1-1-8"></td><td class="empty" id="bot1-1-9"></td></tr>
<tr><td>2</td><td class="empty" id="bot1-2-0"></td><td class="shipOn" id="bot1-2-1"></td><td class="shipOn" id="bot1-2-2"></td><td class="shipOn" id="bot1-2-3"></td><td class="shipOn" id="bot1-2-4"></td><td class="empty" id="bot1-2-5"></td><td class="empty" id="bot1-2-6"></td><td class="empty" id="bot1-2-7"></td><td class="empty" id="bot1-2-8"></td><td class="empty" id="bot1-2-9"></td></tr>
<tr><td>3</td><td class="empty" id="bot1-3-0"></td><td class="empty" id="bot1-3-1"></td><td class="empty" id="bot1-3-2"></td><td class="shipOn" id="bot1-3-3"></td><td class="shipOn" id="bot1-3-4"></td><td class="shipOn" id="bot1-3-5"></td><td class="shipOn" id="bot1-3-6"></td><td class="shipOn" id="bot1-3-7"></td><td class="empty" id="bot1-3-8"></td><td class="empty" id="bot1-3-9"></td></tr>
<tr><td>4</td><td class="empty" id="bot1-4-0"></td><td class="empty" id="bot1-4-1"></td><td class="empty" id="bot1-4-2"></td><td class="empty" id="bot1-4-3"></td><td class="empty" id="bot1-4-4"></td><td class="empty" id="bot1-4-5"></td><td class="empty" id="bot1-4-6"></td><td class="empty" id="bot1-4-7"></td><td class="empty" id="bot1-4-8"></td><td class="empty" id="bot1-4-9"></td></tr>
<tr><td>5</td><td class="empty" id="bot1-5-0"></td><td class="empty" id="bot1-5-1"></td><td class="empty" id="bot1-5-2"></td><td class="empty" id="bot1-5-3"></td><td class="empty" id="bot1-5-4"></td><td class="empty" id="bot1-5-5"></td><td class="empty" id="bot1-5-6"></td><td class="empty" id="bot1-5-7"></td><td class="empty" id="bot1-5-8"></td><td class="empty" id="bot1-5-9"></td></tr>
<tr><td>6</td><td class="empty" id="bot1-6-0"></td><td class="empty" id="bot1-6-1"></td><td class="empty" id="bot1-6-2"></td><td class="empty" id="bot1-6-3"></td><td class="empty" id="bot1-6-4"></td><td class="empty" id="bot1-6-5"></td><td class="empty" id="bot1-6-6"></td><td class="empty" id="bot1-6-7"></td><td class="empty" id="bot1-6-8"></td><td class="empty" id="bot1-6-9"></td></tr>
<tr><td>7</td><td class="empty" id="bot1-7-0"></td><td class="shipOn" id="bot1-7-1"></td><td class="shipOn" id="bot1-7-2"></td><td class="shipOn" id="bot1-7-3"></td><td class="empty" id="bot1-7-4"></td><td class="empty" id="bot1-7-5"></td><td class="empty" id="bot1-7-6"></td><td class="empty" id="bot1-7-7"></td><td class="shipOn" id="bot1-7-8"></td><td class="empty" id="bot1-7-9"></td></tr>
<tr><td>8</td><td class="empty" id="bot1-8-0"></td><td class="empty" id="bot1-8-1"></td><td class="empty" id="bot1-8-2"></td><td class="empty" id="bot1-8-3"></td><td class="empty" id="bot1-8-4"></td><td class="empty" id="bot1-8-5"></td><td class="empty" id="bot1-8-6"></td><td class="empty" id="bot1-8-7"></td><td class="shipOn" id="bot1-8-8"></td><td class="empty" id="bot1-8-9"></td></tr>
<tr><td>9</td><td class="empty" id="bot1-9-0"></td><td class="empty" id="bot1-9-1"></td><td class="empty" id="bot1-9-2"></td><td class="empty" id="bot1-9-3"></td><td class="empty" id="bot1-9-4"></td><td class="empty" id="bot1-9-5"></td><td class="empty" id="bot1-9-6"></td><td class="empty" id="bot1-9-7"></td><td class="empty" id="bot1-9-8"></td><td class="empty" id="bot1-9-9"></td></tr>
<tr>
<td></td>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>0</td>
<td class="empty" id="bot1-0-0"></td>
<td class="shipOn" id="bot1-0-1"></td>
<td class="shipOn" id="bot1-0-2"></td>
<td class="shipOn" id="bot1-0-3"></td>
<td class="empty" id="bot1-0-4"></td>
<td class="empty" id="bot1-0-5"></td>
<td class="empty" id="bot1-0-6"></td>
<td class="empty" id="bot1-0-7"></td>
<td class="empty" id="bot1-0-8"></td>
<td class="empty" id="bot1-0-9"></td>
</tr>
<tr>
<td>1</td>
<td class="empty" id="bot1-1-0"></td>
<td class="empty" id="bot1-1-1"></td>
<td class="empty" id="bot1-1-2"></td>
<td class="empty" id="bot1-1-3"></td>
<td class="empty" id="bot1-1-4"></td>
<td class="empty" id="bot1-1-5"></td>
<td class="empty" id="bot1-1-6"></td>
<td class="empty" id="bot1-1-7"></td>
<td class="empty" id="bot1-1-8"></td>
<td class="empty" id="bot1-1-9"></td>
</tr>
<tr>
<td>2</td>
<td class="empty" id="bot1-2-0"></td>
<td class="shipOn" id="bot1-2-1"></td>
<td class="shipOn" id="bot1-2-2"></td>
<td class="shipOn" id="bot1-2-3"></td>
<td class="shipOn" id="bot1-2-4"></td>
<td class="empty" id="bot1-2-5"></td>
<td class="empty" id="bot1-2-6"></td>
<td class="empty" id="bot1-2-7"></td>
<td class="empty" id="bot1-2-8"></td>
<td class="empty" id="bot1-2-9"></td>
</tr>
<tr>
<td>3</td>
<td class="empty" id="bot1-3-0"></td>
<td class="empty" id="bot1-3-1"></td>
<td class="empty" id="bot1-3-2"></td>
<td class="shipOn" id="bot1-3-3"></td>
<td class="shipOn" id="bot1-3-4"></td>
<td class="shipOn" id="bot1-3-5"></td>
<td class="shipOn" id="bot1-3-6"></td>
<td class="shipOn" id="bot1-3-7"></td>
<td class="empty" id="bot1-3-8"></td>
<td class="empty" id="bot1-3-9"></td>
</tr>
<tr>
<td>4</td>
<td class="empty" id="bot1-4-0"></td>
<td class="empty" id="bot1-4-1"></td>
<td class="empty" id="bot1-4-2"></td>
<td class="empty" id="bot1-4-3"></td>
<td class="empty" id="bot1-4-4"></td>
<td class="empty" id="bot1-4-5"></td>
<td class="empty" id="bot1-4-6"></td>
<td class="empty" id="bot1-4-7"></td>
<td class="empty" id="bot1-4-8"></td>
<td class="empty" id="bot1-4-9"></td>
</tr>
<tr>
<td>5</td>
<td class="empty" id="bot1-5-0"></td>
<td class="empty" id="bot1-5-1"></td>
<td class="empty" id="bot1-5-2"></td>
<td class="empty" id="bot1-5-3"></td>
<td class="empty" id="bot1-5-4"></td>
<td class="empty" id="bot1-5-5"></td>
<td class="empty" id="bot1-5-6"></td>
<td class="empty" id="bot1-5-7"></td>
<td class="empty" id="bot1-5-8"></td>
<td class="empty" id="bot1-5-9"></td>
</tr>
<tr>
<td>6</td>
<td class="empty" id="bot1-6-0"></td>
<td class="empty" id="bot1-6-1"></td>
<td class="empty" id="bot1-6-2"></td>
<td class="empty" id="bot1-6-3"></td>
<td class="empty" id="bot1-6-4"></td>
<td class="empty" id="bot1-6-5"></td>
<td class="empty" id="bot1-6-6"></td>
<td class="empty" id="bot1-6-7"></td>
<td class="empty" id="bot1-6-8"></td>
<td class="empty" id="bot1-6-9"></td>
</tr>
<tr>
<td>7</td>
<td class="empty" id="bot1-7-0"></td>
<td class="shipOn" id="bot1-7-1"></td>
<td class="shipOn" id="bot1-7-2"></td>
<td class="shipOn" id="bot1-7-3"></td>
<td class="empty" id="bot1-7-4"></td>
<td class="empty" id="bot1-7-5"></td>
<td class="empty" id="bot1-7-6"></td>
<td class="empty" id="bot1-7-7"></td>
<td class="shipOn" id="bot1-7-8"></td>
<td class="empty" id="bot1-7-9"></td>
</tr>
<tr>
<td>8</td>
<td class="empty" id="bot1-8-0"></td>
<td class="empty" id="bot1-8-1"></td>
<td class="empty" id="bot1-8-2"></td>
<td class="empty" id="bot1-8-3"></td>
<td class="empty" id="bot1-8-4"></td>
<td class="empty" id="bot1-8-5"></td>
<td class="empty" id="bot1-8-6"></td>
<td class="empty" id="bot1-8-7"></td>
<td class="shipOn" id="bot1-8-8"></td>
<td class="empty" id="bot1-8-9"></td>
</tr>
<tr>
<td>9</td>
<td class="empty" id="bot1-9-0"></td>
<td class="empty" id="bot1-9-1"></td>
<td class="empty" id="bot1-9-2"></td>
<td class="empty" id="bot1-9-3"></td>
<td class="empty" id="bot1-9-4"></td>
<td class="empty" id="bot1-9-5"></td>
<td class="empty" id="bot1-9-6"></td>
<td class="empty" id="bot1-9-7"></td>
<td class="empty" id="bot1-9-8"></td>
<td class="empty" id="bot1-9-9"></td>
</tr>
</table>
<h3>Lors du combat</h3>
<p> Voici quelques exemples des parametres envoyés par l'arène.</p>
<p>
Voici quelques exemples des parametres envoyés par l'arène.
</p>
<h4>Premier tour de jeu (your_strikes et his_strikes sont vides)</h4>
<pre>
[game] => Battleship
@ -114,7 +333,6 @@ Chaque navire est défini par les coordonnées de ses extrémités.</p>
[ship6] => 0
[your_strikes] => []
[his_strikes] => []
)
</pre>
<h4>Deuxième tour de jeu</h4>
<pre>
@ -150,8 +368,10 @@ Chaque navire est défini par les coordonnées de ses extrémités.</p>
[your_strikes] => [{"target":"4,6","result":""},{"target":"3,9","result":"hit"}]
[his_strikes] => [{"target":"7,8","result":""},{"target":"7,8","result":""}]
</pre>
<h4>Vous devez tout simplement retourner l'adresse de la case sur laquelle vous souhaitez x,y</h4>
<h4>Vous devez tout simplement retourner l'adresse de la case sur laquelle vous souhaitez tirer sous forme de x,y</h4>
<pre>
6,9
6,9
</pre>
<p>Pour tirer aux coordonnées x=6 y=9</p>
<p>
Pour tirer aux coordonnées x=6 y=9
</p>

View File

@ -0,0 +1,42 @@
<h1>Functioning of duels for noughts and crosses</h1>
<p>
Do not trust the animated GIF of the site's home page.<br/>
It's the illustration of the overall operation of the arena, but it is wrong : the tictactoe only needs to send 10 variables to the bots.<br/>
The choice was therefore made to pass them by GET parameters and not by POST as shown in the animation.
</p>
<h2>Requirements : GET variables and HTML return</h2>
<p>
Your program does not have to manage a whole part of noughts and crosses, just one lap.
</p>
<p>
The arbitrator program (the arena) build a request as follows :
</p>
<pre>
https://votreUrl/?you=O&amp;0-0=&amp;0-1=O&amp;0-2=X&amp;1-0=X&amp;1-1=X&amp;1-2=O&amp;2-0=O&amp;2-1=&amp;2-2=X
</pre>
<p>
The GET parameter "you" indicate what is your symbol in the noughts and crosses grid<br/>
Classically : "X" or "O"
</p>
<p>
For each box of the noughts and crosses grid, a GET parameter corresponding to the coordinates ("0-0", "0-1", etc ...) is indicated to you.<br/>
He can be :
</p>
<ul>
<li>Your symbol (which means that you have already played there)</li>
<li>The symbol of your opponent. He has already played in this box</li>
<li>Nothing, the box is available</li>
</ul>
<p>
Your program chooses the box on which he wishes to play in view of the grid and returns its coordinates.
</p>
<p>
The result of the HTTP (s) request can only be : "0-0" ou "0-1" ou "0-2" ou "1-0" etc.
</p>
<p>
A player (an AI) that answers something else, or responds with the coordinates of a box already played, loses the game.
</p>
<h2>Publish your program to test it then release into to the arena</h2>
<p>
The form is on <a href="/">website home page</a> !
</p>

View File

@ -1,35 +1,42 @@
<h1>Fonctionnement des duels de morpion</h1>
<p>Ne vous fiez pas au GIF animé de la page d'accueil du site. Il est là pour illustrer le fonctionnement global de l'arène, mais il est faux: Le tictactoe n'a besoin d'envoyer que 10 variables, de longueur maîtrisée, aux bots. le choix a donc été fait de les passer en paramètres GET et non POST comme indiqué sur l'animation.</p>
<h2>Spécifications: variables GET et retours HTML</h2>
<p>Votre programme n'a pas à gérer une partie entière de morpion, juste un tour.</p>
<p>Le programme arbitre (cette arène) fait une requête construite de la manière suivante:</p>
<pre><code>https://votreUrl/?you=O&amp;0-0=&amp;0-1=O&amp;0-2=X&amp;1-0=X&amp;1-1=X&amp;1-2=O&amp;2-0=O&amp;2-1=&amp;2-2=X
</code></pre>
<p>Le paramètre GET "you" vous indique quel est votre symbole dans la grille de
morpion. classiquement "X" ou "O"</p>
<p>Pour chaque case de la grille de morpion, un paramètre GET correspondant à ses
coordonnées ("0-0","0-1" etc...) vous est indiqué. Il peut être : </p>
<p>
Ne vous fiez pas au GIF animé de la page d'accueil du site.<br/>
Il est là pour illustrer le fonctionnement global de l'arène, mais il est faux : le tictactoe n'a besoin d'envoyer que 10 variables, de longueur maîtrisée, aux bots.<br/>
Le choix a donc été fait de les passer en paramètres GET et non POST comme indiqué sur l'animation.
</p>
<h2>Spécifications : variables GET et retour HTML</h2>
<p>
Votre programme n'a pas à gérer une partie entière de morpion, juste un tour.
</p>
<p>
Le programme arbitre (cette arène) fait une requête construite de la manière suivante :
</p>
<pre>
https://votreUrl/?you=O&amp;0-0=&amp;0-1=O&amp;0-2=X&amp;1-0=X&amp;1-1=X&amp;1-2=O&amp;2-0=O&amp;2-1=&amp;2-2=X
</pre>
<p>
Le paramètre GET "you" vous indique quel est votre symbole dans la grille de morpion.<br/>
Classiquement : "X" ou "O"
</p>
<p>
Pour chaque case de la grille de morpion, un paramètre GET correspondant à ses coordonnées ("0-0", "0-1", etc ...) vous est indiqué.<br/>
Il peut être :
</p>
<ul>
<li>votre symbole (ce qui signifie que vous avez déjà joué là)</li>
<li>le symbole de votre adversaire. Il a déjà joué dans cette case</li>
<li>rien, la case est disponible.</li>
<li>Votre symbole (ce qui signifie que vous avez déjà joué là)</li>
<li>Le symbole de votre adversaire. Il a déjà joué dans cette case</li>
<li>Rien, la case est disponible</li>
</ul>
<p>Votre programme choisit la case sur laquelle il souhaite jouer compte tenu de
la grille et retourne ses coordonnées.</p>
<p>Le résultat de la requête http(s) ne peut qu'être: "0-0" ou "0-1" ou "0-2" ou
"1-0" etc.</p>
<p>Un joueur (une IA) qui répond autre chose (au caractère près) ou qui répond
avec les coordonnées d'une case déjà jouée perd la partie.</p>
<p>
Votre programme choisit la case sur laquelle il souhaite jouer compte tenu de la grille et retourne ses coordonnées.
</p>
<p>
Le résultat de la requête HTTP(s) ne peut qu'être : "0-0" ou "0-1" ou "0-2" ou "1-0" etc.
</p>
<p>
Un joueur (une IA) qui répond autre chose (au caractère près), ou qui répond avec les coordonnées d'une case déjà jouée, perd la partie.
</p>
<h2>Publier votre programme pour le tester puis le lâcher dans l'arène</h2>
<p>le formulaire est sur la <a href="/">page d'accueil du site</a></p>
<p>
Le formulaire est sur la <a href="/">page d'accueil du site</a> !
</p>