7Fermer9
illwieckzLe 25/06/2012 à 19:30
C'est typiquement de la programmation par règle ! Je ne sais pas s'il y a des langages de scripts qui propose ce type de programmation pour les jeux, mais ce serait une bonne idée de procéder ainsi. On écrit des règles en fonction des événements et des états, et un interpréteur de règles s'occupe de gérer le bazar au plus optimal (pour cette événement j'ai telle et telle règle, cette règle là est inutile dans l'état actuel, etc.). Je ne programme pas des jeux, mais l'exemple qui me vient à l'esprit est le système de gestion d’événement udev dans les environnements Linux.

J'avais développé un système de gestion de raid avec : le raid se gérait automatiquement par arrachage/insertion de disque à la main.

J'avais plusieurs règles :

* événement : un volume est arraché
condition : il est situé sur un disque SATA
condition : il fait parti d'un RAID1
action : retirer le volume du raid et déclarer le raid dégradé

* événement : un volume est ajouté
condition : c'est un disque SATA
condition : sa taille est supérieure ou égale au volume RAID1
action : recréer un partitionnement et préparer un volume RAID1

* événement : un volume est ajouté
condition : c'est un volume RAID1
condition : le RAID1 est dégradé
action : reconstruire le miroir avec ce volume

* événement : un volume est arraché
condition : c'est un volume RAID1
condition : un volume RAID1 est prêt et non utilisé
action : reconstruire le miroir avec ce volume

* événement : changement de statut du raid
action : envoyer un mail

On remarque que les actions des événements provoquent d'autres événements :
événement : disque SATA ajouté et de capacité suffisante → action : préparer volume RAID
événement : volume RAID prêt → action : reconstruire le miroir
On remarque que certains événements ne provoquent pas d'actions :
événement : volume RAID surnuméraire prêt → nada
événement : volume ajouté non SATA → nada
événement : volume ajouté trop petit → nada


C'est au gestionnaire d’événement et au processeur de règles de gérer tout ça (sous Debian, on trouve les règles udev dans /lib/udev/rules.d/ (règles statiques) /etc/udev/rules.d/ (règles générées)

Par exemple : une interface Ethernet est disponible (module chargé, matériel présent) :
Si le fichier de règle /etc/udev/rules.d/70-persistent-net.rules existe, nommer l'interface, s'il n'y a pas de règle, /lib/udev/rules.d/75-persistent-net-generator.rules générer un nom et ajouter une règle de nommage.
C'est donc une programmation par règle capable de modifier ses règles (au moins par surcharge).

Si je faisais un jeu et que je devais gérer des succès, j'implémenterai une telle solution si je n'en trouve pas déjà une toute prête. Il existe peut-être déjà un udev-like exprès pour gérer les événements de jeu par règle.

[note : le langage de description de règle d'udev est un langage à goto, ça fait bizarre !]