#include "game.h" #include #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) { srand(time(NULL)); int placedWords = 0; // Array mit . füllen for (int r = 0; r < searchFieldLen; r++){ for(int s = 0; s < searchFieldLen; s++){ salad[r][s] = '.'; } } // -> erst wenn die ganze Länge des Wortes frei ist, array hinzufügen // MAX Versuche das Wort zu platzieren == 10 // Wörter in salad einsortieren for (int num_words = 0; num_words < wordCount; num_words++){ int laenge = strlen(words[num_words]); // muss noch prüfen, ob in der Zeile schon was ist // 1 ist horizontal, 0 ist vertikal // isalpha == 0 -> kein Buchstabe for(int versuch = 0; versuch < MAX_RAND_TRIES_PER_WORD; versuch++){ int richtung = rand()% 2; int belegt = 0; // horizontale Eingabe if (richtung == 1){ int zeile = rand()% searchFieldLen; int spalte = rand()% (searchFieldLen- laenge +1); //prüft, ob die herausgesuchte Zeile noch frei ist // belegt == 1 -> Zeile nicht frei for (int o = spalte; o < spalte + laenge; o++){ if(salad[zeile][o] != '.'){ belegt = 1; break; } } // setzt in das Array ein, wenn frei oder erhöht die Versuchsanzahl if (belegt == 0){ for(int k = 0; k < laenge; k++){ salad[zeile][spalte + k] = words[num_words][k]; } placedWords++; break; } } // vertikale Eingabe else if (richtung == 0){ int zeile = rand()% (searchFieldLen - laenge +1); int spalte = rand()% searchFieldLen; //prüft, ob die herausgesuchte Zeile noch frei ist for (int n = zeile; n < zeile + laenge; n++){ if(salad[n][spalte] != '.'){ belegt = 1; break; } } // setzt in das Array ein, wenn frei oder erhöht die Versuchsanzahl if (belegt == 0){ for(int j = 0; j < laenge; j++){ salad[zeile + j][spalte] = words[num_words][j]; } placedWords++; break; } } else{ break; } } } // fügt zufällige Buchstaben ein for(int l = 0; l < searchFieldLen; l++){ for(int m = 0; m < searchFieldLen; m++ ){ if(isalpha(salad[l][m]) == 0 ){ // zufällige Buchstaben erzeugen char alphabet [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int laenge = strlen(alphabet); int zufallszahl = rand()% laenge; char zufallsbuchstabe = alphabet[zufallszahl]; // zufällige Buchstaben einfügen salad[l][m] = zufallsbuchstabe; } } } return placedWords; } // Prints the word salad to console void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen) { for(int p = 0; p < searchFieldLen; p++){ for(int q = 0; q < searchFieldLen; q++){ printf("%c", salad[p][q]); } printf("\n"); } }