URL: https://linuxfr.org/users/joubu/journaux/boulot-m%C3%A9tro-tarot Title: Boulot, métro, Tarot ! Authors: joubu Date: 2010年12月14日T23:23:33+01:00 Tags: tarot Score: 18 Bonjour à toute(s?) et à tous ! C'est avec plaisir que je vous présente un projet personnel que j'ai développé durant ces derniers mois : TarotSqores. J'étais au chômage et pour ne pas trop perdre la main avec le clavier, je me suis lancé dans un petit logiciel qui permet de compter les points au tarot lors d'une partie entre potes. Les règles sont tellement complexes que en fin de soirée, ça devenait difficile de continuer à calculer les points sur une feuille de papier. Les cas particuliers entraînant systématiquement des variantes en fonction de la provenance des joueurs. TarotSqores est un logiciel libre sous licence GPLv3+ écrit en python avec la bibliothèque graphique Qt. Il y a un an, j'ai développé une pré-version de ce logiciel, en ligne de commande, pour apprendre le langage python. Il s'est révélé qu'une petite interface graphique pour y ajouter certaines fonctionnalités supplémentaires ne serait pas mal. Après avoir perdu mon boulot et en chercher un pendant quelques mois, il fallait absolument que je fasse un truc. Pourquoi python ? C'est un langage que j'apprécie et dans lequel je voulais progresser. Je suis complètement autodidacte dans ce langage et j'espère que le code ne fera pas bondir les puristes ! Pourquoi Qt ? Connaissant déjà un petit peu GTK, je me suis lancé à la découverte de Qt. La doc est excellente, les exemples nombreux sur le web et des outils comme qt-desiner sont pratiques pour éviter de se prendre la tête au positionnement des widgets (entre autres !). Pourquoi GPL ? Ça fait seulement 3,4 semaines que je suis certain que le code est à peut près stable et que je vais pouvoir garder une certaine cohérence au niveau des versions et des données enregistrées. Je pense que ce petit programme sans prétention servira à certains d'entre vous et c'est pourquoi j'ai choisi de libérer le code. (pourquoi GPL ? Parce que ! et pour le copyleft) Une première version (0.1) était jouable, mais toutes les règles (en particulier les primes) n'étaient pas encore intégrées. La version 0.2 intégrait presque toutes les fonctionnalités existantes. La version actuelle (0.3) utilise un ORM pour mapper les objets avec une base de données relationnelle et rendre la manipulation des données plus simple. Fonctionnalités : * Règles TarotSqores permet de compter les points d'une partie à 3, 4 ou 5 joueurs. Il prend en compte, il me semble, toutes les règles officielles du tarot : * Petit sec, * Petit au bout (gagné ou perdu), * Le grand chelem (gagné, perdu, annoncé ou pas) * Les poignées * Les misères (d'atout ou de têtes) * Appel du roi lors d'une partie à 5 Une variante à également été intégrée : "Jouer la misère" qui permet, lors d'une partie sans preneur, de jouer la partie dans le but de gagner le moins de points possible. Ça permet, dans certains cas, de forcer des joueurs avec un jeu moyen de prendre un petit peu de risques et de ne pas attendre la main parfaite. * Graphiques Pendant une partie, il est possible de grapher la progression de chaque joueur. Ça permet d'avoir une vue globale sur le déroulement de la partie et de mieux voir les écarts entre chacun. * Persistance Il est vite apparu l'envie de vouloir enregistrer une partie. Dans un premier temps, les parties et joueurs étaient sauvegardés avec le module python cPyckle qui permet de dumper un objet dans un fichier. Le problème est que lorsque l'on veut modifier la structure de l'objet, il n'est plus possible de le loader et de le manipuler. Il a donc fallu passer par une base de données (à partir de la v0.3). J'ai choisi de passer par un ORM (Elixir/sqlalchemy) et d'utiliser sqlite3 comme SGBDR. Cette étape à permis d'alléger et de simplifier le code par endroit et surtout de rendre la manipulation des données plus simple et plus cohérente. Il est donc possible de sauvegarder/charger une partie ou de l'exporter au format texte. Au niveau de l'export, on peut exporter/importer une partie et un joueur. Concrètement, ça permet de partager des parties entre les joueurs présents. Claire va chez Alice et Bob. Elle amène son fichier qui représente son joueur (un id, un nom et une couleur, rien de plus). Après import de son joueur chez Bob et Alice, elle pourra jouer une partie et retourner chez elle après export de cette dernière. Ça lui permettra d'importer ensuite cette partie chez elle pour que la partie soit intégrée à ses stats. * Stats La partie intéressante :) Étant donné qu'on possède toutes les infos, pourquoi s'en priver ! Il est possible de voir et d'étudier la manière de jouer de chacun : la fenêtre "Historique" permet de voir les informations pour des joueurs et pour des parties. Entre autres, il est possible de savoir combien de fois Bob à choisi quel contrat, avec combien de bouts, s'il a plus tendance à gagner ou à perdre, etc. Il reste certainement des données qu'il serait intéressant de générer... * La télécommande Suite à une demande d'un ami, j'ai rajouté rapidement la possibilité de brancher une télécommande (BD Remote Control, la télécommande de la PS3) afin de pouvoir rentrer les informations sans être scotché à l'ordinateur toute la soirée. C'est un peu fait à l'arrache mais ça à l'air de fonctionner. * Aides Les règles principales (ou ambiguës) du tarot sont également présentes ainsi qu'une explication du fonctionnement l'historique. Voilà, j'attends vos éventuels retours et n'hésitez pas à remonter les bugs ! Il en reste évidemment encore quelques uns... Si vous avez des idées d'évolution, je suis également preneur. J'ai développé TarotSqores en fonction des règles que j'avais l'habitude d'utiliser mais il y en a certainement d'autres qu'il serait possible d'intégrer. Il n'a pas encore énormément tester, donc pas taper trop fort si il reste des bugs... C'est un petit projet sans prétention qui, j'espère, sera utile à certains d'entre vous ! C'était un peu plus long que prévu, surtout que ça aurait pu se résumer en 3 lignes : Le projet est hébergé sur sf : [https://sourceforge.net/projects/tarotsqores/](https://sourceforge.net/projects/tarotsqores/) Les sources sont consultables : [http://tarotsqores.git.sourceforge.net/git/gitweb.cgi?p=taro(...)](http://tarotsqores.git.sourceforge.net/git/gitweb.cgi?p=tarotsqores/tarotsqores;a=summary) Cloner le dépôt git : git clone git://tarotsqores.git.sourceforge.net/gitroot/tarotsqores/tarotsqores