2008-08-21 34 views
15

Recientemente he aprendido algo de C# y escribí un clon de Yahtzee. El siguiente paso (ahora que la lógica del juego está en su lugar y funciona correctamente) es integrar algún método para mantener estadísticas en todos los juegos jugados.Almacenar datos de una aplicación de C#

Mi pregunta es: ¿cómo debo proceder para almacenar esta información? Lo primero que pensé fue usar una base de datos y tengo la sensación de que esa es la respuesta que obtendré ... si ese es el caso, ¿podría indicarme un buen recurso para crear y acceder a una base de datos desde una aplicación C#?


Almacenar en un archivo XML en realidad tiene más sentido para mí, pero pensé que si me sugirió que me gustaría conseguir desgarrado;). Estoy acostumbrado a crear aplicaciones web y, para aquellos, los archivos de texto generalmente son mal vistos.

Así que, yendo con un archivo XML, ¿qué clases debería estar mirando que permitan una fácil manipulación?

Respuesta

16

Aquí hay una idea: use Xml Serialization. Diseña tu estructura de datos GameStats y, opcionalmente, utiliza atributos Xml para influir en el esquema a tu gusto. Me gusta usar este método para pequeños conjuntos de datos porque es rápido y fácil, y todo lo que tengo que hacer es diseñar y manipular la estructura de datos.


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(); 
} 
7

Una base de datos puede ser excesiva: ¿ha pensado simplemente en guardar los puntajes en un archivo?

Si decide ir con una base de datos, puede considerar SQLite, que puede distribuir como un archivo. Hay un proveedor de .NET de código abierto - System.Data.SQLite - que incluye todo lo que necesita para comenzar.

Acceder y leer desde una base de datos en .NET es bastante fácil: echa un vistazo a this question para ver el código de muestra.

13

Una base de datos probablemente sería excesiva para algo como esto: comience por almacenar su información en un documento XML (o una serie de documentos XML, si hay una gran cantidad de datos). Obtienes todo el ingenioso material de implementación de XCopy, aún puedes usar LINQ, y sería una transición suave a una base de datos si luego decidieras que realmente necesitabas una lógica de consulta relacional.

3

No sé si una base de datos es necesariamente lo que desea. Eso puede ser excesivo para almacenar estadísticas para un juego simple como ese. Las bases de datos son buenas; pero no debería usar automáticamente una en cada situación (supongo que esta es una aplicación cliente, no un juego en línea).

Personalmente, para un juego que existe solo en la computadora del usuario, simplemente almacenaría las estadísticas en un archivo (XML o binario: la elección depende de si desea que sea legible o no).

4

SQL Express de MS es una gran versión gratuita y liviana de su base de datos SQL Server. Podrías probar eso si vas por la ruta DB.

Como alternativa, puede simplemente crear conjuntos de datos dentro de la aplicación y serializar a XML, o se puede usar algo como el Entity Framework de nuevo cuño que se incluye con .NET 3.5 SP1

1

Puede utilizar el espacio de nombres o la System::XmlSystem::Data espacio de nombres. El primero le da XML sin procesar, el último le da un práctico contenedor para el XML.

1

Recomendaría simplemente usando una base de datos.Recomendaría usar LINQ o una herramienta ORM para interactuar con la base de datos. Para aprender LINQ, echaría un vistazo a las publicaciones de Scott Guthrie. Creo que hay 9 de ellos todos juntos. Yo vinculé la parte 1 a continuación. Si desea utilizar una herramienta ORM, por ejemplo, nhibernate, le recomiendo que consulte los screencasts de verano de nHibernate. Son un buen recurso de aprendizaje para el nhibernate.

No estoy de acuerdo con el uso de XML. Con las estadísticas de informes sobre una gran cantidad de datos, no se puede superar el uso de una base de datos relacional. Sí, XML es liviano, pero también hay muchas opciones para bases de datos relacionales livianas, además de una implementación completa basada en servicios. (Es decir SQL Server Compact, SQLite, etc ...)

+0

No tengo idea de por qué has sido tan votado. En este caso, yo no iría a una base de datos (incluso las más livianas que usted describió), pero su punto es válido y un día el póster original puede haber agregado lo suficiente a sus estadísticas para hacer que una BD sea una opción más útil (+1 para intentar y descartar esto) –

2

te recomiendo guardar los datos en POCOs sencilla y, o bien la serialización a XML o un archivo binario, como Brian lo hizo arriba.

Si está buscando una base de datos caliente, sugiero Sql Server Compact Edition o VistaDB. Ambos están alojados inproc dentro de su aplicación.

1

Para esta situación, el atributo [Serializable] en una clase modelada Stats y XmlSerializer son el camino a seguir, IMO.

Cuestiones relacionadas