Not-a-Hub icon indicating copy to clipboard operation
Not-a-Hub copied to clipboard

Un article sur l'utilisation des free monads pour définir les règles de jeux vidéo

Open Iltotore opened this issue 1 year ago • 3 comments

Sujet de l'article

Sujet très inspiré de cet article dont le lien avait été posté sur le canal #langages-fonctionnels. Il traite de l'utilisation des free monads pour représenter un système de règles complexes (ici d'un jeu de cartes) qui peuvent être modifiées dynamiquement. Deux intérêts principaux:

  • Faire un DSL restreint n'autorisant que les actions "valides"
  • Pouvoir métaprogrammer l'action décrite par une composition de monades

Je trouve l'idée de l'article originale et prometteuse mais assez survolée. J'aimerais faire un article plus détaillé sur ce même principe en prenant comme exemple un système (très simplifié) de combat pokémon comprenant:

  • Des pokémons (Espèce, PV, Vitesse...)
  • Des capacités dont l'effet est représenté par des free monads (DSL)
  • Des talents dont l'effet est décrit par une règle de réécriture du DSL (e.g Soin Poison transforme les dégâts du poison en soin)
  • Des status comprenant deux effets: règle de réécriture à l'instar du talent (e.g la brûlure divise par deux les dégâts) et effet à la fin du tour (e.g le poison inflige des dégâts à chaque tour).

Je n'ai pas encore push le projet sur Github.

Langage

Je compte utiliser Scala car il s'agit du langage que je maîtrise le mieux et je pense que sa syntaxe est plus compréhensible pour la plupart des personnes que celle de Haskell ou OCaml.

Prérequis

L'article n'est pas destiné aux novices mais plutôt à ceux qui ont au moins les bases de la programmation fonctionnelle. Les notions d'ADT/enums fonctionnelles et pattern matching seront considérées comme connues. Je ne pense pas qu'il y ai spécialement besoin de savoir ce qu'est exactement une monade. J'en citerai quelques exemples (Option, List) puis j'expliquerai plutôt en détails ce qu'est une free monad (est-ce que quelqu'un a un équivalent français ?).

Iltotore avatar Jan 25 '24 08:01 Iltotore