From 4869eee73b5227baad3f6fdfe8bfb8efe079b62f Mon Sep 17 00:00:00 2001 From: Luis Hahn Date: Mon, 5 Feb 2024 17:43:51 +0100 Subject: [PATCH] =?UTF-8?q?Hinzuf=C3=BCgen=20der=20laden=20und=20speichern?= =?UTF-8?q?=20funktion=20f=C3=BCr=20die=20Historie,=20Luis=20Hahn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Speichern.c | 44 ++++++++++++++++++++++++++++++++++++++++ src/Speichern.h | 1 + test/test_Speichern.c | 46 ++++++++++++++++++++++++++++++++++++++++++ test_spielstand.dat | Bin 0 -> 84 bytes 4 files changed, 91 insertions(+) create mode 100644 test/test_Speichern.c create mode 100644 test_spielstand.dat diff --git a/src/Speichern.c b/src/Speichern.c index 958a0c3..9aab1ff 100644 --- a/src/Speichern.c +++ b/src/Speichern.c @@ -7,4 +7,48 @@ void speichern_spielstand_historie(int** Historie, int anzahl_Zuege, const char* dateiName) { + int ZUG_INFO = 5; + FILE* datei = fopen(dateiName, "wb"); + + if (datei == NULL) { + printf("Fehler beim Öffnen der Datei zum Speichern.\n"); + return; + } + + // Schreibe die Anzahl der Züge in die Datei + fwrite(&anzahl_Zuege, sizeof(int), 1, datei); + + // Schreibe die Historie in die Datei + fwrite(*Historie, sizeof(int), ZUG_INFO * (anzahl_Zuege + 1), datei); + + fclose(datei); +} + +int laden_spielstand_historie(int*** Historie, int* anzahl_Zuege, const char* dateiName) { + int ZUG_INFO = 5; + FILE* datei = fopen(dateiName, "rb"); + + if (datei == NULL) { + printf("Fehler beim Öffnen der Datei zum Laden.\n"); + return 0; // Rückgabewert 0 bedeutet Fehler + } + + // Lese die Anzahl der Züge aus der Datei + fread(anzahl_Zuege, sizeof(int), 1, datei); + + // Allokiere Speicher für die Historie basierend auf der gelesenen Anzahl der Züge + *Historie = (int**)malloc((*anzahl_Zuege + 1) * sizeof(int*)); + + if (*Historie == NULL) { + printf("Fehler bei der Speicherzuweisung.\n"); + fclose(datei); + return 0; + } + + // Lese die Historie aus der Datei + fread(**Historie, sizeof(int), ZUG_INFO * (*anzahl_Zuege + 1), datei); + + fclose(datei); + + return 1; // Rückgabewert 1 bedeutet Erfolg } \ No newline at end of file diff --git a/src/Speichern.h b/src/Speichern.h index 40b0790..36698d2 100644 --- a/src/Speichern.h +++ b/src/Speichern.h @@ -4,5 +4,6 @@ #include "Spieler.h" void speichern_spielstand_historie(int** Historie, int anzahl_Zuege, const char* dateiName); +int laden_spielstand_historie(int*** Historie, int* anzahl_Zuege, const char* dateiName); #endif // SPEICHERN diff --git a/test/test_Speichern.c b/test/test_Speichern.c new file mode 100644 index 0000000..29168c5 --- /dev/null +++ b/test/test_Speichern.c @@ -0,0 +1,46 @@ +#ifdef TEST +#include "unity.h" +#include +#include "Historie.h" +#include "Spieler.h" +#include "Speichern.h" + + +void test_speichern_spielstand_historie(void) { + // Annahme: Historie mit einigen Zügen ist bereits vorhanden + int** historie; + int anzahl_zuege = 3; + historie = erstellen_historie(); + + //Test-Daten + historie[0][0] = 1; historie[0][1] = 2; historie[0][2] = 3; historie[0][3] = 4; historie[0][4] = 0; // Beispielzug 1 + historie[1][0] = 5; historie[1][1] = 6; historie[1][2] = 7; historie[1][3] = 8; historie[1][4] = 1; // Beispielzug 2 + historie[2][0] = 9; historie[2][1] = 10; historie[2][2] = 11; historie[2][3] = 12; historie[2][4] = 0; // Beispielzug 3 + + // Teste die Funktion zum Speichern des Spielstands + const char* test_dateiname = "test_spielstand.dat"; + speichern_spielstand_historie(historie, anzahl_zuege, test_dateiname); + + // Lese die gespeicherte Historie zurück + int** geladene_historie; + int geladene_anzahl_zuege; + + laden_spielstand_historie(&geladene_historie, &geladene_anzahl_zuege, test_dateiname); + + // Überprüfe, ob die geladene Historie mit der ursprünglichen Historie identisch ist + TEST_ASSERT_EQUAL_INT_MESSAGE(anzahl_zuege, geladene_anzahl_zuege, "Anzahl der Züge stimmt nicht überein"); + + for (int i = 0; i <= anzahl_zuege; i++) { + TEST_ASSERT_EQUAL_INT_ARRAY_MESSAGE(historie[i], geladene_historie[i], 5, "Zuginformationen stimmen nicht überein"); + } + + // Freigabe des Speichers + for (int i = 0; i <= anzahl_zuege; i++) { + free(historie[i]); + free(geladene_historie[i]); + } + free(historie); + free(geladene_historie); +} + +#endif // TEST \ No newline at end of file diff --git a/test_spielstand.dat b/test_spielstand.dat new file mode 100644 index 0000000000000000000000000000000000000000..5780c6ee314583c0d643d5e11effe0db1ea79186 GIT binary patch literal 84 zcmZQ(U|?VbVkRJF24WTc literal 0 HcmV?d00001