#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, letterPlaced, retries = 0; int wordLength = strlen(words[n]); // get random coordinates int rndX = rand() % (searchFieldLen - wordLength + 1); int rndY = rand() % (searchFieldLen - wordLength + 1); // rand() % 2 if (1) { while (letterPlaced < wordLength) { // 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; } printf("%d %d",n, checkSquare); // pastes word into the line if (checkSquare == wordLength) { for (int x = 0; x < wordLength; x++) { salad[rndY][rndX + x] = words[n][x]; letterPlaced++; } } } wordsPlaced++; } else { while (letterPlaced < wordLength) { // 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 %u 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]; letterPlaced++; } } } 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] = (char) (rand() % (25 + 1) + 65); salad[y][x] = 120; } } } return 15; } // 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]); } } // Clear Wordsalad void clearWordSalad(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; j++) { salad[i][j] = '\0'; } } }