¿Cómo crearía un sistema de contraseña para un juego de un jugador como los que se usan en juegos de consola más antiguos?
Por ejemplo, Mega Man X ahorra trabajo al darle una serie de números que puede ingresar más tarde para cargar su guardado.
¿Cómo crearía un sistema de contraseña para un juego de un jugador como los que se usan en juegos de consola más antiguos?
Por ejemplo, Mega Man X ahorra trabajo al darle una serie de números que puede ingresar más tarde para cargar su guardado.
Respuestas:
Primero, desglosa tu estado de juego (o más bien, los aspectos del estado que deseas guardar). En el caso de un juego de estilo Mega Man, puedes rastrear a cuál de los jefes de nivel final que has matado, la cantidad de power-ups similares a tanques de energía que tienes, y así sucesivamente.
Empaque todos esos datos en un campo de bits, es decir, asigne un número apropiado de bits a cada valor:
Nuestro ejemplo tiene un total de 8 bits, lo que significa que un solo carácter puede representar una contraseña. En la práctica, es probable que tu juego tenga más estado y, por lo tanto, requiera más bits totales y, por lo tanto, más personajes. Como se señaló en los comentarios aquí y en otras partes de esta pregunta, este enfoque funciona para juegos "retro" u otros juegos donde el tamaño del estado del juego capturado es razonable. Más allá de cierto punto, puede descubrir que la complejidad de las contraseñas necesarias para codificar su estado es demasiado grande.
Para disminuir la probabilidad de que la observación casual descifre la contraseña, puede transformar el diseño de bits para que introduzca bits ficticios (que no tienen efecto en el estado del juego pero que hacen que la contraseña se vea diferente cuando interpreta todos los bits como caracteres) o se ejecuta a través de una operación reversible similar a un hash para codificar los bits de manera que todos los bits de la "casilla X eliminada " no estén uno al lado del otro, haciendo que las contraseñas de estado secuencial correspondientes se vean muy diferentes o introduzcan valores de suma de verificación.
Si cavas, hay bastante información sobre los sistemas empleados para algunos de los juegos con contraseña más populares que existen:
Puede leer sobre ellos para obtener inspiración adicional.
Esos juegos solo salvaron un estado, creo. La contraseña solo hace referencia a un nivel para cargar. Solo usa un diccionario para algo como esto.
Si es un poco más complejo como tener cierta arma o refuerzo, puede cifrar el estado en un código hash corto (pero lo suficientemente largo).
Pero te recomiendo encarecidamente que no uses esto. La contraseña se difundirá rápidamente en Internet y pronto todos ganaron su juego.
Si bien las soluciones como el sistema de personaje a estado de Josh Petrie tienen beneficios (tamaño de guardado pequeño, funciona en todas las copias del juego), combinan el diseño del juego y el sistema de estado para que sean intrínsecamente al sistema de contraseña. Cualquier cambio en la contraseña o estado o diseño y todo el sistema se desmorona.
Una solución mucho más simple sería construir su sistema de guardado como de costumbre, y simplemente agregar un sistema de contraseña en la parte superior. Esto puede ser tan simple como guardar la contraseña en el guardado (posiblemente duplicando el nombre del archivo) y validarla en la carga, o tan complejo como usar una de las muchas bibliotecas de cifrado (lo cual es bastante trivial).
Parece haber cierta confusión en torno a esta respuesta.
1) El operador simplemente ha pedido una contraseña que les permita cargar un guardado ... no es necesario que la contraseña sea el guardado.
2) Muchos juegos de hoy en día tienen un requisito de almacenamiento significativo, acabamos de construir internamente un sistema rápido de guardar / cargar que producía archivos de 10 MB ... ¡para un juego de preguntas! El sistema de guardado de Josh Petrie , aunque válido, es muy limitado: tan pronto como el sistema de la tienda deje de ser trivial, las contraseñas tendrían que tener una longitud enorme para conservar todos los datos pertinentes.
Por ejemplo, ¿qué pasa si hay 30 jefes? 20 logros? ¿Estamos a la mitad de un logro? ¿A qué nivel está él? ¿Cuántos bits estamos reservando para salud, vidas, monedas, xp? ¿Qué pasa si la instantánea no es de estado entre niveles ... sino a mitad de un nivel? Las posiciones del jugador, enemigos, proyectiles, terreno destruido / alterado de repente se suman a una gran cantidad de estado que necesita ser almacenado.
En perspectiva, suponiendo un alfabeto de 30 caracteres y una contraseña de diez letras, tenemos aproximadamente 50 bits de información para almacenar. No es raro ver que un juego / motor use hasta 320 bits solo para almacenar la posición, rotación y escala de un solo objeto. Claro, puedes hacer todo tipo de trucos de optimización para hacer más con menos ... pero finalmente estás usando el tiempo dedicado a hacer que el juego sea divertido, una de las peores optimizaciones que puedes hacer.