Hola amigos. Estoy haciendo un juego pero quiero una tabla de scores m?s compleja donde se pueda guardar y mostrar no solo el score de cada jugador sino tambien el tiempo que le tomo resolver el juego, la cantidad de movimientos que hizo, etc.
S? que necesito manejar archivos para esto pero la verdad quisiera que mi juego siga siendo un solo archivo, el ejecutable. Como veo que Game maker puede contener la tabla de scores integrada pregunto si alguien sabe de algun programa que me pueda integrar un archivo externo dentro del ejecutable o si mi Game Maker 5.0 puede hacer esto.
Gracias de antemano a todos! :GM5:
Si quieres que hayan datos que sobrevivan luego de reiniciar el juego, deberas usar archivos externos.
Busca un poco y encontraras diferentes formas, una es crear tu propio sistema de score, si sabes programar puedes crear uno con fstream
Tambien puedes usar archivos INF.
una duda, ?Porque no usas GM8?
Creo que GM5 no permite usar DLL, lo cual te ayudaria para crear tu tabla de score deseada.
Ha pasado un tiempo desde que revise como funcionaban los scores del gm, y sinceramente no tengo ganas de volverlo a revisar en este momento, pero estoy bastante seguro de que los scores se guardan en el registro de windows.
De igual manera puedes guardar tus propios valores en el registro para hacer tu propia tabla de scores.
Inicia declarando las entradas en el registro:
[gml]for (i=0;i<10;i+=1) if !registry_exists('slot'+string(i)){
registry_write_string('slot'+string(i),'-vacio-');
registry_write_real('slot'+string(i)+'P',0);
registry_write_real('slot'+string(i)+'T',0);
}[/gml]
Luego necesitaras declarar una lista donde guardar los scores mientras se ejecuta el juego:
[gml]LPuntajes=ds_list_create();
for (i=0;i<10;i+=1) ds_list_add(LPuntajes,registry_read_real('slot'+string(i)+'P'));
ds_list_sort(LPuntajes,0);[/gml]
Ahora la parte importante, para agregar nuevos scores primero los agregas a la lista y la ordenas, si el score quedo en los primeros 10 lugares entonces puede ser agregado al registro:
[gml]/*
argument0 = Puntaje
argument1 = Tiempo
*/
ds_list_add(LPuntajes,argument0-.05);
ds_list_sort(LPuntajes,0);
Posicion=ds_list_find_index(LPuntajes,argument0-.05);
if Posicion<10{
ds_list_replace(LPuntajes,Posicion,argument0);
//Nombre = Metodo para agregar el nombre del jugador;
for (i=9;i>=Posicion;i-=1){
TempN=registry_read_string('slot'+string(i-1));
TempP=registry_read_real('slot'+string(i-1)+'P');
TempT=registry_read_real('slot'+string(i-1)+'T');
registry_write_string('slot'+string(i),TempN);
registry_write_real('slot'+string(i)+'P',TempP);
registry_write_real('slot'+string(i)+'T',TempT);
}
registry_write_string('slot'+string(Posicion),Nombre);
registry_write_real('slot'+string(Posicion)+'P',argument0);
registry_write_real('slot'+string(Posicion)+'T',argument1);
}[/gml]
En este c?digo se le resta .05 al score real para que en caso de scores iguales siempre quede primero el primero en adquirirlo.
No estar?a de m?s agregar una forma de borrar los scores de la tabla:
[gml]for (i=0;i<10;i+=1) {
registry_write_string('slot'+string(i),'-vacio-');
registry_write_real('slot'+string(i)+'P',0);
registry_write_real('slot'+string(i)+'T',0);
}
ds_list_clear(LPuntajes);[/gml]
Te dejo un ejemplo usando los c?digos que he puesto, al presionar control se agrega un score al azar a la tabla, al presionar espacio se borran todos los scores.
Killer: Whow!
Tu c?digo lo voy a guardar. No sab?a que los scores se guardan en el registro de Windows. Entonces no va a funcionar mi idea. La idea era que luego de que alguien juegue y deje sus records, pudiera enviar por correo el ejecutable y que otra persona al jugar pudiera ver los scores del otro jugador pero parece que esto no es posible utilizando el sistema original de scores de GM.
No sab?a que los scores se guardan en el registro de Windows. Hmmm, bueno tambi?n resulta interesante poder guardarlos en el registro de Windows para as? tener siempre solo el ejecutable.
klys: Creo poder crear mi propio sistema de archivos solo con Game Maker, de hecho ese es mi plan B, mostrar mi propia tabla de scores en otro room. No conozco fstream pero me interesa conocerlo, voy a investigar.
?Por qu? no uso GM8?
En caso de que la computadora del jugador no tenga muchos recursos, si queremos crear juegos que funcionen en el mayor n?mero de sistemas posible o si simplemente no vamos a usar la potencia gr?fica de GM6 o GM7 u 8 la mejor opci?n creo que sigue siendo GM5. No consume muchos recursos.
GM Sin registrar: En este caso la mejor es GM5.0, ya que en esta versi?n tenemos m?s funciones disponibles (y m?s importantes) que en cualquier versi?n posterior.
Bueno, esto lo le? aqu? y me lo cre?:
http://www.comunidadgm.org/index.php?topic=4089.0 (http://www.comunidadgm.org/index.php?topic=4089.0)
Honestamente les digo que Agradecer?a comentarios acerca de esto tambien.
Saludos a todos y muchas gracias.
En ese caso, es posible guardar datos editando el final del ejecutable, pero ya que no se puede hacer mientras que este corriendo tendr?as que depender de un m?todo que hiciera los cambios cuando se cierra el juego.
Por ejemplo, puedes crear un nuevo programa con game maker cuyo ?nico prop?sito sea modificar los datos del juego original, agregarlo a dicho juego como un data file, extraerlo en la carpeta temporal del juego y correrlo cuando se cierra el juego.
T?cnicamente estar?s usando varios archivos, pero como el otro programa esta dentro del original solo se necesita el ejecutable del juego para que todo funcione.
Sinceramente es un poco rebuscado para mi gusto, pero es una de las opciones que tienes.
?Guardar los scores al final del ejecutable? ?Eso no lo dejar?a inutilizable? :/
El ejecutable simplemente no se supone que lo modifiques, y menos para cosas tan triviales como guardar los scores.
Yo dir?a que la mejor opci?n si quer?s que los scores se puedan compartir es guardarlos en un archivo externo. Si ten?s un servidor, podr?as guardarlos en una base de datos online y arreglar?as todos los problemas.
Sobre GM5 vs GM8, estoy totalmente de acuerdo con lo que le?ste. Si el GM5 es lo suficientemente poderoso para t? (que por cierto, no es para nada flojo, para nada), no veo por qu? usar GM6 o superiores.
De hecho no arruina el ejecutable, no lo habr?a mencionado si no supiera si sirve o no, puedes probarlo con cualquier juego de Game Maker. En tanto no hagas ninguna tonter?a no arruinar?s el ejecutable, por eso especifique que debe ser al final de ?l.
Y si, como tambi?n mencione, me parece mucho problema solo por unos scores, pero si WillyDeLeon quiere hacerlo al menos ahora sabe que hay una forma de lograrlo, decidir si vale la pena o no ya es cosa suya.
Obviamente soy nuevo en Game Maker, la verdad mi fuerte siempre fu? Turbo Pascal (para DOS) y siempre me pareci? muy complicado aprender un lenguaje en ambiente Windows como para poder hacer juegos. Encontr? en Game maker el GML y me gusta mucho.
La opci?n de Killer, de modificar el ejecutable con otro programa agregado como un data file que se exporte a un directorio temporal, me gusta. No me importa que tan poco ?tico o falto de buen estilo sea esto, suena astuto y yo me agarro de lo que sea media vez funcione jeje. Solo que de momento la veo dif?cil ya que soy nuevo. Pero de hecho la voy a tomar muy en cuenta.
La de Wadk:
Tambi?n es una excelente soluci?n. Y s? tengo un hosting de pago como para crear ah? una base de datos online, pero le veo dos peque?os inconvenientes:
1. Tendr?a que mantener ese hosting y dominio por siempre ya que una vez distribuido el juego no podr?a modificarlo (aunque en realidad ese juego no es la gran cosa).
2. El juego nesesitar?a siempre de una conexi?n al Internet, adem?s los antivirus estar?an avisando al usuario que la aplicaci?n intenta conectarse al Internet, que bloque? la conexi?n y prenguntando si la desbloquea jaja (Aunque esto solo ocurra la primera vez que se ejecuta).
Si no logro realizar la opci?n de Killer, creo que lo m?s sensato va a ser utilizar un archivo externo, solo espero que no sea de texto para que nadie pueda alterar los records de los jugadores jajajaja.
Una vez m?s, se los agradezco mucho!
da lo mismo
si es extension .config_tengo_hambre
o .txt en total gm lo lee igual ;)
Es cierto, eso no lo puedo evitar.
Tendr? que suponer que la mayor?a de gente que lo juegue no sepa nada de programaci?n ;D
Honestamente solo espero que el notepad no lo pueda abrir jajajaja.
Hey! Me acabas de dar una idea!
Que tal si invento una manera de codificar la informacion del archivo? jeje
Aunque lo abran no sabr?n c?mo alterar los records solo destruir el archivo.
Entonces mejor que lo vuelvan a descargar de nuevo jajajajaja con el archivo en blanco.
Pues tal vez esto de sirva para lo que quieres hacer XDhttp://www.gmlscripts.com/script/encryption_functions (http://www.gmlscripts.com/script/encryption_functions)
Podr?as guardarlos como bytes (en un formato no legible a humuanos), y agregar una suma de verificaci?n. Y despu?s de eso podr?as encriptarlo.
As? si alguien quiere modificarlo necesitar?a saber:
El algoritmo de encripci?n que usaste.
El password (seed) que usaste para encriptarlo.
D?nde se encuentra la suma de verificaci?n.
Qu? tipo de suma de verificaci?n es.
Qu? parte del archivo abarca la suma de verificaci?n.
Cita de: Killer en Marzo 06, 2011, 04:43:35 AM
De hecho no arruina el ejecutable, no lo habr?a mencionado si no supiera si sirve o no, puedes probarlo con cualquier juego de Game Maker. En tanto no hagas ninguna tonter?a no arruinar?s el ejecutable, por eso especifique que debe ser al final de ?l.
Y si, como tambi?n mencione, me parece mucho problema solo por unos scores, pero si WillyDeLeon quiere hacerlo al menos ahora sabe que hay una forma de lograrlo, decidir si vale la pena o no ya es cosa suya.
Ya veo.
WillyDeLeon: realmente, intentar eso trae un sinfin de problemas.
Para empezar, que est?n escritos en el ejecutable no significa que no se puedan modificar, as? que habr?a que aplicar las mismas medidas de seguridad.
Adem?s, ?c?mo sab?s en qu? posici?n del archivo empezar a escribir los scores? Seguro, al final, pero ?y si ya hay scores escritos previamente? ?c?mo sab?s d?nde empiezan? Lo mismo al leer.
Es posible que los ejecutables hechos en GM terminen de una forma espec?fica (as? como muchos archivos tienen una cabecera espec?fica). Pero si comienzas a buscar desde el principio del archivo ese final espec?fico, es posible que lo encuentres antes, y al escribir los scores ah?, te comas la mitad del ejecutable. Si decid?s buscarlo partiendo del final, tend?as que asegurarte de que tu algoritmo para transformar los scores a un formato "guardable" NUNCA pueda devolver ese final del archivo dentro de los datos, o podr?as comerte parte de los scores.
La forma m?s f?cil que se me ocurre es definir una constante en el ejecutable que se encarga de guardar los scores, que sea igual al n?mero exacto de bytes del ejecutable del juego sin scores. As? s?lo tendr?as que moverte a esa posici?n y comenzar a leer/escribir desde ah?. Pero eso implica que, cada vez que quieras hacer una prueba, tengas que guardar el ejecutable, mirar el tama?o, modificar la constante en el segundo editable, compilarlo y... bueno, si el segundo ejecutable est? dentro del primero, luego tend?as que volver a agregarlo y posteriormente volver a compilar el juego y verificar que el tama?o no haya cambiado. Si no cambi? ni un byte, ya estar? listo para probarlo, de lo contrario ten?s que repetir el proceso una y otra vez.
En fin, una locura.
Perm?teme sugerirte una forma m?s f?cil, los c?digos para leer y modificar los scores cr?alos usando las funciones para INIs del GM, siempre con la secci?n [Puntajes], luego, una vez creado el ejecutable, agrega al final de este un par de saltos de l?nea y luego pon esto:
[Puntajes]
Y listo, siempre modificar? justo por debajo de [Puntajes], y siempre las mismas l?neas.
Por otro lado, si el motivo que tenias para no guardar los puntajes en un externo era que te lo pod?an modificar, entonces realmente te recomiendo que uses un externo encriptado, asunto solucionado sin tanta complicaci?n.
Hola amigos.
En realidad creo que lo ?nico que busco es no usar la tabla de scores de mi GM5 por la siguiente raz?n:
Mi juego est? en espa?ol y en la tabla hay frases como: "Top ten players", "<nobody>", "Pres ESC to exit". Y la funci?n highscore_set_strings no est? disponible en GM5.
Acabo de resolver esto gracias a una sugerencia que me hizo juan pablo en mi post: ?C?mo cambiar la palabra "nobody" en el archivo de scores? http://www.comunidadgm.org/index.php?topic=14059.0 (http://www.comunidadgm.org/index.php?topic=14059.0). Hice mi propia tabla de scores con un room utilizando los datos de la tabla que GM guarda, m?s personalizada. Ahora el jugador ver? el tiempo que us? en el juego, los movimientos que realiz?, el nivel en el que jug?, pero solo lo ver? al ganar, lo ?nico que se guardar? ser? su sombre y punteo jeje.
Aunque tengo otra idea (Me voy a volver loco): Otra cosa que s? me interesa es que mi juego sea un solo archivo a la hora de descargarlo, y se me ocurre que una vez ejecutado el juego se cree un archivo d?nde guardar scores y m?s datos pero no se si sea prudente o conveniente crear por ejemplo la carpeta C:\Windows\nombre_juego\scores.dat sin que el usuario lo sepa. Pienso que no hay por qu? modificar el registro de Windows, es m?s f?cil esconder un archivo y ah? guardar sin que el usuario se entere.
?Que opinan de esto? ?Poco sensato?
Perd?n por tanta pregunta es que en realidad soy nuevo en esto y creo que este va a ser mi primer juego en ambiente Windows completo, les cuento que ya casi est? listo y ser? Freeware. Es un juego simple, se trata de Las Torres de Hanoi. Tiene m?sica y sale la Pantera Rosa bailando jeje.
http://sites.google.com/site/agazapate/juegos/superhanoi1.png (http://sites.google.com/site/agazapate/juegos/superhanoi1.png)
Para los que no sepan de qu? se trata:
http://www.juganding.com/juegos/jugar-gratis-las-torres-de-hanoi-2303.html (http://www.juganding.com/juegos/jugar-gratis-las-torres-de-hanoi-2303.html)
En ese caso, debes tener algunas cosas en cuenta, en primer lugar el GM no puede crear carpetas por si mismo, as? que tendr?an que ser creadas manualmente antes de usar el juego, por lo que no serian desconocidas para el jugador. La opci?n alternativa seria esconderlo en una carpeta ya existente, pero tendr?as que asegurarte que esa carpeta va a existir en absolutamente cualquier computadora donde se use el juego, y por supuesto, que no vas a terminar sobrescribiendo un archivo importante del sistema, aunque con un nombre como scores.dat es poco probable.
En segundo lugar, si no encriptas el archivo sigue existiendo la posibilidad de que sea encontrado y modificado, as? que termina dando igual donde este. Y cr?eme, si el archivo no esta encriptado para encontrarlo solo basta conocer uno de los nombres en la lista. Por no mencionar que con un nombre como scores.dat llamara un poco la atenci?n.
Claro, al final es decisi?n tuya.
Hola Killer.
No s? si las otras versiones de GM no pueden crear directorios, pero mi GM5 si lo hace.
Hay una funci?n para eso. Te presento a do?a "directory_create(dname)" funci?n de GM5 (No s? si las otras versiones la tienen).
Acabo de hacer un programita para probarlo y funcion? jeje
Desc?rgalo:
http://sites.google.com/site/agazapate/juegos/crear.zip (http://sites.google.com/site/agazapate/juegos/crear.zip)
(http://sites.google.com/site/agazapate/juegos/screenshot.png)
Mira nada m?s, as? que llevo a?os ignorando la existencia de esa funci?n :-[
En todo caso, insisto que ocultar el archivo no te servir? de mucho si este no esta apropiadamente protegido.
S?, al final creo que voy a tener que encryptar como me sugeriste.
Hey amigos Makeros!
Ya tengo logo para mis juegos, revisen esta Web, tal vez ya la conozcan, no s?, pero se pueden hacer maravillas, hay cientos de tipos de letras y estilos
http://cooltext.com/ (http://cooltext.com/)