#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 -1 #define FEHLER_SETZEN -2 #define ERFOLG 1 //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) { //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 dx[] = {1, 0}; int dy[] = {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 = vertikal; 1 = horizontal int zeile = rand() % searchFieldLen; int spalte = rand() % searchFieldLen; if ((dir == 0 && (zeile + laenge > searchFieldLen)) || (dir == 1 && (spalte + laenge > searchFieldLen))) { continue; } int kollision = 0; for(int i = 0; i < laenge; i++) //Kollision mit anderen Wörtern vermeiden { int z = zeile + dy[dir] * i; int s = spalte + dx[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 + dy[dir] * i; int s = spalte + dx[dir] * i; salad[z][s] = words[w][i]; } placed = 1; } } if(!placed) //überprüft ob das Wort gesetzt wurde, wenn nicht Fehlerausgabe { return FEHLER_SETZEN; } } //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; }