Règles
Deux joueurs s'affrontent sur une grille de 15x15 cases.
Les joueurs jouent à tour de rôle.
Le but du jeu est de faire un alignement de 5 pions, en ligne, en colonne ou en diagonale.
On fait rentrer le pion par un des côtés et on décale les pions en les "poussant".
Lorsqu'une ligne ou une colonne est pleine, on ne peut plus y faire rentrer de pion.
Voici un exemple simplifié pour une grille 8x8 et des alignements de 3.
Bleu joue H1
Rouge joue H1 (et pousse la ligne vers le bas)
Bleu joue H1 (et pousse la ligne vers le bas)
Rouge joue G3 (et pousse la ligne vers la droite)
Bleu joue B1 (et ne pousse rien)
Rouge joue G4 (et gagne)
Attention, ces règles n'ont pas encore été mises à l'épreuve, elles sont donc succeptibles d'évoluer, notamment la taille de la grille et la longueur des alignements.
Prévoyez donc vos programme en conséquence !
Comme dans la première édition, voici comment seront organisés les matchs :
De même s'il est trop lent à répondre, il perd aussi (timeout actuellement fixé à 1 seconde).
Le mécanisme utilisé pour faire communiquer les processus (serveur et clients) entre eux est celui des files (FIFO).
Pour simplifier la programmation des clients, ceux-ci lisent les données sur l'entrée standard (stdin) et envoient leurs réponses sur la sortie standard (stdout).
Par exemple en C, un scanf permet de lire et un printf de répondre.
En pascal se sont respectivement readln et writeln qui seront utilisés...
Ainsi n'importe quel langage peut-être utilisé pour programme son client.
Attention : en C toutes les sorties doivent être flushées :
Ensuite a chaque tour de jeu il écrit sur la sortie standard la rangée et la direction pour jouer son pion.
Il envoie d'abord la rangée puis la direction, par exemple : 15B.
De la même manière, le coup joué par l'adversaire est lu sur l'entrée standard : la rangée et la direction.
Lorsque le match est terminé, le robot reçoit un message différent du serveur : la lettre F, suivie du numéro du robot vainqueur, suivi du motif de la victoire.
Le numéro du robot vainqueur est :
Enfin les robots peuvent lire/écrire des fichiers de données dans le sous-répertoire "data/".
Ces fichiers sont accessibles et modifiables depuis l'interface membre.
Les joueurs jouent à tour de rôle.
Le but du jeu est de faire un alignement de 5 pions, en ligne, en colonne ou en diagonale.
On fait rentrer le pion par un des côtés et on décale les pions en les "poussant".
Lorsqu'une ligne ou une colonne est pleine, on ne peut plus y faire rentrer de pion.
Voici un exemple simplifié pour une grille 8x8 et des alignements de 3.
| H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | ||
| G1 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D1 |
| G2 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D2 |
| G3 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D3 |
| G4 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D4 |
| G5 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D5 |
| G6 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D6 |
| G7 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D7 |
| G8 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D8 |
| B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 |
Rouge joue H1 (et pousse la ligne vers le bas)
| H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | ||
| G1 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D1 |
| G2 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D2 |
| G3 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D3 |
| G4 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D4 |
| G5 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D5 |
| G6 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D6 |
| G7 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D7 |
| G8 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D8 |
| B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 |
Bleu joue H1 (et pousse la ligne vers le bas)
| H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | ||
| G1 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D1 |
| G2 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D2 |
| G3 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D3 |
| G4 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D4 |
| G5 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D5 |
| G6 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D6 |
| G7 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D7 |
| G8 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D8 |
| B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 |
Rouge joue G3 (et pousse la ligne vers la droite)
| H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | ||
| G1 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D1 |
| G2 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D2 |
| G3 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D3 |
| G4 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D4 |
| G5 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D5 |
| G6 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D6 |
| G7 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D7 |
| G8 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D8 |
| B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 |
Bleu joue B1 (et ne pousse rien)
| H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | ||
| G1 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D1 |
| G2 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D2 |
| G3 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D3 |
| G4 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D4 |
| G5 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D5 |
| G6 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D6 |
| G7 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D7 |
| G8 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D8 |
| B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 |
Rouge joue G4 (et gagne)
| H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | ||
| G1 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D1 |
| G2 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D2 |
| G3 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D3 |
| G4 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D4 |
| G5 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D5 |
| G6 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D6 |
| G7 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D7 |
| G8 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
D8 |
| B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 |
Prévoyez donc vos programme en conséquence !
Comme dans la première édition, voici comment seront organisés les matchs :
- 1 serveur "arbitre" le match.
- 2 clients (2 programmes joueurs) s'affrontent.
De même s'il est trop lent à répondre, il perd aussi (timeout actuellement fixé à 1 seconde).
Le mécanisme utilisé pour faire communiquer les processus (serveur et clients) entre eux est celui des files (FIFO).
Pour simplifier la programmation des clients, ceux-ci lisent les données sur l'entrée standard (stdin) et envoient leurs réponses sur la sortie standard (stdout).
Par exemple en C, un scanf permet de lire et un printf de répondre.
En pascal se sont respectivement readln et writeln qui seront utilisés...
Ainsi n'importe quel langage peut-être utilisé pour programme son client.
Attention : en C toutes les sorties doivent être flushées :
printf("%d%c\n", rangee, direction); fflush(stdout);
Au premier tour de jeu, chaque client lit un numéro qui lui indique s'il commence (1) ou s'il va jouer en second (2).Ensuite a chaque tour de jeu il écrit sur la sortie standard la rangée et la direction pour jouer son pion.
Il envoie d'abord la rangée puis la direction, par exemple : 15B.
De la même manière, le coup joué par l'adversaire est lu sur l'entrée standard : la rangée et la direction.
Lorsque le match est terminé, le robot reçoit un message différent du serveur : la lettre F, suivie du numéro du robot vainqueur, suivi du motif de la victoire.
Le numéro du robot vainqueur est :
- 0 en cas de match nul (grille pleine)
- 1 si le joueur 1 gagne
- 2 si le joueur 2 gagne
- 3 en cas d'égalité (double victoire)
- Q si le perdant a quitté le match (plantage, terminaison)
- P si le perdant a fermé ses pipes (plantage, terminaison)
- B si le perdant est bloqué (entre deux alarmes, il n'a pas bougé d'un tic d'horloge, il est sûrement bloqué sur un accès fichier, etc)
- T en cas de timeout du perdant (boucle infinie, réponse trop lente...)
- S si le coup renvoyé par le perdant n'est pas un couple direction/rangée
- I si le coup renvoyé par le perdant est invalide (direction non valide, rangée hors du tableau ou ligne pleine)
- V en cas de victoire classique par alignement de 5 pions (par le ou les gagants)
- N en cas de match nul (grille pleine)
Enfin les robots peuvent lire/écrire des fichiers de données dans le sous-répertoire "data/".
Ces fichiers sont accessibles et modifiables depuis l'interface membre.


