2009-11-02 3 views
0

Je travaille sur un simulateur de jeu Magic The Gathering. Je n'ai pas trouvé de systèmes libres qui vous permettent de créer vos propres decks qui gèrent aussi le jeu (vie/endurance, compteurs, évènements déclenchés, etc.).Rappels dynamiques de l'inventaire dynamique

Mon problème est que je dois trouver un moyen efficace de déclencher des événements déclenchés pour les cartes qui sont en jeu. J'Envisioning les listes de cartes sont stockées au format XML et contenant des identifiants pour les actions qu'ils prennent comme suit:

<card> 
    <name>Bloodghast</name> 
    <cost>BB</cost> 
    <type>Creature</type> 
    <subtypes>Vampire,Spirit</subtypes> 
    <stats>2,1</stats> 
    <color>B</color> 
    <attributes> 
     <attribute> 
     <id>C41</id> 
     <description>Bloodghast can't block.</description> 
     </attribute> 
     <attribute> 
     <id>C42</id> 
     <description>Bloodghast has haste as long as an opponent has 10 or less life/</description> 
     </attribute> 
     <attribute> 
     <id>LF5</id> 
     <description>Landfall - Whenever a land enters the battlefield under your control, you may return Bloodghast from your graveyard to the battlefield.</description> 
     </attribute> 
    </attributes> 

Désolé pour faire que bavard (et probablement pas compréhensible pour tous ceux qui n'a pas vraiment jouer à la magie). Donc, je lisais dans cet arbre pour chaque carte qui est chargée pour un deck. J'ai besoin d'un moyen d'accrocher les attributs de la carte dans le "moteur de jeu" de sorte que, par exemple, quand le total de la vie d'un joueur tombe en dessous de 10 Bloodghast, ou quand une terre est jouée, le moteur me permettra de l'attraper. hors de mon cimetière. Pour ceux qui n'ont pas joué à Magic, d'autres exemples seraient que certaines cartes déclenchent une action lorsqu'un joueur se défausse d'une carte ou joue un sort d'une certaine couleur. Je pensais que je devrais probablement avoir un gestionnaire d'événement sur le moteur pour chaque circonstance qui déclencherait un événement (le joueur joue un sort, le total de vie du joueur change) et que chaque carte devrait ajouter un élément à une liste lui permet de se lier à cet événement, mais je ne pouvais même pas commencer à penser à un bon moyen de le faire.

Toute aide serait grandement appréciée. Je suis un programmeur assez décent, mais je préfère ne pas commencer ce projet 5 fois et réécrire le tout.

Répondre

1

Je suggère d'utiliser une base de données appropriée telle que SQLite ou SQLExpress afin de pouvoir établir des relations et normaliser vos données (pas de listes séparées par des virgules, par exemple).

La création d'un moteur de règles va être difficile pour Magic; Les effets peuvent faire toutes sortes de choses folles et votre moteur de règles devra tous les accommoder. Essentiellement, vous allez recréer le moteur de règles des jeux vidéo Magic: The Gathering afin de savoir ce qui va se passer et quand.

+0

J'avais envisagé d'utiliser SQL, mais je pense que les coûts de requête sur ce type de base de données seraient immenses comparés aux temps de recherche/lecture sur un document XML. Mon raisonnement est que j'ai seulement besoin de charger 40-70 cartes par joueur, pas toute la bibliothèque. Cependant, je n'ai fait aucun calcul pour appuyer la demande de représentation. Et oui, je devrais fondamentalement recréer le moteur, mais je pense qu'il y a un moyen efficace de le faire. – Boerema

+0

Les bases de données sont généralement beaucoup plus rapides que l'analyse XML. Vous n'avez besoin d'effectuer les requêtes qu'une seule fois car vous allez essentiellement transformer toutes les cartes en objets en C# afin qu'ils puissent être branchés dans le moteur de règles. Vous ne devriez pas lire les données plus d'une fois dans une situation comme celle-ci. – Soviut

+0

Pour trouver le moteur de règles, vous devez écrire toutes les règles standard du jeu (quand taper, quand dessiner, quand les effets peuvent être déclenchés, etc.) écrivez-les tous et commencez à ajouter toutes les règles d'effets possibles à la liste aussi bien. Une fois que vous avez une liste complète, organisez-les en fonction des caractéristiques. Ces caractéristiques constituent les éléments constitutifs de vos règles. Vous enchaînez ensuite les règles pour chacune de vos cartes. – Soviut