#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 */ // enum to make it more clear what de current orientation is typedef enum { HORIZONTAL, VERTIKAL } orientation; // new struct for handing over the entire wordPosition // alignment is HORIZONTAL or VERTICAL // rowOrColumn is the int of the colum or row the word is suposed to be placed in // startingCell is the int of where in the row/colum the first leter of the word suposed to be placed typedef struct { orientation alignment; unsigned int rowOrColumn; unsigned int startingCell; } wordPosition; // Choses a random Position for the current Word wordPosition choserandomPosition(unsigned int searchFieldLen, unsigned int wordLength) { wordPosition position = {0, 0, 0}; srand(time(NULL)); position.alignment = rand()%(VERTIKAL - HORIZONTAL + 1) + HORIZONTAL; position.rowOrColumn = rand()%(searchFieldLen); position.startingCell = rand()%(searchFieldLen - wordLength); return position; } // Checks if the current Position is free // returns 1 if the Position is free // returns 0 if the Position is occupied int checkIfPositionIsFree(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], wordPosition position,unsigned int wordLength, unsigned int serchFieldLen) { int i = 0; int letterFound = 0; int positionfree = 0; if (position.alignment == HORIZONTAL) { // checking to see if position is free // by scanning each row in the given Column for (i = position.startingCell; (i < serchFieldLen) && !(letterFound); i++) { if ((salad[position.rowOrColumn][i] >= 'A') && (salad[position.rowOrColumn][i] <= 'z')) { letterFound = 1; } } } else if (position.alignment == VERTIKAL) { // checking to see if position is free // by scanning each row in the given Column for (i = position.startingCell; (i < serchFieldLen) && !(letterFound); i++) { if ((salad[position.rowOrColumn][i] >= 'A') && (salad[position.rowOrColumn][i] <= 'z')) { letterFound = 1; } } } positionfree = !letterFound; return positionfree; } // Places the current word into the // selected position // returns 1 if sucessfull int placeWord(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], wordPosition position, const char currentWord[], unsigned int currentWordLen, unsigned int serchFieldLen) { int i = 0; if (position.alignment == HORIZONTAL) { for (i = position.startingCell; (i < serchFieldLen) && (i < currentWordLen); i++) { salad[position.rowOrColumn][i] = currentWord[i]; } salad[position.rowOrColumn][i] = '\0'; } else if (position.alignment == VERTIKAL) { for (i = position.startingCell; (i < serchFieldLen) && (i < currentWordLen); i++) { salad[i][position.rowOrColumn] = currentWord[i]; } salad[i][position.rowOrColumn] = '\0'; } return 1; } // Places random letters into the // empty fields of the wordSalad void placeRandomLetters(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen) { int i = 0; int j = 0; srand(time(NULL)); for (i = 0; i < searchFieldLen; i++) { for (j = 0; i < searchFieldLen; j++) { if (salad[i][j]) { if ((salad[i][j] < 'A') && (salad[i][j] > 'z')) { salad[i][j] = rand()%('Z' - 'A' + 1) + 'A'; } } } } } // Creates the word salad by placing words randomly and filling empty spaces // returnes the number of sucessfully placed words int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount) { int i = 0; int j = 0; int positionFound = 0; int placedWords = 0; char currentWord[MAX_WORD_LEN]; wordPosition currentWordPosition = {0,0,0}; for (i = 1; i <= wordCount; i++) { do { currentWordPosition = choserandomPosition(searchFieldLen, strlen(words[i])); positionFound = checkIfPositionIsFree(salad, currentWordPosition, strlen(words[i]), searchFieldLen); j++; } while ((j < MAX_RAND_TRIES_PER_WORD) && !(positionFound)); if (positionFound) { strcpy(currentWord, words[i-1]); placedWords += placeWord(salad, currentWordPosition, currentWord, strlen(currentWord), searchFieldLen); } } placeRandomLetters(salad, searchFieldLen); return placedWords; } // Prints the word salad to console void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen) { }