Bonjour,
Je travaille actuellement sur un petit projet pour tester différentes manières de rendre un programme plus modulaire : plugins, scripts, …
Le programme en lui-même est plutôt simple : il s'agit d'un jeu de cartes (dans le style des cartes Magic). Chaque carte peut être soit une créature, soit un sort. Si c'est un sort, elle dispose d'une seule action (le sort en question). Si c'est une créature, elle dispose de plusieurs (mais le nombre est défini). De plus, chaque carte dispose de certaines propriétés communes telles que le nom, description, niveau, …

Je cherche donc à implémenter chaque carte sous forme de plugins, scripts en différents langages, … afin d'avoir quelque chose le plus modulaire possible. Voilà ma classe Carte, toute simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Carte {
public:
 
	enum Type {
		Creature,
		Sort,
		Indefini,
	};
 
	Carte();
	virtual ~Carte();
	virtual void debutTour();
	virtual void invocation();
	virtual void mort();
	virtual int niveau() const;
	virtual int pv() const;
	virtual int pvMax() const;
	virtual std::string nom() const;
 
private:
	int		m_niveau;
	int		m_pv;
	int		m_pvMax;
	Type		m_type;
	std::string	m_nom;
	Joueur*		m_prop;
	Joueur*		m_adversaire;
};
Chaque méthode est définie vide dans le cpp, sauf les accesseurs, toutes les cartes n'ayant pas besoin de réimplémenter chacune des actions. Ces méthodes sont appelées automatiquement par le reste du programme.

J'ai commencé deux «chargeurs» de cartes : un sous la forme de plugins (en C++), qui avance bien et ne me pose pas de problème particulier. Le second consiste à charger un script lua définissant une carte. Dans un premier temps, je cherche à simplement définir les propriétés «basiques», et non les actions. J'étais parti sur l'exemple présenté ici. J'arrive à faire dans un script lua une classe qui dérive de Carte, et y appeler des méthodes… Mais c'est là que je me rends compte d'un gros soucis sur mon raisonnement : je n'ai aucun moyen de récupérer cette carte dans mon code C++ (du moins, je n'en ai pas trouvé).

Et là, je sèche… Je ne vois pas comment définir une classe en lua, qui contienne les mêmes propriétés qu'une classe C++, et la récupérer en C++.

Si quelqu'un à la moindre piste, je suis preneur !
Merci.