Journal Boulot, métro, Tarot !

Posté par  .
Étiquettes :
18
14
déc.
2010
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/

Les sources sont consultables :
http://tarotsqores.git.sourceforge.net/git/gitweb.cgi?p=taro(...)

Cloner le dépôt git :
git clone git://tarotsqores.git.sourceforge.net/gitroot/tarotsqores/tarotsqores
  • # Ah cool du Tarot :)

    Posté par  (site web personnel, Mastodon) . Évalué à 4.

    Cool, vu que le Tarot n'est pas très connu en dehors de la France (et peut être des pays francophones ?), ça fait du bien de voir des projets libres dessus.
    Quelques remarques/questions:
    - une capture d'écran ça aurait était sympa
    - ça ne permet que de compter les points, ou aussi de jouer ? Parce que je ne suis pas certain avec la description. Et comment on les entre les points ? (oui je sais, je peux installer et tester, mais je suis déjà plus que pris ce soir)
    - perso ça me gonflerait que quelqu'un sorte un ordi pendant une partie entre potes (déjà que j'engueule mes potes quand ils passent leur soirée sur le tél), mais ça pourrait être intéressant si on peut jouer (si jamais on n'a pas de vrai jeu sous la main).
    - le cas échéant, si tu veux des cartes de Tarot pour implémenter le jeu, j'ai fait un petit script pour récupérer celles dispos sur wikicommon dans la résolution de ton choix, dans l'archive http://www.goffi.org/index.php?download/35, il est dans frontends/wix/images et se nomme "split_card.sh".

    Bon courage
    • [^] # Re: Ah cool du Tarot :)

      Posté par  (site web personnel, Mastodon) . Évalué à -1.

      Ouch... «ça aurait été». «ça me gonflerais».
      Bon y'en a sûrement d'autres, mais ces deux là piquent les yeux...
      Plus qu'à mettre un ticket pour qu'on puisse modifier les commentaires dans les secondes qui suivent l'envoi sur le DLFP RoR...
    • [^] # Re: Ah cool du Tarot :)

      Posté par  . Évalué à 2.

      perso ça me gonflerait que quelqu'un sorte un ordi pendant une partie entre potes
      D'où la possibilité d'avoir une télécommande (relis bien).

      Sinon un "portage" sur Android ou sur calculatrice serait sympa, pour éviter le côté "laptop de 17 pouces posé sur la table".
      Je dis ça parce que j'avais commencé un "compteur de points au tarot" sur TI-83 dans mes années étudiantes :P

      THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.

      • [^] # Re: Ah cool du Tarot :)

        Posté par  . Évalué à 3.

        Il faut pas s'en servir pour noter les points, mais pour stocker l'ordre des plis. Après, les points viendront tout seul.
        • [^] # Re: Ah cool du Tarot :)

          Posté par  . Évalué à 4.

          Ça veut dire alors qu'il a tout le temps quelqu'un (un joueur?) qui pianote, à chaque levée? C'est pénible.

          Et puis y'a de quoi se méfier de quelqu'un qui joue au tarot en ayant à sa disposition une machine dotée d'une très très bonne mémoire et qui enregistre toutes les cartes tombées.

          THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.

    • [^] # Re: Ah cool du Tarot :)

      Posté par  . Évalué à 2.

      Non, ça ne permet pas de jouer, uniquement de compter les points. En gros, il suffit de renseigner le preneur, le nombre de points, de bouts, etc. pour chaque donne.
      Il n'y a donc pas une personne qui se charge de la saisie, mais uniquement 1 joueur qui rentre pendant 10 sec les infos.

      Pour le jeu de Tarot, c'est un projet que j'ai sous le coude, mais qui n'est pas du tout prêt...

      merci pour ton retour :)
  • # Fin de soirée...

    Posté par  . Évalué à 4.

    > [...] en fin de soirée, ça devenait difficile de continuer à calculer les points [...]

    Ca a l'air sympa, les soirées chez toi ! :-)
  • # Quelques remarques en vrac

    Posté par  (site web personnel) . Évalué à 4.

    1) Je te souhaite de trouver un taf rapidement
    2) Pourquoi un "q" à score ? Si il y a une raison même pas humoristique indique le quelque part.
    3) La description en anglais sur la page sourceforge est à revoir.
    Une proposition sans garantie:
    "TarotSqore helps you track the scores during a Tarot game (a french card game). It allows to record the score of your last play so you can restart it later and even produce graphical statistics of each player."
    5) y'a pas de 4
    6) Il est conseillé en python d'avoir un shebang pour la portabilité plutôt comme ça :
    #!/usr/bin/env python
    7) que vient faire la gestion d'un manette PS3 dans les sources ? Le tarot de mon temps c'était moins folichon :)
    8) Tu devrais "releaser" un tarball des sources au moins dans la partie "file" de sourceforge pour éviter à ceux qui ne veulent pas s'installer git/svn/mercurial etc...
    9) Ce ne sont que des remarques. Il n'y a que ce qui font, qui font des erreurs. Bonne continuation !
    10) dodo !
    • [^] # Re: Quelques remarques en vrac

      Posté par  . Évalué à 2.

      1) J'ai trouvé un taf :)
      2) Le "q" est là pour le Qt... Sur le coup j'avais pas trouvé de nom et "TarotScores" était déjà pris.
      3) Arf, la description, je l'ai complètement oubliée !
      5) pas de 4 non plus
      6) exact, faut que je le fasse
      7) Pas une manette, mais une télécommande. ça permet de ne pas avoir, comme soulevé dans les autres commentaires, une personne scotché à l'écran de l'ordinateur toute la soirée. Là, la machine peut être à distance et pouvoir rentrer les infos quend même.
      8) Oui, c'est prévu, mais j'ai eu la flemme hier soir :-/
      9) Super remarques, merci !
      10) boulot ...
  • # Pourquoi la GPL?

    Posté par  . Évalué à -2.

    Parce que sinon tu n'aurais pas pu présenter ça sur linuxfr sans te faire défoncer pendant 50 commentaires avant que quelqu'un parle du logiciel lui-même.

    Donc, la bonne réponse c'était "la GPL, parce que je suis un fervent partisan du libre". Ah là lààààà

    Autre avantage pour ton cas:
    L'employeur potentiel peut aller tester le programme et même évaluer la qualité du code source.
    Et ça, ça n'a pas de prix

    Bon, en pratique il ne va pas regarder le code source, dans le meilleur des cas il va se dire que ça doit être bien parce que t'as pas peur de le montrer, de toute façon le recruteur, en voyant "Python", pense que t'as codé avec un serpent sur les genoux.

    -----------> [ ]
    • [^] # Re: Pourquoi la GPL?

      Posté par  . Évalué à 1.

      Je voulais éviter de lancer un sujet comme ça dans ces hautes sphères trollesques.

      Mon "Parce que !" laissait supposer que c'était comme ça et que j'avais mes raisons. Mais effectivement ta réponse est également adéquate.
      Et le projet a bien évidemment été montré lors de mes entretiens d'embauche.
  • # Portage maemo

    Posté par  . Évalué à 4.

    Salut,

    Vu que c'est développé en python + Qt, je me dis que ça doit être facilement portable sur maemo, et là, ça m'intéresse de pouvoir le tester sur mon n900.

    C'est plus cool de mettre les points sur son téléphone que de laisser un pc allumé toute la soirée.

    Merci
  • # Bug

    Posté par  . Évalué à 1.

    On m'a remonté un bug avec les paquets de la ubuntu 10.10 (pyqt entre 4.7.2 et 4.7.4)

    TypeError: type 'list' is not supported as a slot argument type

    Il faudrait remplacer tous les types python des slots par PyQt_PyObject.

    J'essaye de faire ça ce soir :-/
    • [^] # Re: Bug

      Posté par  . Évalué à 1.

      ça devrait être réglé ...
  • # Règles selon la Fédération française de tarot

    Posté par  . Évalué à 2.

    pour les règles et le calcul des scores :
    - les misères n'existent pas
    - le petit sec entraîne l'annulation de la donne

    http://www.fftarot.fr/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.