Estoy tratando de encontrar una manera de escribir un sistema de guardar / cargar para mi juego en C ++. A partir de ahora, lo estoy haciendo todo usando banderas binarias. ¿Alguien tiene idea de cómo hacerlo de otra manera? No me importa usar binarios, pero quiero saber mis opciones. También quiero algo en lo que sea fácil verificar el estado de un solo evento completo o incompleto para decidir ciertas cosas (gran parte del sistema de elementos en este juego depende de lo que el jugador haya hecho o no) a lo largo del juego).
17
Respuestas:
La serialización sería el camino a seguir, y en cuanto a la verificación del estado, podría tener lógica en el método de deserialización para hacerlo.
fuente
He estudiado un poco el código fuente de DOOM. Te diré cómo se hace allí.
D_DoomMain contiene todas las funciones de abrir / guardar / cargar, así como muchas otras cosas. Como dice al principio del archivo,
Básicamente, todo el archivo está lleno de
M_CheckParm
s de principio a fin. En eso consiste el D_DoomLoop. Es un bucle masivo (algo así como 1000-2000 líneas de largo).Dado que su pregunta es '¿Cómo puedo escribir?' Solo voy a pegar algunos bits de código que se refieren a los juegos guardados, de D_DoomMain:
Aquí están las declaraciones donde se usan esas cosas, al final del ciclo.
Aquí está la función que accede a las cadenas, que encontrará dispersas en todo el código:
También tienes un archivo llamado p_savegame.c con cosas que guardarán todos los datos asociados al usuario (qué armas tienes, dónde estás en qué nivel, etc.).
Y finalmente tienes el archivo que carga los datos del juego guardado en un escenario de juego, posiblemente el más complejo de todos, porque también carga todo lo demás. Ese se llama p_setup.c, y se encuentra en el mismo directorio.
Me funcionó bien para
cat
todos estos en un búfer de texto ypipe
ese textosendmail
a mi propia dirección de correo electrónico. De esa manera puedo leerlo en los momentos extraños del día, y usar 'buscar' cuando quiero buscar cosas como 'cómo DOOM carga un juego'. El código está bien comentado.fuente
Puede serializar la clase o los datos en un archivo plano y luego volver a leerlos cuando cargue.
fuente
I +1: edité la sugerencia de usar XML / JSON para estructurar los juegos guardados. De esta manera, está muy preparado para hacer que los guardados se basen en la "nube". O al menos, tendrá una estructura que podría usar para futuros proyectos que podrían involucrar a la web. Siempre que los archivos no se almacenen de una manera que sea demasiado fácil de leer, deberían brindarle muchos beneficios. Me gusta las métricas! Hurra
fuente