#include "game.h" #include #include #include #define MAX_RAND_TRIES_PER_WORD 10 #define EMPTY_CHAR 0 // [NEU] Hilfsfunktion: zufälliger Buchstabe char randomChar() { // zufälliges Char wird erzeugt return 'A' + rand() % 26; // A + zufallszahl bis 26 für alle möglichen zahlen mit ä,ö,ü } // [NEU] Hilfsfunktion: Wort platzieren int tryPlaceWord(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char* word, int horizontal) { int len = strlen(word); int maxRow = horizontal ? searchFieldLen : searchFieldLen - len; int maxCol = horizontal ? searchFieldLen - len : searchFieldLen; int row = rand() % maxRow; // Maximale Reihen definieren int col = rand() % maxCol; // Maximale Spalten definieren // Prüfen auf Kollision for (int i = 0; i < len; i++) { //for schleife, beginnt bei 0 und zählt bis zur eingegebenen länge int r = row + (horizontal ? 0 : i); // int c = col + (horizontal ? i : 0); if (salad[r][c] != EMPTY_CHAR && salad[r][c] != word[i]) return 0; // Kollision } // Wort platzieren for (int i = 0; i < len; i++) { int r = row + (horizontal ? 0 : i); int c = col + (horizontal ? i : 0); salad[r][c] = word[i]; } return 1; } // Creates the word salad by placing words randomly and filling empty spaces int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount) { // [NEU] Initialisiere das Feld for (unsigned int i = 0; i < searchFieldLen; i++) for (unsigned int j = 0; j < searchFieldLen; j++) salad[i][j] = EMPTY_CHAR; // [NEU] Wörter platzieren for (unsigned int w = 0; w < wordCount; w++) { int placed = 0; for (int tries = 0; tries < MAX_RAND_TRIES_PER_WORD && !placed; tries++) { int horizontal = rand() % 2; placed = tryPlaceWord(salad, searchFieldLen, words[w], horizontal); } if (!placed) return 0; // Fehler beim Platzieren } // [NEU] Restliche Felder füllen for (unsigned int i = 0; i < searchFieldLen; i++) for (unsigned int j = 0; j < searchFieldLen; j++) if (salad[i][j] == EMPTY_CHAR) salad[i][j] = randomChar(); return 1; // Erfolg } // Prints the word salad to console void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen) { // [NEU] Ausgabe des Gitters for (unsigned int i = 0; i < searchFieldLen; i++) { for (unsigned int j = 0; j < searchFieldLen; j++) { printf("%c ", salad[i][j]); } printf("\n"); } }