Bonsoir,
J'aimerai réaliser et utiliser un système de scripts qui aurait le comportement suivant :
Charger dans un dict tout les fichiers contenus dans un dossier contenant chacun une réimplémentation d'une classe.
Je ne sais pas si cela veut dire quelque-chose ou pas, mais je pense que des exemples seront beaucoup plus parlants à vous comme à moi :
Voici la classe abstraite AbstractBlock qui comporte peut d’éléments (c'est juste pour l'exemple) :
Et voici par exemple un fichier "grass_radioactive.block" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class AbstractBlock: def __init__(self): pass def onCross(self, vehicle): pass
Comme vous pouvez le constater, le fichier "grass_radioactive.block" ne comporte pas d'include vers la classe AbstractBlock, car en effet je veux que ce soit un fichier de script et donc qu'il se limite au minimum et que les import se fassent en interne, pas dans le script. Je pourrais toujours rajouter le "import" dans la chaine de caractère avant de la passer à eval().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class GrassRadioactiveBlock(AbstractBlock): def __init__(self): pass def onCross(self, vehicle): vehicle.damage(10)
De plus, une fois tout les fichiers chargés, je voudrais avoir un dict contenant pour clé le nom du fichier (sans l'extension) et comme valeur la classe contenue dedans, par exemple ici mon dict peut être représenté comme ceci :
Je ne sais pas si cette méthode est trop dure à implémenter (à priori non à l'aide de eval()) ni si elle est "sâle" ou pas, mais je tiens absolument à séparer les fichiers de script du "moteur" du jeu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part blocks = {"radioactive_grass": RadioactiveGrassBlock}
Auriez vous déjà des idées pour charger ces classes dans le dict ? Car je ne vois pas comment faire avec eval()...
Merci d'avance pour vos éventuelles remarques et réponses![]()
Partager