Hola, estoy terminando un juego para Android, pero tengo un problema no se como hacer para que se guarde el avance en cada room, así cuando vuelven a iniciar el juego lo pueden continuar desde su ultima partida.

Se que tengo que usar los archivos ini, pero la poca información que encontré no dice como guardar las partidas.

Si me pueden ayudar con algún ejemplo se los agradezco mucho.

Tengo Gamemaker master collection  :GMS:

#1 Abril 03, 2013, 12:28:12 PM Ultima modificación: Abril 03, 2013, 01:10:34 PM por Gutic
Buenas koloreitor.

Tienes varias opciones, no tienes por qué usar archivos .ini, yo personalmente no los uso.

Otras opciones son:

  • · Archivos binarios. Son muy estrictos, si te atreves con ellos pueden ser buena opción.
  • · Archivos de texto. Los más manejables hablando de ficheros.

Yo te voy a explicar un poco cómo hacerlo en archivos de texto usando el formato CSV.

Puedes crear un archivo para cada tipo de información que quieras guardar o hacerlo todo en el mismo con delimitadores que indiquen que no hay más datos para esa información. Si no has tocado mucho los archivos te recomiendo lo primero para empezar.


Lo primero es guardar en un string algunos datos.  Para explicártelo mejor voy a inventarme un ejemplo:




Supongamos que tenemos un juego en el que necesitamos guardar los puntos obtenidos y la posición x e y del personaje.

Haremos lo siguiente:
var i,str;
file=file_text_open_write("miarchivo.sav");
i=0;
while (i<global.n_niveles)
   {
          str=string(global.puntos[i])+";"+string(global.X[i])+";"+string(global.Y[i]);
          file_text_write_string(file,str);
          file_text_writeln(file); //Escribe un salto de línea
          i++;
   }
file_text_close(file)


Si no conocías el formato CSV ya has debido de darte cuenta de que simplemente es una "tabla" de datos en la que las columnas están separadas por ";" y las filas por saltos de linea.

De esta forma a la hora de cargar haremos justo el proceso contrario (más lioso).


var i,str;
file=file_text_open_read("miarchivo.sav");
i=0;
while (i<global.n_niveles)
   {
        str=file_text_read_string(file);
        str=file_text_readln(file); //Pasa a la siguiente

        //Ahora debemos tratar el texto
        pos=string_pos(';',str);
        global.puntos[i]=real(string_copy(str,0,pos));
        str=string_copy(carga,pos+1,string_length(str)-pos);
        pos=string_pos(';',str);
        global.X[i]=real(string_copy(str,0,pos));
        str=string_copy(str,pos+1,string_length(str)-pos);
        global.Y[i]=real(str);

        i++;
   }
file_text_close(file)


En la sección donde tratamos el texto lo que hacemos es coger los datos entre los ; de cada fila.

Este ejemplo lee tres datos por cada fila, los que hemos introducido, en otro caso deberías modificarlo que yo creo que con el ejemplo que te he puesto es fácil de hacer.

Si quieres guardar más información diferente a parte de esta puedes crear más archivos tal como te dije al principio. Por ejemplo este para niveles, y crear otro para objetos encontrados.

Este formato te permite además cifrar los datos, pero eso ya es otra historia xD (El mejor para eso es el binario).

¡Espero haberte ayudado!

Un saludo y mucha suerte.

Solución añadida a mi blog.
-

Muchas gracias Gutic muy buena tu información, pero sigo si entender como funciona o algo hago mal.

yo hice lo siguiente, en mis niveles tengo una gema que al contacto con el personaje del jugador pasa al siguiente nivel, a ese objeto le pegue tu código para guardar el nivel. luego hice in menú donde puse un botón comenzar y otro cargar al cual le pegue el tu código para guardar la partida. Pero no logro hacer que funcione me da un error.

Lo que no se es si el archivo .sav se crea solo o lo tengo que crear yo. en que lugar lo crea en android.

No quiero abusar de tu tiempo pero si podes darme una explicación mas detallada como para un novato en código como yo me seria súper útil.

Igualmente te vuelvo a agradecer el pequeño tutorial que hiciste.

saludos.

No te preocupes, para eso estamos  :P

¿Qué error te da?

Un saludo.

ya lo solucione ahora puedo guardar las partidas en android y funciona lo mas bien.

También encontré este post de yoyo que tiene un ejemplo http://gmc.yoyogames.com/index.php?showtopic=456421

También probé usando ese código y funciona bien, espero que esto le sirva de ayuda a muchos que tenían mi mismo problema.

Saludos y gracias a todos.