#include "game.h" #include #include #include #define MAX_RAND_TRIES_PER_WORD 10 #define EMPTY_CHAR '.' // TODO: Spiellogik implementieren: /* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren * restliche Felder mit zufälligen Buchstaben füllen */ static void initializeArray(char salad [MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen) //Array initialisieren & mit Filler füllen { for (int i = 0; i < searchFieldLen; i++) { for (int j = 0; j < searchFieldLen; j++) { salad[i][j] = EMPTY_CHAR; } } } static void col_row (unsigned int searchFieldLen, int *x, int *y) //Zufällige x/y Koordinate für Anfang von Wort { *x = rand() % searchFieldLen; *y = rand() % searchFieldLen; } static int place(char salad [MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], int searchFieldLen, int len [],const char words [] [MAX_WORD_LEN], unsigned int wordCount) //Prüfen ob plazierbar und plazieren { int x, y; int placedWords = 0; //Counter plazierte Wörter for(int i = 0; i < wordCount; i++) { int placed = 0; for(int tries = 0; tries < MAX_RAND_TRIES_PER_WORD && !placed; tries++) { len[i] = (int)strlen(words[i]); col_row(searchFieldLen, &x, &y); int orient = rand() % 2; if(orient == 0) //wir prüfen und füllen horizontal (in x-Richtung) { int works = 1; if(((x + len[i]) > searchFieldLen)) { works = 0; } else { for(int j = x; j < (x + len[i]); j++) { if(salad[y][j] != EMPTY_CHAR) { works = 0; break; } } } // ab hier platzieren wir if(works) { for (int k = 0; k < len[i]; k++) { salad[y][x + k] = words[i][k]; } placed = 1; placedWords++; } } else //wir prüfen und füllen vertikal (in y-Richtung) { int works = 1; if(((y + len[i]) > searchFieldLen)) { works = 0; } else { for(int j = y; j < (y + len[i]); j++) { if(salad[j][x] != EMPTY_CHAR) { works = 0; break; } } } // ab hier platzieren wir if(works) { for (int k = 0; k < len[i]; k++) { salad[y + k][x] = words[i][k]; } placed = 1; placedWords++; } } } } return placedWords; } static void fillLetters(char salad [MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen) //Übrige freie Felder mit Buchstaben füllen { for (int i = 0; i < searchFieldLen; i++) { for (int j = 0; j < searchFieldLen; j++) { if (salad[i][j] == EMPTY_CHAR) { char random_letter = 'A' + (rand() % 26); salad[i][j] = random_letter; } } } } //Erstellt Wortsalat, plaziert Wörter zufällig & füllt die Lücken int createWordSalad(char salad [MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words [] [MAX_WORD_LEN], unsigned int wordCount) { srand(time(NULL)); initializeArray(salad, searchFieldLen); int len [wordCount]; int count = 0; for(int i = 0; i < wordCount; i++) { if(words [i] [0] != '\0') count++; } int placeWords = place(salad, searchFieldLen, len, words, count); fillLetters(salad, searchFieldLen); return placeWords; } // Ausgabe von Wortsalat auf Konsole void showWordSalad(const char salad [MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen) { for (int i = 0; i < searchFieldLen; i++) { for (int j = 0; j < searchFieldLen; j++) { printf("%c ", salad [i][j]); } printf("\n"); } }