From c96e95db7a103eb386a45520e112ff20ed3d51c7 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 2 Nov 2026 07:52:34 +0100 Subject: [PATCH] Kommentare game.c --- Startcode/game.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Startcode/game.c b/Startcode/game.c index 2a46947..2f00ebb 100644 --- a/Startcode/game.c +++ b/Startcode/game.c @@ -6,18 +6,18 @@ #define MAX_RAND_TRIES_PER_WORD 10 #define EMPTY_CHAR 0 -// Hilfsfunktion: Sichere Längenermittlung mit Obergrenze -static size_t safeStrnlen(const char *str, size_t maxLen) +// Hilfsfunktion 1: Sichere Längenermittlung mit Obergrenze +static size_t safeStrnlen(const char *str, size_t maxLen) //ermittelt die Wortlänge bis zur max. Grenze { size_t len = 0; - while (len < maxLen && str[len] != '\0') + while (len < maxLen && str[len] != '\0') //ermittelt die max Länge und mit '\0' endet jedes Wort { len++; } return len; } -// Hilfsfunktion: Prüft kollisionsfrei, ob ein Wort an die Position passt +// Hilfsfunktion2 : Prüft kollisionsfrei, ob ein Wort an die Position passt // Arraygrößen (fieldLen, wordLen) werden explizit als Parameter übergeben static int canPlaceWord(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], @@ -28,10 +28,10 @@ static int canPlaceWord(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_ unsigned int col, int isVertical) { - for (unsigned int k = 0; k < wordLen; k++) + for (unsigned int k = 0; k < wordLen; k++) //Prüft ob das Wort in das 20x20 Feld passt { - unsigned int r = isVertical ? (row + k) : row; - unsigned int c = isVertical ? col : (col + k); + unsigned int r = isVertical ? (row + k) : row; //jeder Buchstabe berechnet wo er landet + unsigned int c = isVertical ? col : (col + k); //Reihe = row und Zeile = col bzw. coloumn // Überlaufschutz: Innerhalb der Arraygrenzen bleiben if (r >= fieldLen || c >= fieldLen) { @@ -46,7 +46,7 @@ static int canPlaceWord(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_ return 1; } -// Hilfsfunktion: Schreibt das Wort in das Spielfeld +// Hilfsfunktion3: Schreibt das Wort in das Spielfeld // Arraygrößen (fieldLen, wordLen) werden explizit als Parameter übergeben static void placeWord(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int fieldLen, @@ -56,24 +56,24 @@ static void placeWord(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int col, int isVertical) { - for (unsigned int k = 0; k < wordLen; k++) + for (unsigned int k = 0; k < wordLen; k++) //im Endeffekt genau wie Hilfsfunktion 2 { unsigned int r = isVertical ? (row + k) : row; unsigned int c = isVertical ? col : (col + k); if (r < fieldLen && c < fieldLen) { - salad[r][c] = word[k]; + salad[r][c] = word[k]; //nur wird hier nicht überprüft sondern richtig geschrieben } } } -// Erzeugt Wortsalat und platziert leere Felder mit random Buchstaben +// Erzeugt Wortsalat und platziert leere Felder mit random Buchstaben (Hauptfunktion) int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount) { // Sicherheitsprüfung der übergebenen Parameter if (salad == NULL || words == NULL || searchFieldLen == 0 || searchFieldLen > MAX_SEARCH_FIELD_LEN) { - return -1; + return -1; //falls keine Wörter übergeben, dann bricht Spiel ab } // Zufallsgenerator initialisieren static int seeded = 0; @@ -82,7 +82,7 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsi srand((unsigned int)time(NULL)); seeded = 1; } - // 1. Spielfeld komplett mit EMPTY_CHAR leeren + // 1. Spielfeld komplett mit EMPTY_CHAR leeren, es stehen überall danach nur noch '0' for (unsigned int r = 0; r < searchFieldLen; r++) { for (unsigned int c = 0; c < searchFieldLen; c++) @@ -94,12 +94,12 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsi char currentWord[MAX_WORD_LEN]; unsigned int placedCount = 0; // 2. Wörter platzieren -for (unsigned int i = 0; i < wordCount; i++) +for (unsigned int i = 0; i < wordCount; i++) //alle Wörter werden nacheinander eingearbeitet { - // Wort sicher mit strncpy kopieren und terminieren + // Wort sicher mit strncpy kopieren und terminieren, mit memset wird beim ersten Durchlauf genullt memset(currentWord, 0, sizeof(currentWord)); strncpy(currentWord, words[i], MAX_WORD_LEN - 1); - currentWord[MAX_WORD_LEN - 1] = '\0'; + currentWord[MAX_WORD_LEN - 1] = '\0'; //falls Wort zulange wieder mit '\0' Beenden erzwingen unsigned int wordLen = (unsigned int)safeStrnlen(currentWord, MAX_WORD_LEN); if (wordLen == 0) { @@ -111,10 +111,10 @@ for (unsigned int i = 0; i < wordCount; i++) continue; } int placed = 0; - for (int attempt = 0; attempt < MAX_RAND_TRIES_PER_WORD; attempt++) + for (int attempt = 0; attempt < MAX_RAND_TRIES_PER_WORD; attempt++) //10 Versuche das Wort zu platzieren { // Richtung würfeln: 0 = Horizontal, 1 = Vertikal - int isVertical = rand() % 2; + int isVertical = rand() % 2; //hier entscheidet der Zufall ob row oder col unsigned int row = 0; unsigned int col = 0; if (isVertical)