From ceb926258977a96051b00d88666cb601b6525053 Mon Sep 17 00:00:00 2001 From: silvana884 Date: Thu, 6 Nov 2025 20:02:19 +0100 Subject: [PATCH] Spiellogik vereinfacht und sichergestellt, dass alle Woerter eingebunden werden --- Start_Windows/game.c | 47 ++++++++++++++++++++++---------------------- Start_Windows/game.h | 2 +- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/Start_Windows/game.c b/Start_Windows/game.c index 7364270..6204f72 100644 --- a/Start_Windows/game.c +++ b/Start_Windows/game.c @@ -65,10 +65,10 @@ int emptyPlaces(unsigned int wordCount) } -// fills salad array with max. words from word array either horizontally or vertically int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]) { - int addedWords = 0; + int addedWords = 0; + // empties salad for(unsigned int i = 0; i < MAX_SEARCH_FIELD_LEN; i++) { for(unsigned int j = 0; j < MAX_SEARCH_FIELD_LEN; j++) { @@ -82,32 +82,25 @@ int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned i int placed = 0; while(tries < MAX_RAND_TRIES_PER_WORD && !placed) { - int numWord = whichWord(wordCount, usedWords); - if(numWord == -5) { - // found no unused word - break; - } - int horizontal = printHorizontal(); if(horizontal) { int row = rand() % searchFieldLen; - // checks if words fits - unsigned int wordLen = strlen(words[numWord]); + unsigned int wordLen = strlen(words[w]); if(wordLen <= searchFieldLen) { int startCol = rand() % (searchFieldLen - wordLen + 1); int canPlace = 1; - for(unsigned int i = 0; i < wordLen; i++) { //checks if word fits - if(salad[row][startCol + i] != '\0') { //wird nicht geplaced, wenn salad an der Stelle ungleich Buchstabe in words an der Stelle - if(salad[row][startCol + i] != words[numWord][i]) { - canPlace = 0; - break; + for(unsigned int i = 0; i < wordLen; i++) { + if(salad[row][startCol + i] != '\0') { + if(salad[row][startCol + i] != words[w][i]) { + canPlace = 0; + break; } } } - if(canPlace) { //word fits and is inserted + if(canPlace) { for(unsigned int i = 0; i < wordLen; i++) { - salad[row][startCol + i] = words[numWord][i]; + salad[row][startCol + i] = words[w][i]; } placed = 1; addedWords++; @@ -116,21 +109,21 @@ int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned i } else { // vertically int col = rand() % searchFieldLen; - unsigned int wordLen = strlen(words[numWord]); + unsigned int wordLen = strlen(words[w]); if(wordLen <= searchFieldLen) { int startRow = rand() % (searchFieldLen - wordLen + 1); int canPlace = 1; for(unsigned int i = 0; i < wordLen; i++) { if(salad[startRow + i][col] != '\0') { - if(salad[startRow + i][col] != words[numWord][i]) { - canPlace = 0; - break; + if(salad[startRow + i][col] != words[w][i]) { + canPlace = 0; + break; } } } if(canPlace) { for(unsigned int i = 0; i < wordLen; i++) { - salad[startRow + i][col] = words[numWord][i]; + salad[startRow + i][col] = words[w][i]; } placed = 1; addedWords++; @@ -140,12 +133,20 @@ int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned i tries++; } + + // Weiter zum nächsten Wort, auch wenn dieses nicht platziert werden konnte + if(!placed) { + // Optional: Hinweis ausgeben + // printf("Could not place word: %s\n", words[w]); + } } + fillRandom(salad); return addedWords; } +/* int whichWord(unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]) { int tries = 0; @@ -178,7 +179,7 @@ int whichWord(unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]) return -5; } - +*/ //Fills word in salad and deletes row of words of the used word diff --git a/Start_Windows/game.h b/Start_Windows/game.h index 46ed3ac..987ecff 100644 --- a/Start_Windows/game.h +++ b/Start_Windows/game.h @@ -11,7 +11,7 @@ void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]) int printHorizontal(); int emptyPlaces(unsigned int wordCount); int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]); -int whichWord(unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]); +//int whichWord(unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]); void fillWordinRow(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], int numWord, int row); void fillWordinColumn(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], int numWord, int column); void fillRandom(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]);