¿Cómo implemento poder guardar y cargar desde guardar en C?

programación


Tengo este clon de Monopoly al que necesito agregar la capacidad de guardar y cargar desde un guardado, pero no tengo idea de por dónde empezar, ¡así que se agradece cualquier ayuda!

GitHub – Mitul-Joby/Monopoly: Una implementación del juego de mesa Monopoly en C, en tu terminal.[^]

Lo que he probado:

Registrar cada tirada de dados pero los nombres de los jugadores se corrompen

Solución 1

Depende mucho de lo que haga el código existente. En términos generales, simplemente escribiría datos en un archivo para guardarlos y leerlos del archivo para volver a cargarlos. Pero la implementación exacta dependerá en gran medida de la estructura del código existente.

Ver E/S de flujo | Microsoft aprende[^].

Solución 2

No podemos darle una respuesta específica a esto: no tenemos idea de lo que probó, ni estamos familiarizados con el software, y yo, por mi parte, no voy a recorrer todo un proyecto de github para descubrir cómo funciona antes. tratando de agregar funciones.

Si desea agregar funciones a un proyecto existente, primero debe comprender prácticamente todo el proyecto: simplemente “registrar tiradas de dados” no ayudará porque eso ni siquiera cubre toda la información que necesita para restaurar el proyecto. juego hasta ahora: no es obligatorio comprar una propiedad en la que aterrizas, las cartas de Chance y Community Chest están en orden aleatorio, y así sucesivamente.

Así que ve al proyecto github y examínalo detenidamente: cuando sepas cómo funciona, podrás empezar a pensar en mods, ¡pero no antes!

Solución 3

Tienes suerte, el código existente ya carga las ‘ubicaciones’ de un archivo (‘ubicaciones.csv‘ en el ‘datos‘carpeta). Echa un vistazo a ReadLocations función y utilícela como referencia para implementar su (digamos) ReadPlayers uno.
Luego, con la experiencia adquirida, podrás redactar fácilmente el complemento WritePlayers código también.

Solución 4

Al probar el programa en Windows, resulta especialmente molesto que el programa se cierre si la ventana de comandos no tiene el tamaño adecuado. Esto debe cambiarse para que el programa sea más fácil de depurar desde el entorno de desarrollo.
Aquí está la versión mejorada para Windows, que ajusta la ventana al tamaño en lugar de cerrar el programa.

C
#ifdef _WIN32
#include <windows.h>

void checkWindowSize(int screenWidth, int screenHeight)
{
     CONSOLE_SCREEN_BUFFER_INFO csbi;
     HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
     if (!GetConsoleScreenBufferInfo(hStdout, &csbi)) {
         printf("Error: GetConsoleScreenBufferInfo (%d)\n", GetLastError());
         exit(1);
     }

     SMALL_RECT srctWindow = csbi.srWindow;
     int width = srctWindow.Right - srctWindow.Left + 1;
     int height = srctWindow.Bottom - srctWindow.Top + 1;

     if (width < screenWidth || height < screenHeight) {
        if(width < screenWidth) 
             srctWindow.Right = screenWidth;
        if(height < screenHeight)
             srctWindow.Bottom = screenHeight;

        COORD wbuff = { screenWidth +1, screenHeight +1 };

        SetConsoleScreenBufferSize(hStdout, wbuff);
        SetConsoleWindowInfo( hStdout, TRUE, &srctWindow);

        // printf("\nTerminal size is too small. Please resize terminal.");
        // printf("\nSuggested size: %d X %d", screenWidth, screenHeight);
        // printf("\nCurrent size  : %d X %d", width, height);
        // printf("\n\n");
        // exit(1);
}

Como ya se dijo, el código tiene muchas debilidades, que van desde variables no inicializadas hasta problemas de pila. En la función ReadPlayers(), por ejemplo, se produce un desbordamiento de pila que informa el depurador.
Aquí, scanf y %s se usan para leer una cadena en una matriz con un byte, lo que parece no estar en buen estado.

コメント

タイトルとURLをコピーしました