2017-06-27 3 views
1

私はRPGエンジンを開発経験のために開発していますが、実際には商用目的ではありません。しかし、私はクラスベースの統計情報を保存する場合、少し壁に当たった。 Game Makerで何年も幅広く働いていたので、私の経験はそれに合わせて調整されています。私は現在、C#でMonogameを使って作業しています。RPG統計/レベリングシステムにXMLを使用する方法

私が必要とする情報を保存するには、私が読んだものから外部ファイルが必要です。私はGMのINIファイルを呼び出して使用するのに慣れていましたが、XMLの周りに私の頭を包み込むことはできませんでした。私は達成しようとしているセットアップのパブリックペーストビンを持っていて、そうした設定が実行可能であるかどうか、あるいは私が何かひどいやり方でこれをやろうとしているのなら、皆さんのお土産に興味がありました。

私は(完全に理論によって)設計されたXML文書はそうのように構成されています

<?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> 

これは、XML文書がどのように動作するかではない場合、私はので、私はこれで犬をねじ込むないよ教えてください1!私が探しているものを達成するための最良の方法が何であるかについてのオープンな提案のために、誰かが私のためにコードを書くのを探しているわけではありません。私はどのようにしてどのレベルのクラスでも基本統計を得ることができるようにしたいと思います。だから私が(Barbarian、2)かそのような性質のものを要求したら、レベル2の野蛮人のための情報を得るでしょう:)

私は多くのチュートリアルにオンラインで従おうとしましたが、意味のある方法で外部ファイルを利用する最良の方法を実際に説明しているものが見つかりました。誰かがこの種の情報に関する資料を提案している場合は、私に知らせてください!

+0

私はおそらく 'baseAtk'、' baseFort'などの属性を使用していますが、XML文書はうまくいきますが、あなたが何を求めているのかはっきりしていません。オフサイトのチュートリアルなどを要求する質問は問題解決に役立つ特別な問題を私たちに与えていないということです。 LINQ to XMLを使用することができれば、素敵なXML APIとして強くお勧めします。それを超えて、より具体的な質問をしてください。 –

+2

最後にnumberというタグ名は使用しません。私は数値をIDのような属性にして、XMLを解析しやすくします。 – jdweng

+0

お返事いただきありがとうございます! @JonSkeet申し訳ありませんが、質問はとても自由です。私は多かれ少なかれXMLの仕組みを強く把握しておらず、Y LevelのX Classに関するデータを保存したり引っ張ったりする方法を学んでいるので、この情報をすべてクラスにハードコードする必要はありません:) XML文書の情報を解析する方法についてはまだ十分に把握していないので、私はそれについての私の理解が正しいことを確認したいので、私はどこにも行かなかったことを知っていました。 – MCourneya

答えて

0

あなたのXMLはうまくいきますが、BaseClass要素が複数で、コンテンツ要素( "Classes")がClassである必要があります。

たとえば、レベル2の野蛮人の基本攻撃ボーナスを抽出するには、「./BaseClass/Class[@Class='Barbarian']/Level[@Level='2」という形式のXPath式を使用します']/baseAtk」を参照してください。あるいは、LINQを使用します。

+1

恐ろしい!私は間違いなくそのすべてを調べます:)あなたの入力は非常に感謝しています! – MCourneya

+1

XPathは確かに一つの選択肢ですが、私は個人的には、ある言語を別の言語に効果的に埋め込むのを避けるために、LINQ to XMLを使用したいと考えています - root.Element( "BaseClass")要素( "Class")。しかし、個人的な味の問題。 –

+0

@JonSkeet - まず、10年前の日常からあなたと話したことはありません!そして第二に、質問は明らかにXMLを学ぶ人だから、XPathでもブラシを使うことができると結論づけました;) – hoodaticus

関連する問題