2011-12-06 13 views
9

No sé si usar XML, YAML o JSON para un C++ 2D RPG.XML vs YAML frente a JSON para un RPG 2D

Aquí están mis pensamientos:

  • necesito algo que es simple para salvar no sólo datos de los jugadores, pero los datos del entorno, como objeto (x, y) las coordenadas; tiempos de carga; fechas; configuraciones de gráficos, etc.

  • Necesito algo flexible, fácil de usar, y definitivamente ligero, pero poderoso para manejar lo anterior.

¿Cuál es la mejor opción? Tengo experiencia con JSON en JavaScript, pero no en C++. ¿Hay alguna buena referencia para analizar JSON en C++ si esta es la ruta a seguir?

Editar

Honestamente, si un archivo de texto parece ser la solución más simple y más eficaz para algo como esto (especialmente si puedo escribirlo en binario), entonces yo soy todo oídos.

Editar 2

no dude en incluir otras sugerencias también.

+0

¿Son estas las únicas opciones?¿Y los formatos de serialización binarios (como Google Protocol Buffers) están completamente fuera de cuestión? –

+0

No conozco estos formatos; sin embargo, me gustaría incluirlos como una posibilidad. – zeboidlund

Respuesta

19

Usaría lo más simple que satisfaga sus requisitos.

Si no necesita almacenamiento jerárquico, entonces los archivos tabulares planos son mucho más fáciles de manejar que cualquier otra cosa. Todo lo que tiene que hacer es leer las líneas del disco y dividir en la pestaña.

Si está buscando más almacenamiento tipo par clave/valor (en lugar de listas de cosas), entonces INI files puede ser razonable. Este formato tiene mucha flexibilidad, aunque razonar al respecto puede ser menos accesible cuando lo extorsionas.

Si necesita una jerarquía, es posible que JSON sea más simple. Hay bibliotecas JSON en una amplia gama de idiomas, y parece que ya estás familiarizado.

https://stackoverflow.com/questions/245973/whats-the-best-c-json-parser

sqlite puede ser otra opción. Hay dragones en SQL, pero con un buen contenedor de C++ alrededor de sqlite, puede ser manejable. El beneficio principal sería ACID, en mi opinión.

La especificación YAML parece algo larga, por lo que puedo adivinar que tiene más fregaderos de cocina. Solo examinando los documentos de libyaml, la API se parece a las interfaces de SAX que he usado en el pasado. No lo conozco a posteriori, pero me mostraría reticente a empezar a usarlo sin una buena razón.

XML es una mierda para tratar, no lo hagas.

Independientemente de cuál elija, escriba el código más bajo que pueda manejarlo. Realmente desea escribir las clases que su motor usará primero. Entonces preocúpate de serializarlos. Si permites que tu serialización influya en el diseño de tu clase, probablemente te arrepentirás. :)

+2

+1 para el último párrafo – MerickOWA

+3

+1 para el primer Y último párrafo. – zeboidlund