我最近开始学习一些C#并写了一个Yahtzee克隆。我的下一步(现在游戏逻辑已经到位并正常运行)是整合一些方法来保持所有游戏的统计数据。
我的问题是,我应该如何存储这些信息?我的第一个想法是使用一个数据库,我觉得这就是我得到的答案......如果是这样的话,你能指出我从C#应用程序创建和访问数据库的良好资源吗?
存储在XML文件中实际上对我来说更有意义,但我想如果我建议我会被撕裂;)。我习惯于构建Web应用程序,对于那些,文本文件通常不受欢迎。
那么,使用XML文件,我应该看哪些类可以轻松操作?
答案 0 :(得分:16)
这是一个想法:使用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();
}
答案 1 :(得分:13)
对于类似这样的事情,数据库可能有点过分 - 首先将您的信息存储在XML文档(或一系列XML文档中,如果有大量数据)。你得到了所有那些漂亮的XCopy部署内容,你仍然可以使用LINQ,如果你以后确定需要高性能的关系查询逻辑,那么它将平稳过渡到数据库。
答案 2 :(得分:7)
数据库可能过度 - 您是否考虑过仅将分数存储在文件中?
如果您决定使用数据库,可以考虑SQLite,您可以将其作为文件分发。有一个开源的.NET提供程序 - System.Data.SQLite - 包含了入门所需的一切。
在.NET中访问和读取数据库非常简单 - 请查看this question以获取示例代码。
答案 3 :(得分:4)
SQL Express是一个非常免费,轻量级的SQL Server数据库版本。如果你去DB路线,你可以试试。
或者,您可以简单地在应用程序中创建数据集并将它们序列化为xml,或者您可以使用.NET 3.5 SP1附带的新创建的Entity Framework
答案 4 :(得分:3)
我不知道数据库是否一定是你想要的。对于像这样的简单游戏存储统计数据可能有点过分。数据库很好;但你不应该在每种情况下自动使用一个(我假设这是一个客户端应用程序,而不是在线游戏)。
就个人而言,对于仅存在于用户计算机上的游戏,我只会将统计信息存储在一个文件中(XML或二进制文件 - 选择取决于您是否希望它是人类可读的)。
答案 5 :(得分:2)
我建议将数据保存在简单的POCO中,并将它们序列化为xml或二进制文件,就像Brian上面所做的那样。
如果您对数据库感兴趣,我建议Sql Server Compact Edition或VistaDB。两者都在您的应用程序中托管在proc中。
答案 6 :(得分:1)
您可以使用System::Xml
命名空间或System::Data
命名空间。第一个为您提供原始XML,后者为您提供了一个方便的XML包装器。
答案 7 :(得分:1)
我建议只使用数据库。我建议使用LINQ或ORM工具与数据库进行交互。为了学习LINQ,我会看一下Scott Guthrie的帖子。我想其中有9个都在一起。我链接了下面的第1部分。如果你想使用ORM工具,比如说nhibernate,那么我建议你查看夏天的nHibernate截屏视频。对于nhibernate来说,它们是一个非常好的学习资源。
我不同意使用XML。通过报告大量数据的统计数据,您无法使用关系数据库。是的,XML是轻量级的,但除了采用基于完整服务的实现之外,轻量级关系数据库还有很多选择。 (即SQL Server Compact,SQLite等等......)
答案 8 :(得分:1)
对于这种情况,建模良好的[Serializable]
班级和Stats
上的XmlSerializer
属性是最佳选择,IMO。