Fonctionnement de la bataille navale
Elle se joue en deux phases
- Placement des bateaux sur les maps
- Echange de tirs
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":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"}}
Si on décompose le tableau pour l'expliquer:
- game-id string identifiant la partie.
- action string identifiant la phase, init tout de suite, sera play-turn dans le châpitre suivant.
- game string identifiant le jeu. Ici, ce sera forcément battleship. ça peut servir si vous donnez une seule URL pour plusieurs bots.
- players Int indiquant le nombre de joueurs dans la partie, toujours 2 à la bataille navale.
- player-index int, L'ordre de votre bot dans les tours de jeu. Le premier joueur a la valeur 0, le deuxième 1.
- board un tableau vous donnant les parametres:
- opponent 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.
- width Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.
- height Entier, compris entre 1 et 100, bornes incluses, vous indique la hauteur de la map.
- ship1 Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 1 case à placer.
- ship2 Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 2 cases à placer.
- ...
- ship6 Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 6 cases à placer.
Votre bot doit retourner le nom de votre bot et le placement de vos bateaux au format JSON:
{"name":"gnieark","boats":["4,2-4,6","3,3-3,0","2,3-2,1","7,9-5,9","6,8-6,7"]}
- name Le nom de votre bot (actuellment non pris en compte par cette arène).
- boats Tableau indiquant le placement de vos bateaux
boats
- La grille commence au point 0,0.
- Les entiers, ordonnée et abscisses, définissant un point, sont séparés d'une virgule ",".
- Les deux points définissant les extrémités d'un navire sont séparés par un tiret "-".
Exemple de placement de 5 bateaux tailles respectives 5, 4, 3, 3, 2 cases :
["3,3-3,7","2,1-2,4","0,1-0,3","7,3-7,1","8,8-7,8"]
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.
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.
Vu sur la grille, l'exemple précédent donnerait :
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
9 |
|
|
|
|
|
|
|
|
|
|
Message vous demandant de jouer (seulement un tour)
L'arène vous envoie par exemple le message suivant:
{"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":""}]}}
- game-id String identifiant la partie.
- action String identifiant la phase, play-turn tout de suite, qui vous indique que vous devez jouer.
- game String identifiant le jeu. Ici, ce sera forcément battleship. ça peut servir si vous donnez une seulle URL pour plusieurs bots.
- players Int indiquant le nombre de joueurs dans la partie, toujours 2 à la bataille navale.
- board La carte je donne le détail ci dessous
- you String, Votre caractère dans la grille
- player-index Int, L'ordre de votre bot dans les tours de jeu. Le premier joueur a la valeur 0, le deuxième 1.
la map
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
- opponent 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.
- width Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.
- height Entier, compris entre 1 et 100, bornes incluses, vous indique la hauteur de la map.
- ship1 Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 1 case à placer.
- ship2 Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 2 cases à placer.
- ...
- ship6 Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 6 cases à placer.
- your_strikes tableau vous indiquant vos tirs précédents et eur résultat
- his_strikes 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
your_strikes et his_strikes
Chaîne de caractères représentant un array au format JSON.
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.
Lors du premier tour de jeu, il représente un array vide:
[ ]
Lors du deuxième tour de jeu, il contient le tir précédent et son résultat :
[{"target":"2,0","result":""}]
Lors du troisième tour de jeu, les deux tirs précédents :
[{"target":"2,0","result":"hit"},{"target":"5,1","result":"hit"}]
Chaque tir est un sous array pour lesquels:
- L'index target indique les coordonnées du tir x,y
-
result peut être :
- Vide "" signifie que le tir n'a rien touché
- "hit" Un navire ennemi a été touché
- "hit and sunk" Un navire ennemi a été touché et coulé
Réponse de votre bot
Il doit répondre par les coordonnées de la case dans laquelle il souhaite effectuer un tir.
{"play":"1,8"}
x,y
Outils pour développer et tester votre bot
Script Botsarena en cours de développement
Faire entrer votre bot dans cette arène
Le formulaire d'inscription de votre bot est sur la page d'accueil du site.