#include "game.h" #include #include #include #define MAX_RAND_TRIES_PER_WORD 10 #define EMPTY_CHAR 0 int randomNumberInRange(unsigned int range); //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) { //Rückgabewert ist die Anzahl an platzierten Wörtern srand(time(NULL)); int placedWordsSuccess = 0; //Array auf Spielfläche initialisieren mit leerem Char for (int i = 0; i < searchFieldLen; i++) { for (int u = 0; u < searchFieldLen; u++) { salad[i][u] = EMPTY_CHAR; } } for (int wordToBePlaced = 0; wordToBePlaced < wordCount; wordToBePlaced++) { int triesPerWord = 1; while (triesPerWord <= MAX_RAND_TRIES_PER_WORD) { unsigned int xPosition = randomNumberInRange(searchFieldLen-1); unsigned int yPosition = randomNumberInRange(searchFieldLen-1); if (salad[yPosition][xPosition] != EMPTY_CHAR) { triesPerWord++; continue; } int putWordHorizontal = randomNumberInRange(1); //Horizontal einsetzen if (putWordHorizontal) { int writePossible = 1; //Schleife um alle Stellen auf EMPTY_SPACE zu prüfen for (int t = 0; t < MAX_WORD_LEN; t++) { if (words[wordToBePlaced][t] == EMPTY_CHAR) break; if (xPosition + t >= searchFieldLen) { triesPerWord++; writePossible = 0; break; } if (salad[yPosition][xPosition + t] != EMPTY_CHAR) { triesPerWord++; writePossible = 0; break; } } // Nach Prüfung Wort einsetzen if (writePossible) { for (int t = 0; t < MAX_WORD_LEN; t++) { if (words[wordToBePlaced][t] == EMPTY_CHAR) break; salad[yPosition][xPosition + t] = words[wordToBePlaced][t]; } placedWordsSuccess++; break; } } // Sonst vertikal einsetzen else { int writePossible = 1; //Auf EMPTY_SPACE prüfen for (int t = 0; t < MAX_WORD_LEN; t++) { if (words[wordToBePlaced][t] == EMPTY_CHAR) break; if (yPosition + t >= searchFieldLen) { triesPerWord++; writePossible = 0; break; } if (salad[yPosition + t][xPosition] != EMPTY_CHAR) { triesPerWord++; writePossible = 0; break; } } //Einsetzen, wenn Felder frei if (writePossible) { for (int t = 0; t < MAX_WORD_LEN; t++) { if (words[wordToBePlaced][t] == EMPTY_CHAR) break; salad[yPosition + t][xPosition] = words[wordToBePlaced][t]; } placedWordsSuccess++; break; } } } } //Restliche Felder mit Random-Buchstaben füllen for (int zeile = 0; zeile < searchFieldLen; zeile++) { for (int spalte = 0; spalte < searchFieldLen; spalte++) { if (salad[zeile][spalte] == EMPTY_CHAR) { salad[zeile][spalte] = (char)(randomNumberInRange(25)+65); //Buchstabe (ASCII) 65 - 90 } } } return placedWordsSuccess; //Anzahl eingeschriebener Wörter zurückgeben } int randomNumberInRange(unsigned int range) { int number = (rand() % (range+1)); return number; }