2015-12-27 16:53:58 +01:00
< p >
La bataille navale se joue en deux phases :
< / p >
< ul >
< li > Placement des bateaux sur les maps< / li >
< li > Echange de tirs< / li >
2015-12-12 13:29:37 +01:00
< / ul >
2015-12-27 16:53:58 +01:00
< p >
A chaque tour de jeu l'arène fait des requetes http(s) contenant des paramètres de type POST, vers vos bots.< br / >
Ces derniers doivent répondre selon les spécifications ci dessous.
< / p >
2015-12-19 18:06:52 +01:00
< h2 > Descriptif des paramètres envoyés par l'arène< / h2 >
2015-12-27 16:53:58 +01:00
< table class = "tabledoc" >
< tr >
< th > Paramètre< / th >
< th > Description< / th >
< / tr >
< tr >
< td > game< / td >
< td >
Chaîne de caractères, sera toujours "Battleship".< br / >
Peut servir si votre url sert à plusieurs jeux.
< / td >
< / tr >
< tr >
< td > match_id< / td >
< td >
Chaîne de caractères. Répond à l'expression régulière suivante: ^[0-9]+-(1|2)$< br / >
Le premier nombre (digits avant le tiret) identifie le match.< br / >
Le numéro après le tiret vous indique si vous êtes le bot 1 ou le bot 2 dans l'ordre de jeu.< br / >
Ça vous servira si votre IA fait des statistiques sur les matchs.
< / td >
< / tr >
< tr >
< td > act< / td >
< td >
Peut prendre deux valeurs :< br / >
< ul >
< li > "init" : On démarre la partie, vous devez placer vos bateaux< / li >
< li > "fight" : Vous envoyez un tir< / li >
< / ul >
< / td >
< / tr >
< tr >
< td > opponent< / td >
< td >
Chaîne de caractères identifiant votre adversaire.< br / >
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.
< / td >
< / tr >
< tr >
< td > width< / td >
< td > Entier, compris entre 1 et 100, bornes incluses, vous indique la largeur de la map.< / td >
< / tr >
< tr >
< td > height< / td >
< td > Entier, compris entre 1 et 100, bornes incluses, vous indique la hauteur de la map.< / td >
< / tr >
< tr >
< td > ship1< / td >
< td > Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 1 case à placer.< / td >
< / tr >
< tr >
< td > ship2< / td >
< td > Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 2 cases à placer.< / td >
< / tr >
< tr >
< td > ...< / td >
< td > ...< / td >
< / tr >
< tr >
< td > ship6< / td >
< td > Entier, compris entre 0 et 10, bornes incluses, vous indique le nombre de bateaux de longeur 6 cases à placer.< / td >
< / tr >
< tr >
< td > your_strikes< / td >
< td >
< 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 >
< p >
< i > [ ]< / i >
< / p >
< p >
Lors du deuxième tour de jeu, il contient le tir précédent et son résultat :
< / p >
< p >
< i > [{"target":"2,0","result":""}]< / i >
< / p >
< p >
Lors du troisième tour de jeu, les deux tirs précédents :
< / p >
< p >
< i > [{"target":"2,0","result":"hit"},{"target":"5,1","result":"hit"}]< / i >
< / p >
< 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 >
< / td >
< / tr >
< tr >
< td > his_strikes< / td >
< td > Idem sauf qu'il s'agit du tir de l'adversaire.< / td >
< / tr >
2015-12-19 18:52:02 +01:00
< / table >
2015-12-20 19:09:41 +01:00
< h2 > Ce que doit retourner votre bot< / h2 >
< h3 > Lors de l'initialisation de la partie< / h3 >
2015-12-27 16:53:58 +01:00
< p >
Lors de l'initialisation d'une partie StupidIA VS StupidsIA, l'arène a envoyé au bot les parametres POST suivants :
< / p >
< pre >
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
< / pre >
< p >
Soit, sous forme plus lisible :
< / p >
2015-12-19 17:49:08 +01:00
< pre >
2015-12-27 16:53:58 +01:00
[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
2015-12-19 17:49:08 +01:00
< / pre >
2015-12-27 16:53:58 +01:00
< p >
La page http que doit générer votre bot contient la position des navires.
< / p >
< p >
Vous retournez une chaine de caractères qui est un tableau JSON ayant autant d'enregistrements que de navires.< br / >
Chaque navire est défini par les coordonnées de ses extrémités.
< / p >
2015-12-16 10:32:58 +01:00
< ul >
2015-12-27 16:53:58 +01:00
< 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 >
2015-12-16 10:32:58 +01:00
< / ul >
2015-12-27 16:53:58 +01:00
< h4 > Exemple de placement de 5 bateaux tailles respectives 5, 4, 3, 3, 2 cases :< / h4 >
2015-12-20 19:25:21 +01:00
< pre >
2015-12-27 16:53:58 +01:00
["3,3-3,7","2,1-2,4","0,1-0,3","7,3-7,1","8,8-7,8"]
2015-12-20 19:25:21 +01:00
< / pre >
2015-12-27 16:53:58 +01:00
< 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 >
2015-12-16 10:13:00 +01:00
< table class = "battleshipGrid nofloat" id = "tbl1" >
2015-12-27 16:53:58 +01:00
< 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 >
2015-12-16 10:10:31 +01:00
< / table >
2015-12-20 19:53:02 +01:00
< h3 > Lors du combat< / h3 >
2015-12-27 16:53:58 +01:00
< p >
Voici quelques exemples des parametres envoyés par l'arène.
< / p >
2015-12-20 19:53:02 +01:00
< h4 > Premier tour de jeu (your_strikes et his_strikes sont vides)< / h4 >
< pre >
[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] => []
< / pre >
< h4 > Deuxième tour de jeu< / h4 >
< pre >
[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":""}]
< / pre >
< h4 > Troisième tour de jeu< / h4 >
< pre >
[game] => Battleship
2015-12-20 19:54:34 +01:00
[match_id] => 834-1
2015-12-20 19:53:02 +01:00
[act] => fight
[opponent] => stupidIA
[width] => 10
[height] => 10
[ship1] => 0
[ship2] => 1
[ship3] => 2
[ship4] => 1
[ship5] => 1
[ship6] => 0
2015-12-20 19:56:37 +01:00
[your_strikes] => [{"target":"4,6","result":""},{"target":"3,9","result":"hit"}]
2015-12-20 19:54:34 +01:00
[his_strikes] => [{"target":"7,8","result":""},{"target":"7,8","result":""}]
2015-12-20 19:53:02 +01:00
< / pre >
2015-12-27 16:53:58 +01:00
< h4 > Vous devez tout simplement retourner l'adresse de la case sur laquelle vous souhaitez tirer sous forme de x,y< / h4 >
2015-12-20 19:56:37 +01:00
< pre >
2015-12-27 16:53:58 +01:00
6,9
2015-12-20 19:56:37 +01:00
< / pre >
2015-12-27 16:53:58 +01:00
< p >
Pour tirer aux coordonnées x=6 y=9
< / p >