commit
6d8f696af6
10
.gitignore
vendored
10
.gitignore
vendored
|
@ -1,2 +1,12 @@
|
|||
*/.DS_Store
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
Icon?
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
src/config.php
|
||||
src/countBattles.txt
|
|
@ -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&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>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 ",".</li>
|
||||
<li>Les deux points définissant les extrémités d'un navire sont séparés par un tiret "-".</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&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>
|
||||
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 ",".</li>
|
||||
<li>The two points defining the ends a ship shall be separated by a hyphen "-".</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>
|
|
@ -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&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>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&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>
|
||||
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 ",".</li>
|
||||
<li>Les deux points définissant les extrémités d'un navire sont séparés par un tiret "-".</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 ",".</li>
|
||||
<li>Les deux points définissant les extrémités d'un navire sont séparés par un tiret "-".</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>
|
|
@ -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&0-0=&0-1=O&0-2=X&1-0=X&1-1=X&1-2=O&2-0=O&2-1=&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>
|
|
@ -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&0-0=&0-1=O&0-2=X&1-0=X&1-1=X&1-2=O&2-0=O&2-1=&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&0-0=&0-1=O&0-2=X&1-0=X&1-1=X&1-2=O&2-0=O&2-1=&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>
|
Loading…
Reference in New Issue
Block a user