Battleship is played in two steps:
Ces derniers doivent répondre selon les spécifications ci dessousAt each turn of the game, Arena makes http(s) queries to your bots. This queries contains POST parameters. Your bots have to answer as it is specified here.
POST parameter | Description |
---|---|
game | string, always "Battleship". Is needed if your bot URL is used for several games. |
match_id | string, matches this regex: ^[0-9]+-(1|2)$ First number (digits before hyphen) logs the match. Number after hyphen logs the bot.If you are the first player it's "1", otherwhise "2". It could be usefull if you want to make statistics |
act | Can have two values:
|
opponent | Your opponent's authentification string 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. |
ship3 | Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 3 cases à placer. |
... | ... |
ship6 | Entier, compris entre 0 et 10, bornes incluses, Vous indique le nombre de bateaux de longeur 6 cases à placer. |
your_strikes |
chaîne de caractères représentant un array au format JSON. [ ] 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:
|
his_strikes | idem sauf qu'il s'agit du tir de l'adversaire. |
Lors de l'initialisation d'une partie StupidIA VS StupidsIA, l'arène a envoyé au bot les parametres POST suivants:
game=Battleship&match_id=828-1&act=init&opponent=stupidIA&width=10&height=10&ship1=0&ship2=1&ship3=2&ship4=1&ship5=1&ship6=0
Soit, sous forme plus lisible:
[game] => Battleship [match_id] => 828-1 [act] => init [opponent] => stupidIA [width] => 10 [height] => 10 [ship1] => 0 [ship2] => 1 [ship3] => 2 [ship4] => 1 [ship5] => 1 [ship6] => 0
La page http que doit générer votre bot contient la position des navires.
Vous retournez une chaine de caractères codant tableau JSON ayant autant d'enregistrements que de navires. Chaque navire est défini par les coordonnées de ses extrémités.
["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 |
Voici quelques exemples des parametres envoyés par l'arène.
[game] => Battleship [match_id] => 834-1 [act] => fight [opponent] => stupidIA [width] => 10 [height] => 10 [ship1] => 0 [ship2] => 1 [ship3] => 2 [ship4] => 1 [ship5] => 1 [ship6] => 0 [your_strikes] => [] [his_strikes] => [] )
[game] => Battleship [match_id] => 834-1 [act] => fight [opponent] => stupidIA [width] => 10 [height] => 10 [ship1] => 0 [ship2] => 1 [ship3] => 2 [ship4] => 1 [ship5] => 1 [ship6] => 0 [your_strikes] => [{"target":"4,6","result":""}] [his_strikes] => [{"target":"7,8","result":""}]
[game] => Battleship [match_id] => 834-1 [act] => fight [opponent] => stupidIA [width] => 10 [height] => 10 [ship1] => 0 [ship2] => 1 [ship3] => 2 [ship4] => 1 [ship5] => 1 [ship6] => 0 [your_strikes] => [{"target":"4,6","result":""},{"target":"3,9","result":"hit"}] [his_strikes] => [{"target":"7,8","result":""},{"target":"7,8","result":""}]
6,9
Pour tirer aux coordonnées x=6 y=9