Cómo usar JavaScript para escribir un ‘archivo guardado’

Gracias por el A2A!

Bueno, hay tres formas de manejar esto que son evidentes de inmediato:

Guardar código

En los viejos tiempos, solía ser que no había un guardado interno del estado del juego; en cambio, a menudo se podía pedir al juego un código que representara el estado actual del juego y escribirlo. Más tarde, podría regresar, ingresar el código y reanudar una copia de su juego donde lo dejó.

Ah, pantalla de código molesto, nos encontramos de nuevo …

La ventaja de este sistema es que es completamente sencillo: cuando el jugador “guarda” su juego, usa una función que toma el estado actual del juego y lo codifica (por ejemplo, en una representación basada en cadenas). El jugador luego volvería, ingresaría ese código y sería descodificado nuevamente en el estado del juego. Además, los jugadores podrían incluso compartir estos códigos para que otros experimenten un punto en lo que de otro modo es “su juego”.

Un ejemplo muy simple sería codificarlo de tal manera que produjese algo como 'bx123y456l24i6010203040506' donde “b” representa su configuración (suponiendo que use un esquema de configuración “a, b o c”), “x123y456” representa su coordenada posición en el mapa mundial (literalmente x: 123, y: 456), “l24” representa su nivel (24) e “i6” representa el número de elementos que tienen (6) seguido de sus respectivos ID de elemento en dos dígitos formulario (01-06).

Si bien esto es muy sencillo, también es muy transparente para el usuario y fomenta las trampas al proporcionar un código que le permite diluir la experiencia de juego. Por ejemplo, suponiendo que lo anterior fuera su código, simplemente podría volver y cambiar “l24” a “l99”, colocándome en el nivel 99 y evitando todos los niveles intermedios. La ofuscación adicional de los datos podría ayudar, pero a menudo hay alguien que hará un esfuerzo adicional para crear estados de juego fabricados dado el tiempo.

Además, este sistema ahora es más o menos engorroso: los jugadores no esperan tener que mantener su información escrita y esperan que tú hagas el trabajo por ellos. Afortunadamente, esto no es demasiado difícil …

Ahorro local

Muy similar al uso de un “Código de guardado”, un Guardado local aún produce algún tipo de representación del estado del juego, pero en lugar de proporcionarlo al usuario, lo almacenamos localmente en el navegador. Al no necesitar más la interacción de un usuario, hemos brindado una experiencia más agradable y les hemos hecho un poco más difícil intentar modificar el juego.

Cuando un usuario va a guardar su juego, en lugar de mostrar el estado del juego, lo almacenamos en el navegador; podemos hacerlo utilizando una cookie o almacenamiento local. De todos modos, solo establece un par clave-valor simple que representa el estado del juego y cuando un usuario va a cargar su juego, solo lee de este mecanismo de almacenamiento y está listo para comenzar.

Si bien esto parece mucho mejor, todavía no es muy resistente a la manipulación: cualquier persona con una comprensión aceptable de cómo operan los navegadores podrá ver fácilmente su almacenamiento y modificar su estado de juego en consecuencia. Una vez más, queda con suficiente exposición para que alguien pueda venir y crear su propio estado de juego al acceder y manipular los datos que ha dejado en su máquina. Si tales cosas importan, necesitarás … intensificar tu juego (juego de palabras).

Más allá del cliente

En este punto vamos a necesitar más que solo el navegador; vamos a querer que un servidor actúe como un medio de controlar nuestros datos para evitar que otros alteren su propia información guardada. Para hacer esto, ahora vamos a tener que considerar cosas como la autenticación (nombres de usuario y contraseñas, por ejemplo), así como el almacenamiento y la transmisión de sus datos (tal vez usando / saveData y / loadData RESTful API endpoints).

Además, ahora tenemos que considerar cómo vamos a almacenar esos datos. Si bien podemos hacerlo directamente en el servidor, eso significaría que reiniciar su servidor borró todos los datos guardados. Si quisiéramos amortiguar eso, vamos a querer utilizar bases de datos como una forma más persistente de almacenamiento de datos.

Dicho esto, tiene muchas opciones y consideraciones que hacer una vez que haya decidido trabajar a este nivel. Si su principal prioridad es producir una mecánica de ahorro y está perfectamente bien con que otros arruinen su propia experiencia de juego al alterar los datos guardados, esto podría ser una capa de complejidad completamente innecesaria para usted.


¿Te gusta mi respuesta? ¡Sigue por más! ¿Tiene alguna pregunta? ¡Pregunta en los comentarios!

Si su juego está destinado a jugarse sin conexión a Internet, pero aún desea guardar el estado, puede hacerlo con esta biblioteca aquí. He usado esta biblioteca antes que yo y funciona muy bien. Excepto por el hecho de que Internet Explorer es la basura de un navegador, a veces puede causarle problemas.

Otra alternativa es el objeto de almacenamiento local. Dependiendo de qué tan grandes sean sus datos (hay un límite de tamaño inmutable), esto puede ser mejor. Todos los navegadores modernos admiten esto, pero otro inconveniente es que es un sistema de pares de valores clave y es un poco difícil de manejar a veces.

Una tercera alternativa es el pequeño almacenamiento en línea como MongoDB, Redis, ElasticSearch, por ejemplo, utilizando el servicio ObjectRocket.

HTH, y mis mejores deseos para usted y su proyecto.

Simplemente use el almacenamiento local Window.localStorage es súper rápido y puede almacenar datos de hasta 5 mb. Simplemente serialice sus objetos JSON en una cadena y conjunto de llamadas. Es sincrónico y es muy fácil trabajar con él.