curly-lips

Nom

Resumé

openallumette [ [-n|--number] SeedNumber ]  [ [-v|--varient] [trivial | marienbad | grundy | wythoff ]  [-w [ttl|ltl] ]
  openallumette  Descriptor
  openallumette [-h|--help]  [-v|--version]  [--hall-of-fame]
openallumettetutor
  openallumette --tutor

Logo

Description

openallumette est une implémentation du jeu de Nim en Python se basant sur la bibliothèque Pygame, et conçue pour fonctionner seulement avec un clavier (comme vim).

Au premier lancement, un tutoriel sur les commandes et les moyens d'interaction avec l'interface est affiché.
Ce tutoriel ne sera pas affiché lors des lancements suivants même si vous pouvez le voir à nouveau en entrant la commande openallumettetutor.

Notez que les jeux de Nim ont une solution mathématique. Dès que vous la trouvez pour une variante, vous gagnez à tous les coups, il devient alors inintéressant de jouer à la variante.
C'est justement la raison d'être d'openallumette: guider les amateurs vers cette solution.

Dans les futures versions, toutes les variantes du jeu connues seront disponibles.
Ce jeu a été conçu pour les matheux et les amateurs sérieux de jeux. Plus tard, des outils pour mieux comprendre les jeux de Nim seront ajoutés.

⚠ Si vous cherchez un jeu enfantin et une interface graphique, passez votre chemin. Open Allumette est fait pour les nerdz par un geek, comme s’il s’agissait d’un éditeur de texte pour programmeurs. Et nous en sommes fiers.

Règles

Le jeu de Nim classique est un jeu au tour-par-tour. Les règles exactes dépendent de la variante, généralement le joueur doit prendre la dernière allumette (mode ttl pour "take-the-last" soit "prends la dernière") ou forcer l'adversaire à la prendre (mode ltl pour "let-the-last" soit "laisse la dernière"). Pour le moment openallumette ne permet de jouer que contre un bot. Dans de futures versions, un mode multijoueur à travers XMPP sera probablement disponible.

Utilisation

Le joueur peut directement lancer le jeu avec les configurations désirées en utilisant les options -n, -v et -w (Voir la section Options), ou aussi avec la chaîne de descripteur standard (Voir la section Configuration du descripteur).
À partir du moment où Open Allumette est lancé, le joueur peut ouvrir une autre session avec les commandes normales ou ex (voir les sections CommandEs et Ex commands’s).

Options

-n, --number=Graine
Démarre une partie avec Graine comme valeur de graine (valeur par défaut: 16)
-v, --varient=VariantE
Démarre une partie avec VariantE comme variante de jeu (valeur par défaut: trivial)
-w wtw
Démarre une nouvelle partie en mode wtw, il y a deux modes possibles, ttl et ltl. Voir la section wtw Mode pour plus de détails.
-c, --color-sheme=palette
Utilise palette comme palette à utiliser.
--hall-of-fame
Affiche le tableau d'honneur dans la console.

Composition de la fenêtre

Lors d'une partie, l'écran est normalement divisé en trois parties comme schématisé ci dessous. La zone des commandes permettant de taper les commandes, la zone d'historique montrant une liste d'actions et la zone des allumettes donnant une vue de la situation actuelle de la partie.


╔═════╦════════════════════════════════════════════════════╗ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║Zone ║ ║ ║d'his║ ║ ║torizone du match ║ ║que ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ╠═════╩════════════════════════════════════════════════════╣ ║ zone des commandes ║ ╚══════════════════════════════════════════════════════════╝

ZONE DES COMMANDES

C'est la zone principale du jeu car c'est la zone d'action de l'utilisateur. Elle est disposée au bas de la fenêtre et divisée en cinq parties qui sont, de gauche à droite:

Nom de la Variante
Cette zone affiche quelle variante est actuellement lancée.
Zone des commandes Ex
Cette zone affiche les commandes Ex. Voir la section dédiée dans Commandes.
Raccourcis claviers
Cette zone affiche les commandes en mode Normal Voir la section Raccourcis pour plus de détails.
Mode
Cette zone affiche la variable WTW, elle peut être en ttl (take the last (prendre la dernière)) ou ltl (let the last (laisser la dernière)). Voir la section Modes WTW pour plus de détails.
Temps écoulé
Cette zone affiche le temps écoulé depuis le début de la partie.

Zone d'historique

La zone d'historique affiche la liste chronologique des actions des participants à la partie. Voir Raccourcis claviers pour voir comment interagir avec elle.

Zone du match

Cette partie affiche l'état actuel du jeu.

Raccourcis claviers

n
Recharger la partie avec les mêmes paramètres.
p
Arrêter le compteur et mettre le jeu en pause.
nombreu
Annuler une (ou nombre) action(s).
numberr
Refaire une (ou nombre) action(s) annulées.
F8
Afficher ou masquer le mode d'aide pour certaines variantes.
, j
Revenir en arrière dans l'historique des commandes Ex.
, k
Aller en avant dans l'historique des commandes Ex.
, ALT-j
Descendre dans l'historique.
, ALT-k
Remonter dans l'historique.
, J, G
Aller à la fin de l'historique.
, K, gg
Aller au début de l'historique.
CTRL-↓, CTRL-j
Descendre dans le menu d'aide à l'autocompletion en mode Ex.
CTRL-↑, CTRL-k
Monter dans le menu d'aide à l'autocompletion en mode Ex.

Commandes Ex

Les “Commandes Ex” correspondent à toutes les commandes commençant par les deux-points (:) qui sont généralement entrées dans la Zone des commandes. Ce genre de commandes permet de réaliser beaucoup de choses, et en particulier d'accéder aux fonctionnalités avancées. Certaines commandes ex, celles décrites dans la section Commandes sont destinées à un usage général et peuvent être utilisées dans toutes formes de situations. D'autres commandes Ex sont spécifiques à un mode de jeu en particulier et sont décrites dans la section Variantes.

Pour entrer en mode Ex, utilisez la touche deux-points (:) et un curseur apparaîtra dans la zone de commandes. Lorsque l'utilisateur commence à taper une commande, il peut obtenir à tout moment plus d'information à son propos avec la touche Tab qui initiera le mode d'autocomplétion.

Alors, le mode d'autocomplétion ouvre une boîte au dessus de la zone de commande, affichant une aide courte à propos de la commande entrée.
À tout moment le joueur peut masquer la boîte avec la touche Esc.

Commandes

Ces commandes peuvent être entrées à tout moment et sont affichées dans la zone de commandes et commandes-ex (qui commencent par le préfixe :) en bas de l'écran.

:n, :new variante graine wtw
:n, :new Descripteur

Démarre une nouvelle partie avec les options comme suit:

variante
Le nom de la variante, qui peut être trivial (default), marienbad, grundy, ou whythoff. Voir la section Variantes pour plus de détails à propos de chaque variante.
graine
La graine, elle représente le nombre de référence de la situation originelle de la partie. L'usage dépend de la variante choisie.
wtw
Elle représente la condition pour gagner et peut prendre deux valeurs: ttl (take-the-last) le joueur doit prendre la dernière allumette pour gagner ; ltl (let-the-last) le joueur doit forcer son opposant à prendre la dernière allumette pour gagner.

Il est aussi possible d'utiliser simplement le descripteur décrit dans la section Le descripteur de configuration.

:about
Ouvrir l'écran de licences.
:colorsheme variante
Changer le thème à celui de la variante.
:quit, :q, ZZ
Quitter le jeu.
:saveas, :w
Sauvegarder l'état actuel du jeu et le chronomètre dans un fichier.
:open, :o
Ouvrir une partie enregistrée
:rules
Afficher les règles pour la variante en cours.
:help command, :h command
Obtenir de l'aide à propos d'une commande.
:tutor
Ouvrir le mode tutoriel.
:tip
Donner un indice.

Variantes

La syntaxe des actions à effectuer dans le jeu dépend principalement de la variante en cours. Dans tous les cas, il faut que vous soyez en mode normal, pour activer le mode normal, appuyez sur la touche .

Trivial (Par défaut)

Démarrage

Dans la variante triviale, il n'y a qu'une rangée d'allumettes, donc la graine définit exactement le nombre d'allumettes qu'il y aura dans cette rangée unique. La variante triviale n'a pas de mode avec assistant.

Règles

Dans la variante triviale, il y a une rangée de graine allumettes. À chaque tour, un joueur peut prendre une, deux ou trois allumettes dans la rangée.

Intreface et commandes

Lorsque le joueur execute une commande del, elle s'affiche dans la zone des raccourcis (Voir Zone des commandes), et ne prend pas effet jusqu'à ce qu'il appuie sur entrée.
Généralement, les allumettes prenables se distinguent par un ombrage et la dernière allumette a une couronne sur le dessus en mode TTL (prends la denrière) ou une tête de mort en LTL (laisse la dernière). Pour prendre des allumettes, il y a alors deux possibilités.

-[1|3|3], [1|2|3]
Il est possible d'indiquer explicitement le nombre d'allumettes que vous voulez prendre, pour ce faire, tapez le nombre en question suivi de . Il est aussi possible de précéder ce nombre d'un signe moins. -.
=NombreÀLaisser
Il est aussi possible d'indiquer le nombre d'allumettes que vous voulez laisser. Pour ce faire, il suffit de faire précéder ce nombre d'un signe égal =

Comment gagner ?

Si le joueur est en mesure de prendre la dernière allumette (c'est à dire si il reste trois allumettes maximum), les allumettes restantes s'affichent en train de bruler, il a alors gagné (en mode ttl) ou perdu (en mode ltl). La méthode d'affichage peut varier selon le thème.

Marienbad

Démarrage

Dans la variante Marienbad, la graine est le nombre de lignes. La ligne la plus haute a une allumette, à chaque ligne deux allumettes sont ajoutées. Nous pouvons calculer le nombre de colonnes en faisant “2×GRAINE-1”.
Par exemple, avec GRAINE=4, nous avons cette disposition:

  0       |
  1     | | |
  2   | | | | |
  3 | | | | | | |

    0 1 2 3 4 5 6

Règles

Chaque joueur, lorsque son tour est venu peut prendre autant d'allumettes qu'il veut, la condition est qu'elles soient dans la même colonne. Le gagnant est déterminé par selon le choix de WTW à l'initialisation.

Intreface et commandes

Pour prendre des allumettes en mode Marienbad, il faut renseigner deux informations:

Deux syntaxes sont possibles:

colonne=allumettes
Ce qui laisse allumettes dans la colonne numéro colonne
colonne-allumettes
Ce qui supprime allumettes allumettes de la colonne numéro colonne.

Mode assistant (Spoiler)

ATTENTION: Cette section dévoile la solution. Lisez la seulement si vous avez du mal à résoudre le problème du mode Marienbad.

La variante Marienbad dispose d'un mode assistant pour aider le joueur à comprendre la solution mathématique de la stratégie pour gagner. En appuyant sur F8, une petite boite apparaît aved des indications.

La boite montre le total d'allumette et la représentation de ce nombre en binaire. La stratégie consiste à maintenir la valeur binaire de la somme des lignes à chaque tour.

Par exemple, au début d'une partie avec une graine de 4, l'assistant apparaîtra ainsi:

1 = 0 0 1
  3 = 0 1 1
  5 = 1 0 1
  7 = 1 1 1
  ---------
  T = 2 2 4
  

Le nombre 5 représente le total des allumettes de la ligne 3, la valeur en binaire est 101. T représente le total des valeurs binaires additionnées en décimal. Pour gagner, T doit rester constant à chaque tour.

Grundy

Démarrage

Dans la variante Grundy, il y a une seule ligne au démarrage, donc GRAINE est le nombre d'allumettes de cette ligne.

Rules

Ici, le joueur ne doit pas à prendre ou laisser la dernière allumette, le but est de diviser la ligne d'allumettes en deux lignes inégales. À chaque tour le joueur doit prendre une des lignes subsidiaires, et la diviser inégalement. Dans le mode ttl, le but est de faire que l'opposant ne réussisse pas à diviser un tas inégalement, dans le mode ltl, le but est de chercher à forcer l'adversaire à diviser inégalement le dernier tas possible.

Interface et commandes

Dans l'implémentation de Grundy sur openallumette, les lignes ont un identifiant (sauf la première, car lui donner un numéro est inutile). L'identifiant est créé à partir de l'identifiant de la ligne mère et celui de la ligne actuelle, séparées par un point “.”. Lorsque la première ligne est divisée, elle donne deux lignes référencées 0 et 1. Ensuite, lorsqu'une ligne avec un identifiant “N est divisée, elle donne deux autres lignes référencées sous N.0 et N.1.

Maintenant, si le joueur veut diviser une ligne avec l'identifiant id en deux lignes avec a et b allumettes (a+b=le nombre d'allumettes que contenait la ligne mère), il doit indiquer l'identifiant de la ligne et d'un des deux nombres a ou b. Il n'est pas nécessaire d'indiquer les deux termes puisque par soustraction, le second sera déduit à partir du total.

ligne:a, ligne:a+b
Divise la ligne identifiée par ligne en deux lignes filles avec a et b allumettes avec pour identifiants ligne.0 et ligne.1. Seul le premier terme est nécessaire, le second, facultatif.

Mode assistant

TODO

Wythoff

Démarrage

Dans la variante de Whytoff, il y a deux lignes avec le même nombre d'allumettes au départ, la graine définit le nombre d'allumettes par ligne.

Règles

Dans la variante de Whytoff, il y a deux lignes, et les joueurs ont deux actions possibles:

Interface et commandes

Les deux lignes sont nommées A et B. Selon si le joueur veut prendre des allumettes des deux côtés ou d'un seul, il y a deux commandes possibles:

[-]allumettes
Prendre allumettes allumettes de chaque ligne.
ligne-allumettes
Prendre matchs allumettes de la ligne ligne.
ligne=allumettes
Définir le nombre allumettes à la ligne ligne.

Descripteur de configuration

Le descripteur de configuration est un court fragment de texte qui décrit la configuration d'une partie de Nim, dont toutes ses variables. La forme générale est la suivante:

Joueur1 Variante;Grainte;wtw

Les variables sont définies de la manière suivante

Joueur1
Décrit qui commence la partie. + pour l'humain ; - pour l'ordinateur. Le joueur commence par défaut.
Variante
Nom de la variante, voir la section Variantes pour les valeurs possibles.
Graine
La graine, elle dépend de la variante choisie.
wtw
Correspond à l'expression “What to (do to) win”. Voir la section Modes wtw pour plus de détails.

Par exemple le descripteur +Marienbad;26;ttl correspond au jeu en cours dans la variante Marienbad, avec 26 lignes (donc 57 colonnes), le gagnant sera le joueur qui prendra la dernière allumette et le joueur humain commence.

Notez que l'ordre n'importe que peu. Open Allumette comprendra la commande, mais il est mieux de respecter l'odre canonique. En plus de celà, préciser qui commence est optionnel.

Modes wtw

La variable wtw (“What to (do to) win”) définit les conditions pour gagner. En général, dans le jeu de Nim classique, il y a deux possibilités, on peut définir le gagnant comme celui qui empêche son adversaire de jouer, c'est le mode "normal", on peut aussi définir le gagnant comme celui qui force son adversaire à faire la dernière action autorisée et possible.
Dans Open Allumette, le mode normal est appelé ttl (pour 'take the last') et l'autre mode est appelé ltl (pour 'let the last').

Le sens exact de ttl et de ltl dépend de la variable choisie. En général, ttl signifie que le gagannt est le joeuur qui peut prendre la dernière allumette dans la partie et ltl signifie que le gagnant est le joeuur qui sera forcé de prendre la dernière allumette.

Il y a cependant quelques exceptions avec la variante Grundy en particulier, où ttl signifie que le but est de diviser la dernière ligne et ltl signifie que l'on doit forcer l'adversaire à diviser la dernière ligne. Voir Grundy pour plus de détails.

Thème

Il est possible de changer le thème avec un autre ou d'en créer un nouveau avec du CSS.

Pour changer le thème, utiliser simplement l'argument --colorsheme ou -c, ou encore la commande ex :c[olorsheme]. Alors, puis pointez sur un thème installé.

Molokai

Bibliographie

Voici quelques ressources pour étudier et mieux comprendre le jeu de Nim.

Variante de Grundy
  1. P. M. Grundy. Mathematics and Games. Eureka, vol.27, 1964.
  2. E. Berlekamp, J. H. Conway, and R. Guy. Winning Ways for your Mathematical Plays. Academic Press, 1982.

Captures d'écran

Vous pourrez découvrir de nombreuses captures d'écran sur le site officiel.

Écran à propos
Écran de victoire
Écran de défaite
Écran de pause

Installation

Linux(es) et BSD
TODO
Windows
TODO

Licence

Ce jeu, son manuel et tous les fichiers associés est distribué sous licence CC-BY-SA 3.0.

Auteur

La majorité de Open Allumette a été écrite par Fauve (aka Idriss al Idrissi) http://taniere.info et peut être retrouvé sur Github à cette adresse https://github.com/FauveNoir/.

Le manuel a été traduit en Français par Nazmi, voir ma page de traducteur: http://nazmi.fr/trans/.