2010-09-17 11 views
5

Estoy desarrollando una aventura de texto de estilo "Zork" en C#, y va a tener un número bastante grande de áreas diferentes con descripciones y modificadores del entorno. No quiero tener una base de datos, idealmente, a menos que realmente sea la mejor manera de hacerlo.¿Cuál es la mejor manera de almacenar datos de área para una aventura de texto?

Necesito asesoramiento sobre la mejor manera de almacenar/cargar esta información.

Incluirá:

  • área de descripción
  • modificadores ambientales (ventanas abiertas/roto, puerta cerrada)
  • Los productos presentes de manera predeterminada
+0

Algunos 'Bases de datos' son más ligeros que otros, hay una razón algo así como sqlite no te conviene? – Textmode

Respuesta

7

Serializar todos los datos para archivar. Asegurará la huella más pequeña cuando el usuario instala el juego, sin ninguna desventaja real. Una base de datos es excelente cuando tienes muchos datos, pero estás hablando de una aventura de texto en la que cargarás todo el contenido del juego en la memoria. Un archivo simple funcionará muy bien.

Nota, no estoy hablando de xml, pero la serialización binaria. Cualquier tipo de serialización de texto permitirá a los usuarios echar un vistazo a sus datos y engañar o piratear el juego. Y puede fácilmente intercambiar/ingresar el archivo de datos serializados ya sea de texto o binario. Recuerde, todo su 'texto' probablemente sea de unos pocos cientos de kilobytes como máximo.

+0

Ese es un buen plan en realidad, serialización binaria. No sé por qué no pensé en eso. – Liggi

+0

No puedo evitar sentirme un poco ofendido habiéndolo sugerido antes de esto ... ah bien. – Rushyo

+0

Disculpe Rushyo, si lo sugirió primero. Realmente no entendí lo que estabas diciendo en tu respuesta. – Liggi

1

Sé que no quería una base de datos, pero ¿has mirado SQL Server Compact Edition? Puede hacer lo que quieras.

+0

¿Hay alguna manera de evitar que alguien vea la base de datos? Probablemente una pregunta estúpida. – Liggi

+0

Esa es una pregunta diferente en conjunto ... Yo diría que al final, no. Si está en la máquina del cliente, no importa lo que hagas para codificar/encriptar/proteger, tu aplicación necesitará acceder a los datos, por lo que también puede hacerlo un usuario determinado. Sin embargo, probablemente sería más complicado abrirlo que una serialización XML. – spender

+0

Bien, sin preocupaciones. Voy a probar tu opción. – Liggi

0

Yo diría que C# le ofrece precisamente las herramientas adecuadas para esto. Simplemente encapsula tus estructuras en clases. ¡Nuestro primer proyecto OOP en la universidad fue exactamente este problema! Es el caso de estudio perfecto para OOP.

A continuación, puede utilizar los numerosos métodos de serialización de C# para almacenarlo persistentemente (cargar/guardar) como mejor le parezca.

+0

[Eliminado - como respuesta a otro comentario que se eliminó] – Rushyo

+1

pero la pregunta también fue "Dónde almacenarlo" que encapsula la estructura en _classes_ no dice nada sobre dónde se almacenarán los datos que llenarán los _objetos_ antes de que los _objects_ sean instanciados. –

+1

Bueno, supongo que es totalmente subjetivo, no es realmente una pregunta válida. Un archivo de texto plano? Realmente no importa en absoluto. No será un cuello de botella, no hay una respuesta correcta. Solo guárdelo de la manera que mejor le parezca. Personalmente tiendo a inventar un nuevo formato para cada juego que desarrollo con la semántica adecuada para el problema. Una vez que se crean una vez, la serialización y la deserialización cubren la recuperación en el futuro. – Rushyo

0

¿Cómo 'guionizar' su aventura como un archivo de texto grande? Luego haz que tu aplicación analice este archivo, construya la aventura en clases y se ejecute desde allí.

Esto significa que puede editar la aventura usando un editor de texto simple. Me imagino que cuando se pueden tomar decisiones múltiples de una sola fuente, puede ser difícil visualizar los enlaces. Sin embargo, esto también sería complicado en una base de datos sin algún front-end especializado.

ACTUALIZACIÓN:

O ¿ha considerado XML por ejemplo ...

<area id="DarkRoom1"> 
    <description>Dark Room</description> 
    <item>Bucket</item> 
    <item>Spade</item> 
</area> 

los utilizan para poblar sus clases en la memoria.

0

Puede almacenar los datos en un sistema de archivos (un archivo zip o una carpeta).

Cada opción podría almacenarse como una carpeta, mientras que todas las descripciones, modificadores y otros datos podrían almacenarse como un archivo de texto (xml?). Cuando el usuario toma una decisión, vaya a la carpeta apropiada y siga la trama.

Ejemplo:

¿Quieres:

  • abrir la puerta (puerta)
  • licencia (permiso)

Si usuario decide abrir la puerta que vaya al puerta de la carpeta y lee los datos del archivo de datos en esta carpeta.

Pros:

  • sencilla
  • no requieren base de datos
  • fácil añadir nuevas aventuras

Contras:

  • problema con la decisión de reversión (volviendo a comienzo o hasta cierto punto en la trama)
0

Personalmente, evitaría una base de datos en este caso, e iría con un formato de archivo de texto (probablemente dos archivos distintos, uno para el estado inicial (como el terreno y demás), que nunca se modifica, y uno para el estado que se modificará durante el transcurso del juego (las ventanas rotas, etc.); o divide todo en un par de datos estáticos/dinámicos por área.

Algunas razones:

  • Un archivo de texto es legible; por lo tanto, puede crear contenido sin un editor dedicado, mientras que con un enfoque de base de datos, debe ingresar datos mediante consultas o codificar un editor de niveles
  • Suponiendo un escenario de un solo jugador, la concurrencia no es un problema
  • partidas guardadas son una cuestión de copiar los archivos de estado modificado en una carpeta de partidas guardadas, o empacarlos en un solo archivo
  • guiones puede incrustar fácilmente
  • las estructuras de datos que nos ocupa son probablemente lo suficientemente simple para la integridad de datos no es un problema grave
13

Resolvería su problema abandonando C# y escribiendo su programa en Inform7. Inform7 es el lenguaje de programación más increíble que he visto y está específicamente diseñado para resolver su problema.

Lo increíble de Inform7 es que escribes tu aventura de texto en un lenguaje que se asemeja a las aventuras de texto. Por ejemplo, he aquí un fragmento de una de las aventuras código fuente de la muestra:

The iron-barred gate is a door. 
"An iron-barred gate leads [gate direction]." 
It is north of the Drawbridge and south of the Entrance Hall. 
It is closed and openable. 
Before entering the castle, try entering the gate instead. 
Before going inside in the Drawbridge, try going north instead. 
Understand "door" as the gate. 

Esto añade un objeto para el juego - el objeto es una puerta, se le llama 'la puerta de barrotes de hierro'. Se entiende que una puerta está entre dos habitaciones, en este caso, el puente levadizo y el hall de entrada. Si el jugador intenta "entrar al puente levadizo", la lógica del juego sabrá que esto es lo mismo que "ir al norte", y entonces la lógica de la puerta determinará si la puerta está cerrada o no. Y así. Hace que escribir aventuras de texto sea extremadamente fácil.

¿Hay algún motivo particular por el que desee utilizar C# en lugar de un lenguaje específico de dominio como Inform7? Si su objetivo es aprender a escribir el código C# o cómo construir un analizador sintáctico o lo que sea, entonces hágalo usted mismo. Si su objetivo es escribir una aventura de texto, entonces usaría un lenguaje diseñado para eso.

+1

Depende de por qué lo estás escribiendo. Si estás buscando aprender a construir una aventura de texto para enseñarte a ti mismo, entonces no es realmente relevante. Aún así, es una herramienta encantadora. – Rushyo

+0

Sé que esto es viejo, pero aquí está mi granito de arena. Crear una aventura de texto con una herramienta como esta parece barato y limitante. No estás realmente haciendo el juego, solo estás cambiando el juego de otra persona. Esto presenta el problema de que si quieres hacer algo fuera de lo que Inform7 permite, entonces mala suerte. No digo que nadie deba usar esta herramienta, pero aprenderá mucho más Y creará un mejor juego al mismo tiempo si usted mismo lo codifica. –

+7

@ ryansworld10: ¿Estás hablando de algo que conoces, o simplemente de dar una opinión desinformada? Si no está informado, debería echarle un vistazo a la gran cantidad de comportamientos que se pueden implementar en Inform7. Sin duda no es limitante, y * barato es algo bueno *. Si su objetivo es aprender * cómo programar un juego de aventuras en C# *, entonces, por supuesto, construya su propio sistema en C#. Si tu objetivo es * escribir un juego de aventuras *, entonces escribe un juego de aventuras usando las mejores herramientas disponibles. Si te gusta navegar, ** no construyas barcos **. Barcos de vela! –

Cuestiones relacionadas