16

我最近开始学习一些 C# 并编写了 Yahtzee 克隆。我的下一步(现在游戏逻辑已经到位并正常运行)是整合一些方法来保持所有游戏的统计数据。

我的问题是,我应该如何存储这些信息?我的第一个想法是使用数据库,我觉得这就是我会得到的答案......如果是这样的话,你能给我指出一个从 C# 应用程序创建和访问数据库的好资源吗?


存储在 XML 文件中实际上对我来说更有意义,但我想如果我建议我会被撕裂;)。我习惯于构建 Web 应用程序,而对于这些应用程序,文本文件通常不受欢迎。

那么,使用 XML 文件,我应该查看哪些类可以轻松操作?

4

9 回答 9

17

这是一个想法:使用 Xml 序列化。设计您的 GameStats 数据结构,并根据需要使用 Xml 属性来影响架构。我喜欢将这种方法用于小型数据集,因为它快速简单,我需要做的就是设计和操作数据结构。


using (FileStream fs = new FileStream(....))
{
    // Read in stats
    XmlSerializer xs = new XmlSerializer(typeof(GameStats));
    GameStats stats = (GameStats)xs.Deserialize(fs);

    // Manipulate stats here ...

    // Write out game stats
    XmlSerializer xs = new XmlSerializer(typeof(GameStats));
    xs.Serialize(fs, stats);

    fs.Close();
}
于 2008-08-21T14:42:36.560 回答
13

对于这样的事情,数据库可能会过度杀伤力 - 首先将您的信息存储在 XML 文档(或一系列 XML 文档,如果有很多数据)中。你得到了所有漂亮的 XCopy 部署东西,你仍然可以使用 LINQ,如果你后来决定你真的需要高性能的关系查询逻辑,这将是一个平稳的过渡到数据库。

于 2008-08-21T14:31:47.863 回答
7

数据库可能是多余的——您是否考虑过将分数存储在文件中?

如果您决定使用数据库,您可能会考虑SQLite,您可以像文件一样分发它。有一个开源 .NET 提供程序 - System.Data.SQLite - 包括您开始使用所需的一切。

在 .NET 中访问和读取数据库非常容易 - 请查看此问题以获取示例代码。

于 2008-08-21T14:31:45.353 回答
4

MS 的SQL Express是其 SQL Server 数据库的免费、轻量级版本。如果你走 DB 路线,你可以试试。

或者,您可以简单地在应用程序中创建数据集并将它们序列化为 xml,或者您可以使用.NET 3.5 SP1 附带的新生成的实体框架之类的东西

于 2008-08-21T14:34:15.300 回答
3

我不知道数据库是否一定是您想要的。对于像这样的简单游戏存储统计数据,这可能是矫枉过正。数据库很好;但是您不应该在每种情况下都自动使用一个(我假设这是一个客户端应用程序,而不是在线游戏)。

就个人而言,对于仅存在于用户计算机上的游戏,我只会将统计信息存储在文件中(XML 或二进制文件 - 选择取决于您是否希望它是人类可读的)。

于 2008-08-21T14:32:19.923 回答
2

我建议将您的数据保存在简单的 POCO 中,然后将它们序列化为 xml 或二进制文件,就像 Brian 上面所做的那样。

如果您对数据库很感兴趣,我建议您使用Sql Server Compact EditionVistaDB。两者都托管在您的应用程序中。

于 2008-08-21T14:49:24.843 回答
1

您可以使用System::Xml命名空间或System::Data命名空间。第一个为您提供原始 XML,后者为您提供一个方便的 XML 包装器。

于 2008-08-21T14:38:57.863 回答
1

我建议只使用数据库。我建议使用 LINQ 或 ORM 工具与数据库进行交互。为了学习 LINQ,我会看看 Scott Guthrie 的帖子。我认为总共有9个。我在下面链接了第 1 部分。如果您想使用 ORM 工具,例如 nhibernate,那么我建议您查看 Summer of nHibernate 截屏视频。它们是 nhibernate 的一个非常好的学习资源。

我不同意使用 XML。通过报告大量数据的统计信息,您无法使用关系数据库。是的,XML 是轻量级的,但是对于轻量级的关系数据库也有很多选择,除了使用一个完整的基于服务的实现。(即SQL Server CompactSQLite等...)

于 2008-08-21T14:47:24.363 回答
1

对于这种情况,[Serializable]一个很好的建模Stats类的属性XmlSerializer是要走的路,IMO。

于 2008-08-21T15:17:01.157 回答