diff --git a/Startcode/game.c b/Startcode/game.c index 803301f..1cd98c7 100644 --- a/Startcode/game.c +++ b/Startcode/game.c @@ -6,12 +6,73 @@ #define MAX_RAND_TRIES_PER_WORD 10 #define EMPTY_CHAR 0 -//TODO: Spiellogik implementieren: +// TODO: Spiellogik implementieren: /* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren - * restliche Felder mit zufälligen Buchstaben füllen */ + * restliche Felder mit zufälligen Buchstaben füllen */ + +int tryPlaceVertical(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char word[], unsigned int x, unsigned int y); +int tryPlaceHorizontal(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char word[], unsigned int x, unsigned int y); // 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) { + // place words randomly + int placedWords = 0; + srand((unsigned int)time(NULL)); + for (int word = 0; word < wordCount; word++) + { + // (re-)try randomly + int retries = searchFieldLen * 2; + int placed = 0; + // int vertical = rand() / (RAND_MAX / 2); + int vertical = 1; + while (!placed && retries > 0) + { + int x = rand() / (RAND_MAX / (!vertical ? searchFieldLen - 1 - strlen(words[word]) : searchFieldLen)); + int y = rand() / (RAND_MAX / (vertical ? searchFieldLen - 1 - strlen(words[word]) : searchFieldLen)); + printf("Placed %s at %d,%d\n", words[word], x, y); + placed = tryPlaceVertical(salad, searchFieldLen, words[word], x, y); + + if (placed) printf("Placed %s at %d,%d!\n", words[word], x, y); + + if (--retries < 1) + break; + }; + + if (!placed) + break; + else + placedWords++; + // printf("Placed!\n"); + } + + // fill empty spaces + + return placedWords; } + +int tryPlaceVertical(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char word[], unsigned int x, unsigned int y) +{ + // search fields for letters + int wordLen = strlen(word); + + for (int testY = y; testY < (y + wordLen); testY++) + { + if (salad[testY][x] != '\0') + return 0; + } + + // if ok then put my word in + for (int placeChar = 0; placeChar < wordLen; placeChar++) + { + salad[placeChar + y][x] = word[placeChar]; + } + return 1; +} + +int tryPlaceHorizontal(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char word[], unsigned int x, unsigned int y) +{ + // TODO; + return 1; +} \ No newline at end of file