一种存储信息的方法

时间:2011-03-25 08:17:55

标签: c# console-application

我正在使用Visual Studio制作控制台应用程序,编码正在编写(C#)。该程序将成为一个基本的命令提示游戏。

所以,我正试图找到一种存储信息的方法。我对编码很新,所以我不知道我需要制作什么类型的文件。我只想要一种方法来存储名称和字符级别等内容,基本上是字符串和整数。

虽然,我不想使用“.txt”文件或类似的东西。我真的在寻找嵌入该计划的东西。

感谢您抽出宝贵时间阅读我的问题;我很乐意回答您可能遇到的任何其他问题,以便我能够实现我正在努力的目标。

6 个答案:

答案 0 :(得分:2)

一种简单直接的方法是创建一个存储所有相关数据的可序列化类。这个类可以很容易地写入和读取例如一个Xml文件。

示例代码:

[Serializable]
public class GameData
{
    public int Highscore;

    /* Plus any other data you want to store */
}

public class Game
{
    private const string gameDataLocation = "C:\\GameData.xml";
    private GameData gameData;

    /* Your game methods */

    private void StoreData()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(GameData));
        StreamWriter writer = new StreamWriter(gameDataLocation);
        serializer.Serialize(writer, gameData);
        writer.Close();
    }

    private void LoadData()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(GameData));
        FileStream fileStream = new FileStream(gameDataLocation, FileMode.Open); 
        gameData = (GameData)serializer.Deserialize(fileStream);
        fileStream.Close();
    }
}

答案 1 :(得分:1)

我认为你首先应该更深入地思考你想要什么。 txt已过,请使用xml for separate levels, for characters。运行时序列化(storing objects in binary format)也可能有帮助

答案 2 :(得分:1)

如果您想存储游戏设置,可以使用app.config和自动生成的设置类。 如果你想存储最好的游戏玩家名字或其他东西,考虑你自己的格式是合理的

答案 3 :(得分:1)

您可以使用Sqlite数据库来实现此目的。您还可以存储二进制序列化对象,并且很容易使用它。

Sqlite usage in c# example

Sqlite documentation

答案 4 :(得分:1)

如果您计划包含多个播放器数据,我建议使用一些结构良好的存储,例如XML。谷歌那个谷歌LINQ转XML。

但是!最好从txt开始,熟悉C#,类,语法等。然后学习使用功能,基本上是基于此。基于您不熟悉/

的情况,这很难深入到抽象中

答案 5 :(得分:1)

完全错过Florians的回答,但我发布了这个,因为你可能会从中学到一些东西,即使它基本上是相同的答案。

[Serializable]
public class Player
{
    public string Name { get; set; }
    public int Level { get; set; }
    public Weapon Weapon { get; set; }
}

[Serializable]
public class Weapon
{
    public string Name { get; set; }
    public int MaxDamage { get; set; }
    public int Range { get; set; }
    public WeaponClass Class { get; set; }

    public enum WeaponClass { Sword, Club, Bow }
}

然后你可以像这样使用这些

var filename = @"c:\temp\player.xml";

var sword = new Weapon { Name = "Dáinsleif", MaxDamage = 42, Range = 1, Class = Weapon.WeaponClass.Sword };
var player = new Player { Name = "Fafhrd", Level = 19, Weapon = sword };

var ser = new XmlSerializer(typeof(Player));

var file = File.OpenWrite(filename);
ser.Serialize(file, player);
file.Close();

player = null;

file = File.OpenRead(filename);
player = (Player)ser.Deserialize(file);
file.Close();

XML:

<?xml version="1.0"?>
<Player xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Fafhrd</Name>
  <Level>19</Level>
  <Weapon>
    <Name>Dáinsleif</Name>
    <MaxDamage>42</MaxDamage>
    <Range>1</Range>
    <Class>Sword</Class>
  </Weapon>
</Player>