logs at init
This commit is contained in:
parent
9dfefacef9
commit
3bad116750
|
@ -1 +1 @@
|
||||||
Subproject commit 1d85f9ef3ecfc42bbc4f3c70d5e37ca9a65f629a
|
Subproject commit 7c8b786228bb9e1561ff60a2d6f7f6ce91be6fee
|
|
@ -95,7 +95,7 @@ switch ($_POST['act']){
|
||||||
//******vars checked, lets init the initGame *******
|
//******vars checked, lets init the initGame *******
|
||||||
|
|
||||||
$_SESSION['matchId']=get_unique_id();
|
$_SESSION['matchId']=get_unique_id();
|
||||||
|
$grid['logs'] = array();
|
||||||
|
|
||||||
for($player = 1; $player <= 2; $player++){
|
for($player = 1; $player <= 2; $player++){
|
||||||
|
|
||||||
|
@ -182,6 +182,8 @@ switch ($_POST['act']){
|
||||||
save_battle('Battleship',$bot1['name'],$bot2['name'],1);
|
save_battle('Battleship',$bot1['name'],$bot2['name'],1);
|
||||||
}
|
}
|
||||||
die;
|
die;
|
||||||
|
}else{
|
||||||
|
$grid['logs'][] = $fullLogs.$currentBot['name']." put his ships on the map.";
|
||||||
}
|
}
|
||||||
//remember each cases of each boats
|
//remember each cases of each boats
|
||||||
$boatListOfCases=array();
|
$boatListOfCases=array();
|
||||||
|
@ -260,7 +262,7 @@ switch ($_POST['act']){
|
||||||
|
|
||||||
$botParamsToSend=array(
|
$botParamsToSend=array(
|
||||||
'game' => 'Battleship',
|
'game' => 'Battleship',
|
||||||
'game-id' => $_SESSION['matchId']."-".$currentPlayer,
|
'game-id' => $_SESSION['matchId'],
|
||||||
'action' => 'play-turn',
|
'action' => 'play-turn',
|
||||||
'player-index' => $currentPlayer - 1,
|
'player-index' => $currentPlayer - 1,
|
||||||
'board' => array(
|
'board' => array(
|
||||||
|
|
|
@ -1,3 +1,197 @@
|
||||||
|
<h1>Fonctionnement de la bataille navale</h1>
|
||||||
|
<p>Elle se joue en deux phases</p>
|
||||||
|
<ul>
|
||||||
|
<li>Placement des bateaux sur les maps</li>
|
||||||
|
<li>Echange de tirs</li>
|
||||||
|
</ul>
|
||||||
|
<h2>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>
|
||||||
|
<h3>Message d'initialisation de votre partie</h3>
|
||||||
|
l'arène envoie le message suivant:
|
||||||
|
<pre>{"game-id":"1126","action":"init","game":"battleship","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 retourner le nom de votre bot format JSON:</p>
|
||||||
|
<pre>
|
||||||
|
{"name":"botName"}
|
||||||
|
</pre>
|
||||||
|
<ul>
|
||||||
|
<li><em>name</em> le nom de votre bot (actuellment non pris en compte par cette arène).</li>
|
||||||
|
</ul>
|
||||||
|
<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>
|
||||||
|
<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> String, 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ée par un sous-tableau. Les index correspondent aux coordonnées x-y de la case. x et y sont compris entre 0 et 2. Les valeurs peuvent ê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"}
|
||||||
|
</pre>
|
||||||
|
<pre class="arrenaMessage">
|
||||||
|
{"game-id":"1126","action":"init","game":"tictactoe","players":2,"board":"","player-index":1}
|
||||||
|
</pre>
|
||||||
|
<pre class="botResponse">
|
||||||
|
{"name":"moul-tictactoe"}
|
||||||
|
</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">
|
||||||
|
{"play":"0-1"}
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
|
Player 1 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">
|
||||||
|
{"play":"1-1"}
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
|
Player 2 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">
|
||||||
|
{"play":"0-0"}
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
|
Player 1 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">
|
||||||
|
{"play":"0-2"}
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
|
Player 2 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">
|
||||||
|
{"play":"2-0"}
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
|
Player 1 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">
|
||||||
|
{"play":"1-0"}
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
|
Player 2 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">
|
||||||
|
{"play":"1-2"}
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
|
Player 1 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">
|
||||||
|
{"play":"2-1"}
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
|
Player 2 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">
|
||||||
|
{"play":"2-2"}
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
|
Player 1 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>
|
||||||
|
<p>Afin de vous aider sur la façon de gérer les communications entre le bot et l'arène, n'hésitez pas à jeter un coup d'oeil dans le <a href="https://github.com/gnieark/IAS/blob/master/stupidIATictactoe.php">code source PHP de stupidIA</a>.<p>
|
||||||
|
|
||||||
|
<h3><a href="/testBotScripts/tictactoe.html">Script Botsarena</a></h3>
|
||||||
|
<p>Cette petite page html+javascript vous permettra de tester et débogguer votre bot.<br/> Elle vous permettra de tester votre boot via son url, contre lui même, un humain ou stupidIA.<br/> Une fois prêt, vous l'inscrirez dans l'arène.</p>
|
||||||
|
<p> Par défaut, les navigateurs ne permettent pas en javascript de faire des requettes Cross domaine. C'est une sécurité du navigateur. Il y a donc trois possibilités:</p>
|
||||||
|
<ul><li>Vous ajoutez à votre bot les <a href="https://www.qwant.com/?q=allow%20cross%20domain%20query%20http%20header&t=all">headers permettant les requettes de type POST provenant d'un autre domaine</a>.</li>
|
||||||
|
<li>Plus simple, vous téléchargez la page (click droit, enregistrer la cible du lien sous)et la mettez dans le VHOST de votre bot le temps des tests. Tout son code (html, css et javascript) est inclus dans la page sans ressource externe, dans le but qu'elle puisse etre facilement téléchargée et utilisable.</li>
|
||||||
|
<li>Vous utilisez un navigateur web qui supporte le javascript et permet les requetes cross domain. <a href="https://www.thepolyglotdeveloper.com/2014/08/bypass-cors-errors-testing-apis-locally/">Ça semble possible</a>.</li>
|
||||||
|
</ul>
|
||||||
|
<p>Ce problème ne se posera pas au niveau de l'arène une fois que votre bot sera inscrit. Car dans ce cas, c'est le serveur qui fait les requetes vers les bots, pas un navigateur web.</p>
|
||||||
|
<h3><a href="https://github.com/moul/bolosseum">Bolosseum</a></h3>
|
||||||
|
<p>Vous trouverez des outils en ligne de commande pour tester et déboguer votre bot sur le projet github Bolosseum de @moul.</p>
|
||||||
|
<h2>Faire entrer votre bot dans cette arène</h2>
|
||||||
|
<p>Le formulaire d'inscription de votre bot est sur la page d'accueil du site.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
La bataille navale se joue en deux phases :
|
La bataille navale se joue en deux phases :
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -131,9 +131,11 @@ function battleship(bot1,bot2,gridWidth,gridHeight,nbShip1,nbShip2,nbShip3,nbShi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var p=createElem("p");
|
for each (var lo in grid['logs']){
|
||||||
p.innerHTML='players placed theirs ships';
|
var p=createElem("p");
|
||||||
document.getElementById('logs').appendChild(p);
|
p.innerHTML='o;
|
||||||
|
document.getElementById('logs').appendChild(p);
|
||||||
|
}
|
||||||
fight(xd_check,fullLogs);
|
fight(xd_check,fullLogs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user