Skip to content

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

Description

@Iltotore

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 ?).

Metadata

Metadata

Assignees

Labels

Nouvel articleProposition de création d'un nouvel article

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions