From 3bad1167503a73493186f608f5eefeac41a8808d Mon Sep 17 00:00:00 2001 From: Gnieark Date: Mon, 20 Jun 2016 10:07:14 +0200 Subject: [PATCH] logs at init --- src/PHPMailer | 2 +- src/arenas/Battleship/act.php | 6 +- src/arenas/Battleship/doc-fr.html | 194 ++++++++++++++++++++++++++++++ src/arenas/Battleship/js.js | 8 +- 4 files changed, 204 insertions(+), 6 deletions(-) diff --git a/src/PHPMailer b/src/PHPMailer index 1d85f9e..7c8b786 160000 --- a/src/PHPMailer +++ b/src/PHPMailer @@ -1 +1 @@ -Subproject commit 1d85f9ef3ecfc42bbc4f3c70d5e37ca9a65f629a +Subproject commit 7c8b786228bb9e1561ff60a2d6f7f6ce91be6fee diff --git a/src/arenas/Battleship/act.php b/src/arenas/Battleship/act.php index 0f85ffc..a442c65 100644 --- a/src/arenas/Battleship/act.php +++ b/src/arenas/Battleship/act.php @@ -95,7 +95,7 @@ switch ($_POST['act']){ //******vars checked, lets init the initGame ******* $_SESSION['matchId']=get_unique_id(); - + $grid['logs'] = array(); for($player = 1; $player <= 2; $player++){ @@ -182,6 +182,8 @@ switch ($_POST['act']){ save_battle('Battleship',$bot1['name'],$bot2['name'],1); } die; + }else{ + $grid['logs'][] = $fullLogs.$currentBot['name']." put his ships on the map."; } //remember each cases of each boats $boatListOfCases=array(); @@ -260,7 +262,7 @@ switch ($_POST['act']){ $botParamsToSend=array( 'game' => 'Battleship', - 'game-id' => $_SESSION['matchId']."-".$currentPlayer, + 'game-id' => $_SESSION['matchId'], 'action' => 'play-turn', 'player-index' => $currentPlayer - 1, 'board' => array( diff --git a/src/arenas/Battleship/doc-fr.html b/src/arenas/Battleship/doc-fr.html index ce3650b..79cb99e 100644 --- a/src/arenas/Battleship/doc-fr.html +++ b/src/arenas/Battleship/doc-fr.html @@ -1,3 +1,197 @@ +

Fonctionnement de la bataille navale

+

Elle se joue en deux phases

+ +

Communications entre l'arène et votre bot

+

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.

+

Votre bot répond par un array au format JSON.

+

Message d'initialisation de votre partie

+ l'arène envoie le message suivant: +
{"game-id":"1126","action":"init","game":"battleship","players":2,"board":"","player-index":0}
+

Si on décompose le tableau pour l'expliquer:

+ +

Votre bot doit retourner le nom de votre bot format JSON:

+
+  {"name":"botName"}
+  
+ +

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 Bolosseum. + Si votre bot repond une page blanche à cette étape (action=init), ça marchera dans le cadre de botsarena.

+

Message vous demandant de jouer (seulement un tour)

+

L'arène vous envoie par exemple le message suivant:

+
{"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}
+ +

la map

+

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:

+ + +

Exemple de partie

+
+{"game-id":"1126","action":"init","game":"tictactoe","players":2,"board":"","player-index":0}
+
+
+{"name":"moul-tictactoe"}
+
+
+{"game-id":"1126","action":"init","game":"tictactoe","players":2,"board":"","player-index":1}
+
+
+{"name":"moul-tictactoe"}
+
+
+{"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}
+
+
+{"play":"0-1"}
+
+
+Player 1 joue en 0-1 la nouvelle grille est
+X
+
+ +
+{"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}
+
+
+{"play":"1-1"}
+
+
+Player 2 joue en 1-1 la nouvelle grille est
+X
+O
+
+ +
+{"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}
+
+
+{"play":"0-0"}
+
+
+Player 1 joue en 0-0 la nouvelle grille est
+X X
+O
+
+ +
+{"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}
+
+
+{"play":"0-2"}
+
+
+Player 2 joue en 0-2 la nouvelle grille est
+X X O
+O
+
+ +
+{"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}
+
+
+{"play":"2-0"}
+
+
+Player 1 joue en 2-0 la nouvelle grille est
+X X O
+O
+X
+
+ +
+{"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}
+
+
+{"play":"1-0"}
+
+
+Player 2 joue en 1-0 la nouvelle grille est
+X X O
+O O
+X
+
+
+{"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}
+
+
+{"play":"1-2"}
+
+
+Player 1 joue en 1-2 la nouvelle grille est
+X X O
+O O X
+X
+
+ +
+{"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}
+
+
+{"play":"2-1"}
+
+
+Player 2 joue en 2-1 la nouvelle grille est
+X X O
+O O X
+X O
+
+
+{"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}
+
+
+{"play":"2-2"}
+
+
+Player 1 joue en 2-2 la nouvelle grille est
+X X O
+O O X
+X O X
+
+Match nul
+
+ +

Outils pour développer et tester votre bot

+

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 code source PHP de stupidIA.

+ +

Script Botsarena

+

Cette petite page html+javascript vous permettra de tester et débogguer votre bot.
Elle vous permettra de tester votre boot via son url, contre lui même, un humain ou stupidIA.
Une fois prêt, vous l'inscrirez dans l'arène.

+

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:

+ +

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.

+

Bolosseum

+

Vous trouverez des outils en ligne de commande pour tester et déboguer votre bot sur le projet github Bolosseum de @moul.

+

Faire entrer votre bot dans cette arène

+

Le formulaire d'inscription de votre bot est sur la page d'accueil du site.

+ + + + +

La bataille navale se joue en deux phases :

diff --git a/src/arenas/Battleship/js.js b/src/arenas/Battleship/js.js index d08f621..1095215 100644 --- a/src/arenas/Battleship/js.js +++ b/src/arenas/Battleship/js.js @@ -131,9 +131,11 @@ function battleship(bot1,bot2,gridWidth,gridHeight,nbShip1,nbShip2,nbShip3,nbShi } } } - var p=createElem("p"); - p.innerHTML='players placed theirs ships'; - document.getElementById('logs').appendChild(p); + for each (var lo in grid['logs']){ + var p=createElem("p"); + p.innerHTML='o; + document.getElementById('logs').appendChild(p); + } fight(xd_check,fullLogs); }