< 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":1609,"game":"battleship","action":"init","players":2,"player-index":0,"board":{"opponent":"stupidIA","width":"10","height":"10","ship1":"0","ship2":"1","ship3":"2","ship4":"1","ship5":"1","ship6":"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 battleship. ç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 à la bataille navale.< / 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 >
< li > < em > board< / em > un tableau vous donnant les parametres:
< ul >
< li > < em > opponent< / em > 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. < / li >
< li > < em > width< / em > Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.< / li >
< li > < em > height< / em > Entier, compris entre 1 et 100, bornes incluses, vous indique la hauteur de la map.< / li >
< li > < em > ship1< / em > Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 1 case à placer.< / li >
< li > < em > ship2< / em > Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 2 cases à placer.< / li >
< li > ...< / li >
< li > < em > ship6< / em > Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 6 cases à placer.< / li >
< / ul >
< / li >
< / ul >
< p > Votre bot doit retourner le nom de votre bot et le placement de vos bateaux au format JSON:< / p >
< pre >
{"name":"gnieark","boats":["4,2-4,6","3,3-3,0","2,3-2,1","7,9-5,9","6,8-6,7"]}
< / pre >
< ul >
< li > < em > name< / em > Le nom de votre bot (actuellment non pris en compte par cette arène).< / li >
< li > < em > boats< / em > Tableau indiquant le placement de vos bateaux< / li >
< / ul >
< ul >
< h3 > boats< / h3 >
< 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 >
< 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.< 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 >
< / table >
< h3 > Message vous demandant de jouer (seulement un tour)< / h3 >
< p > L'arène vous envoie par exemple le message suivant:< / p >
< pre > {"game":"Battleship","game-id":1615,"action":"play-turn","player-index":1,"board":{"opponent":"stupidIA","width":"10","height":"10","ship1":"0","ship2":"1","ship3":"2","ship4":"1","ship5":"1","ship6":"0","your_strikes":[{"target":"4,3","result":""},{"target":"9,8","result":""}],"his_strikes":[{"target":"2,2","result":""},{"target":"0,6","result":""},{"target":"7,0","result":""}]}}< / 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 battleship. ç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 à la bataille navale.< / 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 les éléments d'écrits à l'étape précédente et par deux sous tableaux your_strikes et his strikes< / p >
< ul >
< li > < em > opponent< / em > 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. < / li >
< li > < em > width< / em > Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.< / li >
< li > < em > height< / em > Entier, compris entre 1 et 100, bornes incluses, vous indique la hauteur de la map.< / li >
< li > < em > ship1< / em > Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 1 case à placer.< / li >
< li > < em > ship2< / em > Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 2 cases à placer.< / li >
< li > ...< / li >
< li > < em > ship6< / em > Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 6 cases à placer.< / li >
< li > < em > your_strikes< / em > tableau vous indiquant vos tirs précédents et eur résultat< / li >
< li > < em > his_strikes< / em > Idem, mais pour l'adversaire. Si ce dernier tire selon un modèle prédisible, vous saurez comment comment placer vos bateaux lors de la prochaine partie< / li >
< / ul >
< h4 > your_strikes et his_strikes< / h4 >
< 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 >
< pre > [ ]< / pre >
< p >
Lors du deuxième tour de jeu, il contient le tir précédent et son résultat :
< / p >
< pre > [{"target":"2,0","result":""}]< / pre >
< p >
Lors du troisième tour de jeu, les deux tirs précédents :
< / p >
< pre > [{"target":"2,0","result":"hit"},{"target":"5,1","result":"hit"}]< / pre >
< 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 >
< h3 > Réponse de votre bot< / h3 >
< p > Il doit répondre par les coordonnées de la case dans laquelle il souhaite effectuer un tir.< / p >
< pre > {"play":"1,8"}< / pre >
< p > x,y< / p >
< h2 > Outils pour développer et tester votre bot< / h2 >
< h3 > Script Botsarena en cours de développement< / h3 >
< 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 >