Guardar datos juego[Desarrollo]

HOla.

Hace poco que escribí aquí porque estoy haciendo un juego.

Ahora me encuentro en una fase bastante avanzada del juego y lo que quiero es poder guardar las puntuaciones de cada nivel en un fichero para luego poder cargarlas.

Para ello quiero tener la opción de crear un fichero, en caso de que no existiese, con las puntuaciones por defecto y, a partir de ahí, ir cargando las puntuaciones cada vez que inicie el juego.

He estado viendo la EFS y lo he integrado, pero no me funciona bien. No soy capaz de crear un fichero nuevo, solo puedo leer un fichero que exista y esté en la carpeta efsroot.

Hay alguna manera de poder crear un fichero desde el juego? Quiero algo parecido a lo que hacen los juegos de verdad de la DS.

O si hay alguna alternativa, porque mi juego sin poder guardar las partidas pierde muchísimo.

Gracias chicos.
hombre pues si puedes abrir ficheros ya existentes crea un archivo de texto o lo que sea vacio, lo guarda en esa carpeta y luego ya lo abres y metes los datos mediante fprintf o como lo hagas. Salu2
Sino acabas de ver como funciona el EFS, siempre puedes utilizar el sistema más antiguo, el FAT. En lo último que estoy haciendo lo utilizo para guardar un par de valores. Te dejo las funciones principales:

Includes especiales:
#include <iostream>
#include <fat.h>
#include <stdio.h>


Inicializar el sistema:
void SaveData::init() {
   
   if(fatInitDefault())
      guardar = true; 
   else
      guardar = false;
   
}   


Existe Archivo:
bool SaveData::existeixSaveData() {

    FILE* file = fopen(nomFitxer, "rb"); //nomFitxer => String
   
    if (file == NULL) {
       return false;         
    } else {
       fclose(file);   
       return true;         
    }
   
}   


Leer información:
void SaveData::readInformation() {

   if (guardar) { //Si podemos guardar

      if (existeixSaveData()) {

          FILE* file = fopen(nomFitxer, "r+");   
      
          char *lectura = new char[20];   
      
          for (int i = 0; i<NUMMAXWORLDS; i++) {
      
              fgets(lectura,20,file);
              save[i] = (Save)atoi(lectura);   
          }
      
               fclose(file);   
               delete lectura;
         
      } else {
         saveInformation(); //La información inicializada es la buena   
      }                        
      
   }        
}


Guardar Información:
void SaveData::saveInformation() {

   FILE* file = fopen(nomFitxer, "w+");   

   for (int i = 0; i < NUMMAXWORLDS; i++) {
          fprintf(file, "%d \n", save[i]);
   }   
   
   fclose(file);   
   
}


Hay alguna chapucilla en forma de "casts" y guardo los valores uno por uno (no guardando la estructura entera). Mira a ver si te sirve.
frodonag escribió:Hay alguna chapucilla en forma de "casts" y guardo los valores uno por uno (no guardando la estructura entera). Mira a ver si te sirve.


Pues que quieres que te diga, yo en todos las cosillas que he hecho donde he necesitado guardar he acabado guardando la informacion dato a dato, ya que de almacenando la estructura entera me solia dar problemas (que no se si seguiran dando). De todas formas creo que no hay mucha diferencia entre lo que tu has puesto con fat.h que con el metodo efs, no?
La verdad es que nunca me he mirado el EFS XD.
Voy a probar a hacerlo como dices, a ver si funciona, luego os cuento

EDITO:

Nada esto no funciona, vamos a ver, estoy haciendo un código de prueba aparte para que funcione y si eso ya luego lo meto en el juego. Este es el código:
PA_Init();    // Initializes PA_Lib
   PA_InitVBL(); // Initializes a standard VBL
   
   PA_InitText(1, 0);  // Initialise the text system on the top screen
   
   PA_WaitForVBL();  PA_WaitForVBL();  PA_WaitForVBL();  // wait a few VBLs
   
   fatInitDefault(); //Initialise fat library
   
   FILE * file;
   char lectura[100];
   file = fopen("mario.txt", "r+");
   if (file==NULL){
      file=fopen("mario.txt","w+");
      if (file==NULL)
         PA_OutputText(1,0,2,"ERROR AL CREAR");
      else{
         fprintf(file, "DATOS MARIO");
      }
   }else{
      fgets(lectura,20,file);
      PA_OutputText(1,0,3,"LEIDO: %s\n",lectura);
   }
   
   fclose(file);


Al ejecutar el juego siempre me dice ERROR AL CREAR, por lo tanto no lo hace bien.

Si os preguntais porqué lo he hecho así, es porque quiero ejecutar una vez el programa, que se cree el fichero y otra vez que ejecute el programa pueda abrir el documento creado anteriormente, pero siempre me da error al hacer el fopen con w...

Gracias por vuestra ayuda
Te falta algun parentesis no? en el segundo if(file==NULL), supongo que ese code deberia de ir, no he tocado mucho de fat.
No me falta ningún paréntesis... No se, de todas maneras, el codigo compila y todo, pero cuando comprueba si es el puntero es nulo, siempre lo es...
7 respuestas