Je me disais récemment que je relancerais bien un "zeDuel".Ceux qui ont connu la première édition (il y a 5 ans déjà !) savent de quoi je parle :)
Sinon l'idée est simple : c'est un duel de programmation, chaque participant programme une IA qui affronte les autres joueurs dans un jeu imaginé pour l'occasion.
La dernière fois c'était puissance 6 et ça avait plutôt bien marché. J'y vois plusieurs explications :
- Les règles étaient simples.
- Le plateau de jeu est une grille, donc facile à représenter dans un programme.
- Pour jouer le client lisait sur l'entrée standard les coups de l'adversaire, et donnait sur la sortie standard son coup : pas de bibliothèque, pas d'API, pas de sockets... Juste des "read"/"write".
- Conséquence du point 3 : tous les languages de programmation disponibles sur mon serveur sont utilisables.
- C'est un duel 1 vs 1, donc on a qu'un seul adversaire à "gérer".
- Le serveur (l'arbitre du match) est assez simple également (ceux qui ont connu l'aventure "castor" me comprendront ;)).
- Un classement est facile à établir : on organise un tournoi où chaque client rencontre tous les autres.
- Chaque participant peut déployer l'environnement client/serveur chez lui pour tester avant de soumettre une nouvelle version de son client.
- Les logs des parties étaient disponible pour analyser en ligne ou chez soi ce qui s'était passé.
Le serveur serait ainsi rapidement disponible puisque je pourrais réutiliser l'ancien code en partie...
Il ne reste plus qu'à trouver de nouvelles règles : le but étant d'avoir quelque chose d'assez simple, mais qui n'existe pas pour éviter de retomber sur des algorithmes déjà faits.
J'ai déjà quelques idées en vrac de jeux où on doit faire des alignements comme la précédente édition.
La taille du plateau de jeu et la longueur des alignements restent à définir :
- Décalage On fait rentrer le pion par un des côtés et on décale les pions en les "poussant".
- Je trouve les règles "fun".
- Les règles sont simples mais j'imagine que les stratégies peuvent être complexes.
- La configuration de la grille peut changer radicalement en un coup.
- La partie ne se termine pas après un nombre de coups précis.
- On peut arriver à des situations de blocage (une ligne remplie que chaque joueur pousse par un bout à tour de rôle).
- Le client doit aussi gérer le décalage des pions en interne (il ne reçoit que le coup de l'adversaire).
- Il peut y avoir 2 gagnants (un décalage peut donner plusieurs alignements).
- Chute On fait rentrer le pion par un côté et il "tombe" vers le côté opposé jusqu'à rencontrer un obstacle.
- Le nombre de coup est limité (on fini toujours par remplir la grille).
- On ne peut pas revenir à une situation précédente, le jeu progresse toujours.
- Il n'y a qu'un gagnant ou un nul.
- On peut créer des "trous" dans la grille (des zones qu'on ne pourra plus jamais remplir).
- On peut finir par boucher complètement un côté de la grille et donc perdre une dimension de chute.
- La configuration de la grille change peu à chaque coup.
- Ca ressemble peut-être trop à un "vrai" puissance 4 ?
- Combinaison des 2 ? En écrivant les règles je me dis qu'on peut aussi combiner les 2 règles.
Voici un exemple 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 |
Défauts :
On peut quand même palier à certains des défauts avec des règles complémentaires : nombre de coups par partie limité, interdiction de pousser une ligne dans le sens opposé au coup précédent, le joueur faisant l'action a l'avantage pour la victoire...
Voici un exemple 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 B1 (et le pion tombe vers le haut jusqu'au pion)
| 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 D2 (et le pion tombe vers la gauche jusqu'au pion)
| 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 D3
| 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 G4 (pour contrer Rouge qui ne peut plus jouer D4 pour gagner)
| 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 B1 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 |
Défauts :
Si un bord est libre et qu'on y insère un pion, il "tombe" vers le bord opposé.
Si un bord est occupé et qu'on y insère un pion, il "pousse" la ligne.
Voilà avant d'aller plus loin j'attend de voir si ça interesse du monde et de connaître vos avis !


