botsArena/src/arenas/tictactoe/doc-fr.html
2016-05-30 20:09:55 +02:00

182 lines
7.0 KiB
HTML

<h1>Fonctionnement des duels de morpion</h1>
<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.
</p>
<h2>Spécifications : Communications entre l'arène et votre bot</h2>
<p>Pour communiquer, l'arène (le serveur hébergeant botsarena) fait des requetes http(s) de type POST vers les bots. Le message est dans le corps de la requête au format JSON.</p>
<p>Votre bot répond par un array au format JSON</p>
<h2>contenu du JSON</h2>
<h3>Message d'initialisation de votre partie</h3>
l'arène envoie le message suivant:
<pre>{"game-id":"1126","action":"init","game":"tictactoe","players":2,"board":"","player-index":0}</pre>
<p>Si on décompose le tableau pour l'expliquer:</p>
<ul>
<li><em>game-id</em> string identifiant la partie</li>
<li><em>action</em> string identifiant la phase, <em>init</em> tout de suite, sera <em>play-turn</em> dans le châpitre suivant</li>
<li><em>game</em>String identifiant le jeu. Ici, ce sera forcément tictactoe. ça peut servir si vous donnez une seule URL pour plusieurs bots</li>
<li><em>players</em>Int indiquant le nombre de joueurs dans la partie, toujours 2 au morpion</li>
<li><em>board</em>Vide à cette étape, voir chapitre suivant</li>
<li><em>player-index</em>int, L'ordre de votre bot dans les tours de jeu. Le premier joueur a la valeur 0, le deuxième 1.</li>
</ul>
<p>Votre bot doit répondre au format JSON:</p>
<pre>
{"name":"botName"}
</pre>
<p>L'arène ne vérifie pas actuellement cette réponse, l'étape d'init a été insérée pour assurer la compatibilité avec <a href="https://github.com/moul/bolosseum">Bolosseum</a>.
Si votre bot repond une page blanche à cette étape (action=init), ça marchera dans le cadre de botsarena.</p>
<ul>
<li><em>name</em> le nom de votre bot (actuellment non pris en compte par cette arène)</li>
</ul>
<h3>Message vous demandant de jouer (seulement un tour)</h3>
<p>L'arène vous envoie par exemple le message suivant:</p>
<pre>{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"","0-1":"","0-2":"","1-0":"","1-1":"","1-2":"","2-0":"","2-1":"","2-2":""},"you":"X","player-index":0}</pre>
<ul>
<li><em>game-id</em> string identifiant la partie</li>
<li><em>action</em> string identifiant la phase, <em>play-turn</em> tout de suite, qui vous indique que vous devez jouer</li>
<li><em>game</em>String identifiant le jeu. Ici, ce sera forcément tictactoe. ça peut servir si vous donnez une seulle URL pour plusieurs bots</li>
<li><em>players</em>Int indiquant le nombre de joueurs dans la partie, toujours 2 au morpion</li>
<li><em>board</em>La carte je donne le détail ci dessous</li>
<li><em>you</em>Votre caractère dans la grille</li>
<li><em>player-index</em>int, L'ordre de votre bot dans les tours de jeu. Le premier joueur a la valeur 0, le deuxième 1.</li>
</ul>
<h4>la map</h4>
<p>Elle est représenté par un sous-tableau. Les index correspondent aux coordonnées x-y de la case. les valeurs peuvent &ecirc;tre:</p>
<ul>
<li>Vide, personne n'a joué à cette case</li>
<li>"X" ou "O", le joueur ayant ce symbole a déjà joué cette case.</li>
</ul>
<h2>Exemple de partie</h2>
<pre class="arrenaMessage">
{"game-id":"1126","action":"init","game":"tictactoe","players":2,"board":"","player-index":0}
</pre>
<pre class="botResponse">
{"name":"moul-tictactoe","play":null,"error":null}
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"init","game":"tictactoe","players":2,"board":"","player-index":1}
</pre>
<pre class="botResponse">
{"name":"moul-tictactoe","play":null,"error":null}
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"","0-1":"","0-2":"","1-0":"","1-1":"","1-2":"","2-0":"","2-1":"","2-2":""},"you":"X","player-index":0}
</pre>
<pre class="botResponse">
{"name":"","play":"0-1","error":null}
</pre>
<pre>
moul2 joue en 0-1 la nouvelle grille est
X
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"","0-1":"X","0-2":"","1-0":"","1-1":"","1-2":"","2-0":"","2-1":"","2-2":""},"you":"O","player-index":1}
</pre>
<pre class="botResponse">
{"name":"","play":"1-1","error":null}
</pre>
<pre>
moul2 joue en 1-1 la nouvelle grille est
X
O
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"","0-1":"X","0-2":"","1-0":"","1-1":"O","1-2":"","2-0":"","2-1":"","2-2":""},"you":"X","player-index":0}
</pre>
<pre class="botResponse">
{"name":"","play":"0-0","error":null}
</pre>
<pre>
moul2 joue en 0-0 la nouvelle grille est
X X
O
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"X","0-1":"X","0-2":"","1-0":"","1-1":"O","1-2":"","2-0":"","2-1":"","2-2":""},"you":"O","player-index":1}
</pre>
<pre class="botResponse">
{"name":"","play":"0-2","error":null}
</pre>
<pre>
moul2 joue en 0-2 la nouvelle grille est
X X O
O
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"X","0-1":"X","0-2":"O","1-0":"","1-1":"O","1-2":"","2-0":"","2-1":"","2-2":""},"you":"X","player-index":0}
</pre>
<pre class="botResponse">
{"name":"","play":"2-0","error":null}
</pre>
<pre>
moul2 joue en 2-0 la nouvelle grille est
X X O
O
X
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"X","0-1":"X","0-2":"O","1-0":"","1-1":"O","1-2":"","2-0":"X","2-1":"","2-2":""},"you":"O","player-index":1}
</pre>
<pre class="botResponse">
{"name":"","play":"1-0","error":null}
</pre>
<pre>
moul2 joue en 1-0 la nouvelle grille est
X X O
O O
X
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"X","0-1":"X","0-2":"O","1-0":"O","1-1":"O","1-2":"","2-0":"X","2-1":"","2-2":""},"you":"X","player-index":0}
</pre>
<pre class="botResponse">
{"name":"","play":"1-2","error":null}
</pre>
<pre>
moul2 joue en 1-2 la nouvelle grille est
X X O
O O X
X
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"X","0-1":"X","0-2":"O","1-0":"O","1-1":"O","1-2":"X","2-0":"X","2-1":"","2-2":""},"you":"O","player-index":1}
</pre>
<pre class="botResponse">
{"name":"","play":"2-1","error":null}
</pre>
<pre>
moul2 joue en 2-1 la nouvelle grille est
X X O
O O X
X O
</pre>
<pre class="arrenaMessage">
{"game-id":"1126","action":"play-turn","game":"tictactoe","players":2,"board":{"0-0":"X","0-1":"X","0-2":"O","1-0":"O","1-1":"O","1-2":"X","2-0":"X","2-1":"O","2-2":""},"you":"X","player-index":0}
</pre>
<pre class="botResponse">
{"name":"","play":"2-2","error":null}
</pre>
<pre>
moul2 joue en 2-2 la nouvelle grille est
X X O
O O X
X O X
Match nul
</pre>
<h2>Outils pour développer et tester votre bot</h2>
<h2>Faire entrer votre bot dans cette arène</h2>