#include "game.h" #include #include #include #include #define MAX_RAND_TRIES_PER_WORD 10 #define EMPTY_CHAR 0 #define MAX_ATTEMPTS 42 //Die Antwort auf das Leben, das Universum, alles #define FEHLER_LAENGE_WORT 0 #define FEHLER_SETZEN 0 //TODO: Spiellogik implementieren: /* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren * restliche Felder mit zufälligen Buchstaben füllen */ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount) { for(int i = 0; i < wordCount; i++) { if(strlen(words[i]) > searchFieldLen) { return 0; } } //befüllen des Arrays mit '\0' for(unsigned int i = 0; i < searchFieldLen; i++) { for(unsigned int j = 0; j < searchFieldLen; j++) { salad[i][j] = '\0'; } } //erstellen von Richtungsvektoren int dy[] = {1, 0}; int dx[] = {0, 1}; //befüllen mit den Wörtern for(unsigned int w = 0; w < wordCount; w++) { int laenge = strlen(words[w]); //test ob Wort theoretisch reinpasst; was machen wir aber wenn ein Wort fast genauso lang ist wie das Feld? Wenn am Ende noch ein riesiges Wort eingesetzt werden soll, wird es nie reinpassen if(laenge >= searchFieldLen) { return FEHLER_LAENGE_WORT; } int placed = 0; int attempts = 0; while(!placed && attempts < MAX_ATTEMPTS) { attempts += 1; int dir = rand() % 2; //Richtung 0 = horinzontal; 1 = verikal int zeile = rand() % (searchFieldLen-laenge); int spalte = rand() % (searchFieldLen-laenge); int kollision = 0; for(int i = 0; i < laenge; i++) //Kollision mit anderen Wörtern vermeiden { int z = zeile + dx[dir] * i; int s = spalte + dy[dir] * i; if((salad[z][s] != '\0') && (salad[z][s] != words[w][i])) { kollision = 1; break; } } if(!kollision) // keine kollision, also setzten der buchstaben { for(int i = 0; i < laenge; i++) { int z = zeile + dx[dir] * i; int s = spalte + dy[dir] * i; salad[z][s] = words[w][i]; } placed += 1; } } if(!placed) //überprüft ob das Wort gesetzt wurde, wenn nicht Fehlerausgabe { return placed; } } //befüllen mit zufälligen Buchstaben for(unsigned int i = 0; i < searchFieldLen; i++) { for(unsigned int j = 0; j < searchFieldLen; j++) { if(salad[i][j] == '\0') { salad[i][j] = 'A' + rand() % 26; } } } return (int)wordCount; }