Specifications Tic Tac Toe

Fonctionnement des duels de morpion

Ne vous fiez pas au GIF animé de la page d'accueil du site.
Il est là pour illustrer le fonctionnement global de l'arène, mais il est inexact.

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":"tictactoe","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.