2017-06-27 3 views
1

Ich bin dabei, eine RPG-Engine zu entwickeln, die hauptsächlich für Entwicklungserfahrung gedacht ist und nicht wirklich etwas kommerzielles anstrebt. Ich habe jedoch ein bisschen von einer Wand getroffen, wenn es darum geht, die Basisstatistiken der Klasse zu speichern. Ich arbeite seit einigen Jahren intensiver im Game Maker und meine Erfahrung ist darauf ausgerichtet. Ich arbeite gerade in C# mit Monogame und wickle meinen Kopf darum herum.Wie verwende ich XML für ein RPG Stat/Leveling-System?

Ich glaube, eine gute Methode zum Speichern der Informationen, die ich brauche, wird externe Dateien benötigen, von dem, was ich gelesen habe. Ich bin es gewohnt, INI-Dateien von GM anzurufen und zu verwenden, aber ich hatte nicht so viel, um mich mit XML zu beschäftigen. Ich habe ein öffentliches Pastebin des Setups, das ich zu erreichen hoffe, und war neugierig auf die Taktiken Ihrer Leute, wenn solch ein Setup realisierbar ist oder wenn ich versuche, dies auf eine schreckliche Art und Weise zu tun.

Das XML-Dokument I (vollständig von der Theorie) war die Gestaltung wie so strukturiert ist:

<?xml version="1.0" encoding="utf-8" ?> 
<BaseClass> 
    <Class Class="Barbarian"> 
    <Level Level="1"> 
     <baseAtk>1</baseAtk> 
     <baseFort>2</baseFort> 
     <baseRef>0</baseRef> 
     <baseWill>0</baseWill> 
     <classSkillCt>2</classSkillCt> 
     <classSkill0>ID_CS_BARB_FASTMOVE</classSkill0> 
     <classSkill1>ID_CS_BARB_RAGE</classSkill1> 
    </Level> 
    <Level Level="2"> 
     <baseAtk>2</baseAtk> 
     <baseFort>3</baseFort> 
     <baseRef>0</baseRef> 
     <baseWill>0</baseWill> 
     <classSkillCt>2</classSkillCt> 
     <classSkill0>ID_CS_BARB_UNCDODGE</classSkill0> 
     <classSkill1>ID_CS_BARB_RAGEPWR1</classSkill1> 
    </Level> 
    <Level Level="3"> 
     <baseAtk>3</baseAtk> 
     <baseFort>3</baseFort> 
     <baseRef>1</baseRef> 
     <baseWill>1</baseWill> 
     <classSkillCt>1</classSkillCt> 
     <classSkill0>ID_CS_BARB_TRAPSENSE1</classSkill0> 
    </Level> 
    <Level Level="4"> 
     <baseAtk>4</baseAtk> 
     <baseFort>4</baseFort> 
     <baseRef>1</baseRef> 
     <baseWill>1</baseWill> 
     <classSkillCt>1</classSkillCt> 
     <classSkill0>ID_CS_BARB_RAGEPWR2</classSkill0> 
    </Level> 
    <Level Level="5"> 
     <baseAtk>5</baseAtk> 
     <baseFort>4</baseFort> 
     <baseRef>1</baseRef> 
     <baseWill>1</baseWill> 
     <classSkillCt>1</classSkillCt> 
     <classSkill0>ID_CS_BARB_IMPUNCDODGE</classSkill0> 
    </Level> 
    </Class> 
    <Class Class="Bard"> 
    <Level Level="1"> 
     <baseAtk>2</baseAtk> 
     <baseFort>1</baseFort> 
     <baseRef>3</baseRef> 
     <baseWill>3</baseWill> 
     <spellDay0>4</spellDay0> 
     <spellDay1>1</spellDay1> 
     <spellDay2>0</spellDay2> 
     <spellDay3>0</spellDay3> 
     <spellDay4>0</spellDay4> 
     <spellDay5>0</spellDay5> 
     <spellDay6>0</spellDay6> 
     <spellDay7>0</spellDay7> 
     <spellDay8>0</spellDay8> 
     <spellDay9>0</spellDay9> 
     <spellKnw0>6</spellKnw0> 
     <spellKnw1>4</spellKnw1> 
     <spellKnw2>0</spellKnw2> 
     <spellKnw3>0</spellKnw3> 
     <spellKnw4>0</spellKnw4> 
     <spellKnw5>0</spellKnw5> 
     <spellKnw6>0</spellKnw6> 
     <spellKnw7>0</spellKnw7> 
     <spellKnw8>0</spellKnw8> 
     <spellKnw9>0</spellKnw9> 
     <classSkillCt>6</classSkillCt> 
     <classSkill0>ID_CL_SKILL_BRD_BRDKNOWLEDGE</classSkill0> 
     <classSkill1>ID_CL_SKILL_BRD_BRDPERFORM</classSkill1> 
     <classSkill2>ID_CL_SKILL_BRD_COUNTERSONG</classSkill2> 
     <classSkill3>ID_CL_SKILL_BRD_DISTRACTION</classSkill3> 
     <classSkill4>ID_CL_SKILL_BRD_FASCINATE</classSkill4> 
     <classSkill5>ID_CL_SKILL_BRD_INSPCOURAGE1</classSkill5> 
    </Level> 
    </Class> 
</BaseClass> 

Wenn dies nicht der Fall, wie XML-Dokumente arbeiten, lassen Sie es mich wissen, damit nicht auf das ich das Hündchen Verschrauben ein! Ich suche niemanden, der den Code für mich schreibt, nur für offene Vorschläge, was der beste Weg ist, um das zu erreichen, wonach ich suche. Ich würde gerne in der Lage sein, die Basisstatistiken jeder Klasse auf jedem von mir gewünschten Level zu bekommen. Also, wenn ich (Barbar, 2) oder etwas von dieser Art fragen würde, würde ich die Informationen für einen Barbaren der Stufe 2 bekommen :)

Ich habe versucht, eine Reihe von Tutorials online zu folgen, aber noch nicht Ich habe einen gefunden, der wirklich den besten Weg erklärt hat, externe Dateien sinnvoll zu nutzen. Wenn jemand Materialien zu dieser Art von Informationen vorgeschlagen hat, lass es mich wissen!

+0

Das XML-Dokument, das Sie haben, ist in Ordnung, obwohl ich wahrscheinlich Attribute für "BaseAtk", "BaseFort" usw. verwenden würde. Es ist nicht wirklich klar, was Sie fordern - Fragen, die Off-Site-Tutorials usw. sind Off-Topic, und Sie haben uns kein spezifisches Problem gegeben, um Ihnen zu helfen, zu lösen. Wenn Sie LINQ zu XML verwenden können, empfehle ich * dies * als eine nette XML-API. Darüber hinaus sollten Sie Ihre Frage präzisieren. –

+2

Ich würde keine Tag-Namen mit der Nummer am Ende verwenden. Ich würde die Nummer zu einem Attribut wie id machen, was das Analysieren des XML erleichtert. – jdweng

+0

Danke, dass Sie sich die Zeit genommen haben, zu antworten! @JonSkeet Sorry, die Frage ist so offen. Ich habe mehr oder weniger kein Verständnis dafür, wie XML funktioniert, und ich versuche, eine Methode zum Speichern und Abrufen von Daten bezüglich der X-Klasse auf Y-Ebene zu erlernen, sodass ich diese Informationen nicht fest in einer Klasse codieren muss :) Da ich noch nicht gut verstanden habe, wie man die Informationen aus einem XML-Dokument herauslesen kann, wollte ich sicherstellen, dass mein kleines Verständnis davon korrekt ist, also wusste ich, dass ich nirgendwohin gehen würde. – MCourneya

Antwort

0

Ihr XML ist in Ordnung, obwohl das BaseClass-Element möglicherweise im Plural sein sollte und mit seinen Inhaltselementen ("Klassen"), die nur Class sind, übereinstimmen sollte.

Um zum Beispiel den Basisangriffsbonus für einen Level 2 Barbaren zu erhalten, würden Sie einen XPath-Ausdruck der Form "./BaseClass/Class[@Class='Barbarian']/Level[@Level='2 verwenden ']/baseAtk ". Alternativ würden Sie LINQ verwenden.

+1

Super! Ich werde auf jeden Fall in all das sehen :) Ihre Eingabe wird sehr geschätzt! – MCourneya

+1

Während XPath sicherlich eine Option ist, würde ich LINQ to XML verwenden, um zu vermeiden, dass eine Sprache effektiv in eine andere eingebettet wird - "root.Element (" BaseClass "). Elemente (" Class "). Wo (...) etc Aber Geschmackssache. –

+0

@JonSkeet - zuerst habe ich nicht mit dir seit dem täglichen wtf vor einem Jahrzehnt gesprochen! Und zweitens kam ich zu dem Schluss, dass, da die Frage offensichtlich jemand ist, der XML lernt, dass sie auch auf XPath aufpäppeln können;) Schön, Sie zu sehen, Mann! – hoodaticus

Verwandte Themen