0

c# でゲームを作成していますが、問題が発生しました。ゲームでカーテン ラベルを txt ファイルに保存するようにしたいのですが、ここでは例を示します。

Label1.Text = "Character Name: "
Label2.Text = "Level: "
Label3.Text = "Exp: "

今私がやりたかったのは、txtファイルから「キャラクター名:[名前]」を取得することでしたか?しかし、ゲームを終了するときに名前を txt ファイルに保存したかったのです。したがって、これがより良い例かもしれません:

レベルを取得したい: [LVL] txt ファイルから、ゲーマーが終了してゲームを終了したときに、そこにあった既存の行を新しいレベルで上書きしたいですか?

StringReaderまたはを使用する必要があると思いますStringWriter

4

5 に答える 5

2

データ モデルで XML シリアル化を使用する簡単なサンプルを次に示します。using System.Xml.Serialization;ファイルの先頭に名前空間のインポート行があることを確認してください。

保存/ロードするデータを単純なクラスとして宣言します。たとえば、次のようになります。

public class SaveData
{
    public string CharacterName { get; set; }
    public int Level { get; set; }
    public int Experience { get; set; }
}

保存する場合は、そのデータ モデルを構築します。

SaveData saveState = new SaveData()
{
    CharacterName = myCharacter.Name,
    Level = myCharacter.Level,
    Experience = myCharacter.Experience
};

ファイルに保存するには、XmlSerializerクラスを使用してファイルへのストリームを開き、次のようにシリアル化します。

public void SaveStateToFile(SaveData state)
{
    XmlSerializer serializer = new XmlSerializer(typeof(SaveData));
    using (TextWriter writeFileStream = new StreamWriter(@"C:\savefile.xml"))
    {
        serializer.Serialize(writeFileStream, state);
    }
}

これにより、たとえば次の内容の xml ファイルが作成されます。

<?xml version="1.0" encoding="utf-8"?>
<SaveData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <CharacterName>John</CharacterName>
  <Level>10</Level>
  <Experience>9001</Experience>
</SaveData>

したがって、必要に応じて編集するのは非常に簡単です。データを再度ロードするには:

public SaveData LoadStateFromFile()
{
    XmlSerializer serializer = new XmlSerializer(typeof(SaveData));
    using (FileStream readFileStream = new FileStream(@"C:\savefile.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        return (SaveData)serializer.Deserialize(readFileStream);
    }
}

これにより、タイプセーフなデータモデルが得られ、必要に応じて GUI を再バインドできます。

SaveData loadedData = LoadStateFromFile();
Console.WriteLine(loadedData.CharacterName); //John
Console.WriteLine(loadedData.Level); //10
Console.WriteLine(loadedData.Experience); //9001

Label1.Text = "Character Name: " + loadedData.CharacterName;
Label2.Text = "Level: " + loadedData.Level;
Label3.Text = "Exp: " + loadedData.Experience;
于 2013-01-03T03:27:42.737 に答える
1

設定ファイルに XML を使用してみてください。非常に簡単な例を次に示します。

新しい XML ファイルを作成し、キャラクター名を入力して保存します。

XElement x = new XElement("Settings");
x.Add(new XElement("CharacterName", "John Doe"));
x.Save("1.xml");

保存した xml を読み込み、出力を印刷します。

XElement loaded = XElement.Load("1.xml");
Console.WriteLine(loaded.Element("CharacterName").Value);

開始するための MSDN の記事は次のとおりです: LINQ to XML


.NetFramework 3.5 以降が利用できない場合は、System.Xml名前空間のクラスを使用できます。見る

  1. .NET での XML: .NET Framework の XML クラスと C# は、シンプルでスケーラブルなデータ操作を提供します
  2. XPath と XmlDocument を使用して XML データを操作する
  3. XmlDocument クラスを使用した XML の記述

... C# xmldocumentでググるだけです。

于 2013-01-03T03:03:37.143 に答える
0

これは私が最終的に使用したコードであり、正常に機能します。

XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode = xmlDoc.CreateElement("Info");
xmlDoc.AppendChild(rootNode);

XmlNode userNode = xmlDoc.CreateElement("Username");
userNode.InnerText = Username.Text;
rootNode.AppendChild(userNode);

xmlDoc.Save(gameFolder + Username.Text + ".sav");

@KonstantinVasilcovのソースを使用しました

于 2013-01-03T11:20:30.273 に答える
0

SQLiteを試すことができます。テキストファイルに保存するデータベースです。独自のプレーン テキストを使用するよりもデータを整理できます。

于 2013-01-03T02:56:36.070 に答える
0

もう 1 つのオプションは、古い INI ファイルを使用することです。これに対処するのに役立つ C# の例を使用した優れた INI ファイル処理クラスを次に示します。これを使用する例を次に示します。

このようなINIFileを作成します

INIFile ini = new INIFile("C:\\test.ini");

IniWriteValueセクション内の特定のキーに新しい値を書き込むために使用するかIniReadValue、特定のセクション内のキーから値を読み取るために使用します。

于 2013-01-03T03:18:46.643 に答える