Browse Source

Hinzufügen der laden und speichern funktion für die Historie, Luis Hahn

remotes/origin/Luis-Branch
Luis Hahn 11 months ago
parent
commit
4869eee73b
  1. 44
      src/Speichern.c
  2. 1
      src/Speichern.h
  3. 46
      test/test_Speichern.c
  4. BIN
      test_spielstand.dat

44
src/Speichern.c

@ -7,4 +7,48 @@
void speichern_spielstand_historie(int** Historie, int anzahl_Zuege, const char* dateiName) { 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
} }

1
src/Speichern.h

@ -4,5 +4,6 @@
#include "Spieler.h" #include "Spieler.h"
void speichern_spielstand_historie(int** Historie, int anzahl_Zuege, const char* dateiName); 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 #endif // SPEICHERN

46
test/test_Speichern.c

@ -0,0 +1,46 @@
#ifdef TEST
#include "unity.h"
#include <stdlib.h>
#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

BIN
test_spielstand.dat

Loading…
Cancel
Save