Ğeconomicus, maitre du jeu

Bonjour,

Comme indiqué dans un autre sujet, je souhaite (cela me servira de « stage » pour parfaire mes connaissances Typescript/React/React Native) créer une application/site internet pour aider à l’animation d’un Ğeconomicus. Pour être plus précis, je ne veux pas créer un Ğeconomicus en ligne (pour moi, cela poserai un gros problème didactique) mais bien une aide pour le maitre du jeu qui anime un Ğeconomicus en présentiel.

Ce projet se composerait :

  • d’un serveur qui enregistrerait les données, permettant de voir les résultats des autres parties, avec les graphiques et autres outils de comparaison entre les systèmes économiques ;
  • d’un client Web permettant de se connecter au serveur et servant d’aide à l’animation, en donnant des indications sur la marche à suivre et en effectuant le compte des points ;
  • d’une application Android, similaire à l’application Web, parce que je veux me faire un peu la main sur React Native.

Le serveur serait en NodeJS sous licence libre, afin que l’on puisse l’installer sur un PC portable et ainsi ne pas empêcher son utilisation si l’on est dans un endroit isolé d’Internet.

Je vais, par contre, avoir besoin de précisions concernant les règles du jeu, afin que je les intègre au programme. Voici déjà mes premières questions :

  • Le nombre minimum de personne est-il vraiment de 10 ? N’est-ce pas possible de démontrer l’influence des système économiques avec moins de personnes ? 6 joueurs, par exemple ?
  • Doit-il être possible d’intégrer de nouveaux joueurs en cours de partie ? De faire sortir des joueurs qui « démissionnent » ? Je pense que cela fausserait un peu les résultats, mais à cause du « putain de facteur humain », cela me semble indispensable à prévoir.

C’est tout pour le moment, mais je reviendrai vers vous si j’ai d’autres questions.

Merci !

1 « J'aime »

Ce nombre est issu d’un retour d’expérience sur énormément de parties. Il est fortement conseillé de s’y tenir.

C’est possible oui. De toute façon dans la réalité la population n’est pas fixe, elle varie. A noter qu’à 10 un joueur en plus c’est +10% pour N, alors qu’à 20 ce n’est que +5%.

1 « J'aime »

Merci @Galuel.

Autre question plus technique : comment faire pour prendre en compte automatiquement une extension en Javascript. Par exemple, @cgeek ou @elois, comment faites-vous pour que duniter-ui soit pris en compte automatiquement lorsqu’il est ajouté au projet principal ? Y a-t-il des instructions dans Duniter pour chercher d’éventuelles extensions ?

Les instructions de recherche de dépendances se trouvent ici : https://git.duniter.org/nodes/typescript/duniter/blob/dev/index.ts#L88-106

Puis le chargement du fichier se fait par l’instruction require() : https://git.duniter.org/nodes/typescript/duniter/blob/dev/index.ts#L61

1 « J'aime »

Salut Stéphane,
lors de notre dernier Ğeconomicus à Lyon, j’ai joué le rôle de banquier, et je me suis dit qu’il serait intéressant d’avoir une petite appli pour aider le banquier. Je n’ai pas pensé au maître du jeu pour l’instant, juste au banquier, qui a généralement plus de pain sur la planche. Il faut que ça aille vite. Surtout pour les actions les plus courantes (accorder un nouveau crédit, remboursement d’intérêts, remboursement du principal), et voir d’un coup d’œil si tout le monde est venu voir le banquier lors du tour courant. Et bien sûr autant à 10 qu’à 20.

Comme j’ai toujours horreur de faire simple et développer quelque chose vite fait en Java (et ensuite porter le truc à la main sur Android), je me suis dit que je pourrais en profiter pour apprendre un peu de Javascript (un peu comme toi, quoi). J’ai exclu d’emblée (même si c’était tentant) de faire un serveur web : mauvaise connexion, lag, etc sont autant d’imprévus qu’on a pas vraiment envie de subir au moment d’une partie. Ça fait vraiment le terrible classique de la personne de l’autre côté du guichet « ah désolé aujourd’hui l’informatique nous joue des tours ». Bon ça rajouterait un petit côté réaliste au jeu, mais je suis pas sûr que les joueurs apprécient… ni le banquier d’ailleurs. Du coup je voulais plutôt opter pour une appli standard, idéalement tournant sur PC et Android (React est plutôt orienté iOS, alors que je suis sous linux et que le support de windows semble quand même à ne pas négliger). Après quelques recherches, Angular/Ionic semble être la seule solution vraiment portable permettant de faire ça (y compris pour iOS), sans compter que notre ami kimamila nous en a donné la preuve avec Cesium.

Après, rien n’interdit que l’appli permette d’exporter les données du jeu pour les injecter dans un site web qui fédérerait les résultats des différents jeux. Du coup j’ai pris un peu de retard sur mon projet, je me suis laissé distraire par d’autres projets, mais j’ai commencé à suivre un tutorial angular pour commencer, c’est un peu différent de ce que je connaissais, mais rien d’insurmontable. Reste la partie Ionic.

Bon dans le même temps, ça vaudrait peut-être le coup de fédérer nos efforts ?

2 « J'aime »

Salut @jytou,

Alors, en fait, je suis parti du principe que l’animateur faisait tout cela à la fois (nous n’avons pas encore beaucoup de membres près de la Suisse, et il est difficile de trouver plusieurs personnes pour animer). Du coup, quand je dis que l’application va aider le maître du jeu, elle va aussi bien sûr aider la gestion du banquier.

C’est pour cela que je prévoie un serveur NodeJS autonome, que l’on pourra, du coup, installer sur son propre PC pour les cas de mauvaise connexion.

Non, pas du tout. React est orienté avant tout Web (donc fonctionne partout, pourvu que l’on ait un navigateur et du réseau) et la version Native permet de faire des applications Android et iOS (pour info, je ne travaille moi-même que sous Linux).

Dans un premier temps, je vais te répondre non. Non pas que je ne souhaite pas travailler avec toi :wink: , mais simplement parce que je vais quitter mon emploi dans quelques semaines pour créer une entreprise dont l’objectif sera de créer des sites Web et applications mobiles. Et je compte utiliser ce projet pour parfaire mes connaissances et mon expérience. C’est d’ailleurs aussi la raison pour laquelle je tiens absolument à faire un serveur.

Je publierai de toute façon mon travail sous licence libre, il pourra donc être réutilisé, modifié, adapté, etc.

1 « J'aime »

Ça marche. Pour ma part, je me suis dégonflé pour l’instant et je fais un petit proto en java. Ça devrait aller très vite. On a un Ğeconomicus dans 2 semaines au sud de Lyon, ça sera l’occasion pour moi de tester ça…

1 « J'aime »

Salut @sveyret,
pourrions-nous au moins nous entendre sur un format d’échange ou de partage ? De cette manière, il sera plus facile d’avoir une base avec toutes les parties de tout le monde.
Pour ma part, je suis parti sur la structure suivante pour une partie que je représente en xml :

<game curdate="2018-03-31 14:35" location="Lyon" turnNumber="4" moneyMass="15" seizedValues="6" interestGained="6">
  <player name="Toto" active="true" curDebt="3" curInterest="1" visitedBank="true"/>
  <player name="Tata" active="true" curDebt="3" curInterest="1" visitedBank="false"/>
  <player name="Titi" active="true" curDebt="0" curInterest="0" visitedBank="true"/>
  <event type="J" tstamp="2018-03-31 14:42" player="Toto"/>     <= PLAYER JOINED GAME
  <event type="J" tstamp="2018-03-31 14:44" player="Tata"/>     <= PLAYER JOINED GAME
...
  <event type="T" tstamp="2018-03-31 14:48"/>                   <= GAME STARTS -> INITIATE A NEW TURN
  <event type="N" tstamp="2018-03-31 14:49" player="Toto" principal="3" interest="1"/>     <= PLAYER TOOK A CREDIT
...
  <event type="T" tstamp="2018-03-31 14:52"/>                   <= NEW TURN
  <event type="I" tstamp="2018-03-31 14:54" player="Toto" interest="1"/>     <= PLAYER PAID INTEREST ONLY
...
  <event type="T" tstamp="2018-03-31 15:03"/>                   <= NEW TURN
  <event type="C" tstamp="2018-03-31 15:06" player="Toto" weakCards="2" mediumCards="2" strongCards="0"/>     <= PLAYER COULD NOT PAY: GOT HIS CARDS SEIZED
  <event type="D" tstamp="2018-03-31 15:07" player="Tata"/>     <= PLAYER DIED, DID NOT HAVE ANY CREDIT
</game>

Les types d’événements sont (pour l’instant - je me focalise sur le banquier) :

  • JOIN(“Player joins game”),
  • TURN(“Start of a new turn”),
  • NEW_CREDIT(“Player takes a new credit”),
  • INTEREST_ONLY(“Player only pays the interest for this turn”),
  • REIMB_CREDIT(“Player pays back his credit in full”),
  • CANNOT_PAY(“Player cannot pay - his cards will be seized”),
  • BANKRUPT(“Player goes bankrupt: he is left with less than 4 cards”),
  • PRISON(“Player doesn’t have enough to pay back, he goes to prison”),
  • QUIT(“Player quits the game - has to leave”),
  • DEATH(“Player dies”)

J’espère que ce n’est pas trop cryptique. L’idéal serait qu’on se tienne à ce genre de format pour pouvoir exporter et importer nos parties. Il est du coup facile à l’aide des événements de savoir ce qui s’est passé (et quand) dans la partie, et d’avoir son état à un instant t. Le tout étant bien sûr sauvegardé à chaque action (dans une base de données H2 pour mon proto) au cas où la machine plante (ou panne de courant, que sais-je).

Salut !

Alors en fait, je ne suis pas du tout parti sur ce modèle. Mes données sont stockées sur une base NoSQL qui contient les informations concernant la partie dans une première « table » et les informations sur chaque manche dans une seconde. Les informations spécifiques à la banque sont dans une troisième table gérée par l’extension « monnaie dette ».

Toutefois, je pense que cela n’a pas forcément d’importance, au pire, on fera un système d’import depuis l’un des formats vers l’autre, il suffit qu’il y ait les informations nécessaires à chaque fois. Je vais donc ajouter les évènements que tu indiques et que je n’avais pas prévu à l’origine. Pour toi, par rapport aux données que je récupère, ce qu’il manque est le pseudonyme et courriel de l’animateur.

À+

1 « J'aime »

Excellente idée, je rajoute ça de suite. :slight_smile:
J’ai aussi rajouté un champ libre « description » pour ajouter des infos comme par exemple d’autres animateurs, etc.

Parfait, j’avais prévu un champ « commentaire » pour le même usage… :slight_smile:

1 « J'aime »