#include "game.h" #include #include #include #define MAX_RAND_TRIES_PER_WORD 10 #define EMPTY_CHAR 0 // TODO: Spiellogik implementieren: /* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren * restliche Felder mit zufälligen Buchstaben füllen */ // 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) { // set seed // showWordSalad(salad, 20); for (int i = 0; i < MAX_SEARCH_FIELD_LEN; i++) { for (int j = 0; j < MAX_SEARCH_FIELD_LEN; j++) { salad[i][j] = '\0'; } } // showWordSalad(salad, 20); srand(time(NULL)); int wordsPlaced = 0; // loop through all words for (int n = 0; n < wordCount; n++) { int checkSquare, retries = 0; int wordLength = strlen(words[n]); if(wordLength > searchFieldLen) { printf("Fehler"); break; } // get random coordinates int rndX = rand() % (searchFieldLen - wordLength + 1); int rndY = rand() % (searchFieldLen - wordLength + 1); if (rand() % 2) { // checks if word fits into gamefield while (checkSquare != wordLength && retries < 10) { checkSquare = 0; // checks if squares to paste into is already taken for (int x = rndX; x < (rndX + wordLength); x++) { if (salad[rndY][x] == '\0') checkSquare++; } // new coords when doesnt fit if (checkSquare != wordLength) { rndX = rand() % (searchFieldLen - wordLength + 1); rndY = rand() % (searchFieldLen - wordLength + 1); retries++; } } if (retries >= 10) { printf("Word %d couldn't be placed", n); break; } // pastes word into the line if (checkSquare == wordLength) { for (int x = 0; x < wordLength; x++) { salad[rndY][rndX + x] = words[n][x]; } } wordsPlaced++; } else { // checks if word fits into gamefield while (checkSquare != wordLength && retries < 10) { checkSquare = 0; // checks if squares to paste into is already taken for (int y = rndY; y < (rndY + wordLength); y++) { if (salad[y][rndX] == '\0') checkSquare++; } // new coords when doesnt fit if (checkSquare != wordLength) { rndX = rand() % (searchFieldLen - wordLength + 1); rndY = rand() % (searchFieldLen - wordLength + 1); retries++; } } if (retries >= 10) { printf("Word %d couldn't be placed", n); break; } // pastes word into the line if (checkSquare == wordLength) { for (int y = 0; y < wordLength; y++) { salad[y + rndY][rndX] = words[n][y]; } } wordsPlaced++; } } // fill voids for (int x = 0; x < searchFieldLen; x++) { for (int y = 0; y < searchFieldLen; y++) { if (salad[y][x] == '\0') { // random number from 65 (A) to 90 (Z) with ASCII salad[y][x] = rand() % (25 + 1) + 65; } } } return wordsPlaced; } // Prints the word salad to console void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen) { int i, j = 0; for (i = 0; i < searchFieldLen; i++) { for (j = 0; j < searchFieldLen - 1; j++) { printf(" %c,", salad[i][j]); } printf(" %c\n", salad[i][searchFieldLen]); } }