generated from freudenreichan/info2Praktikum-Wortsalat
Compare commits
3
Commits
Simon
...
76ecf700bb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76ecf700bb | ||
|
|
db3fffe3f5 | ||
|
|
332b3fa0c3 |
+82
-1
@@ -10,14 +10,95 @@
|
||||
/* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren
|
||||
* restliche Felder mit zufälligen Buchstaben füllen */
|
||||
|
||||
//edited
|
||||
typedef enum { HORIZONTAL, VERTICAL } Direction;
|
||||
|
||||
//edited: bestimmt zufällige richtung
|
||||
static Direction randomDirection(void)
|
||||
{
|
||||
return (rand() % 2 == 0) ? HORIZONTAL : VERTICAL;
|
||||
}
|
||||
|
||||
//edited
|
||||
// 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)); // seed bei jedem funktionsaufruf neu setzen
|
||||
|
||||
// spielfeld initialisieren (leer)
|
||||
for (int y = 0; y < searchFieldLen; y++) {
|
||||
for (int x = 0; x < searchFieldLen; x++) {
|
||||
salad[y][x] = EMPTY_CHAR;
|
||||
}
|
||||
}
|
||||
|
||||
int placedWrdsAmnt = 0;
|
||||
|
||||
//wörter platzieren, 1 schleife = 1 wort
|
||||
for(int w = 0; w < wordCount; w++){
|
||||
const char *word = words[w]; // *word ist immer ein wort von "words" (zeigt auf eine zeile)
|
||||
int len = strlen(word);
|
||||
|
||||
if(len > searchFieldLen ) // wenn wort zu lang, nimm nächstes wort
|
||||
continue;
|
||||
|
||||
int placed = 0;
|
||||
|
||||
// versuche mehrere random positionen, 1 schleife = 1 position
|
||||
for(int tries = 0; tries < MAX_RAND_TRIES_PER_WORD && !placed; tries++){
|
||||
Direction dir = randomDirection();
|
||||
int startX = 0;
|
||||
int startY = 0;
|
||||
|
||||
if(dir == HORIZONTAL){
|
||||
startX = rand() % (searchFieldLen - len + 1); //zeile ist 10 (0-9) breit, wort 5 lang -> höchstens in 5-9 -> 10 - 5 + 1 = 6 (startet random iwo von 0 bis 5)✅
|
||||
startY = rand() % searchFieldLen; //egal
|
||||
}else{
|
||||
startX = rand() % searchFieldLen;
|
||||
startY = rand() % (searchFieldLen - len + 1);
|
||||
}
|
||||
|
||||
//passt wort rein? (komplett leer/hat einen überschneidenen buchstaben) --> geht ganze wort platz durch (vert oder horiz), 1 schleife = 1 buchstabe im wort
|
||||
int fits = 1;
|
||||
for (int i = 0; i < len; i++) {
|
||||
int x = startX + (dir == HORIZONTAL ? i : 0);
|
||||
int y = startY + (dir == VERTICAL ? i : 0);
|
||||
if (salad[y][x] != EMPTY_CHAR && salad[y][x] != word[i]) { // wenn die reihe mit einem buchstaben befüllt der sich nd mit wort überschneidet -> fitted nd
|
||||
fits = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!fits){
|
||||
continue; // versucht nächste position
|
||||
}
|
||||
|
||||
//place word wenn posi passt
|
||||
for(int i = 0; i < len; i++){
|
||||
int x = startX + (dir == HORIZONTAL ? i : 0);
|
||||
int y = startY + (dir == VERTICAL ? i : 0);
|
||||
salad[y][x] = word[i];
|
||||
}
|
||||
placed = 1;
|
||||
}
|
||||
placedWrdsAmnt++;
|
||||
}
|
||||
//leere felder mit random buchstaben füllen
|
||||
for(int y = 0; y < searchFieldLen; y++){
|
||||
for(int x = 0; x < searchFieldLen; x++){
|
||||
if(salad[y][x] == EMPTY_CHAR)
|
||||
salad[y][x] = (rand() % 26) + 'A';
|
||||
}
|
||||
}
|
||||
return placedWrdsAmnt;
|
||||
}
|
||||
|
||||
// Prints the word salad to console
|
||||
void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen)
|
||||
{
|
||||
|
||||
for(int y = 0; y < searchFieldLen; y++){
|
||||
for(int x = 0; x < searchFieldLen; x++){
|
||||
printf("%c", salad[y][x]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
+18
-9
@@ -7,23 +7,32 @@
|
||||
// eine Funktion implementieren, die ein einzelnes Wort aus einer Textdatei (words.txt) einliest und als C-String zurückgibt.
|
||||
|
||||
// Read words from file and store in 'words' array
|
||||
int anzahlWoerter = 0;
|
||||
char zeile[500];
|
||||
|
||||
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
|
||||
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount) //words[zeilen also wörter][spalten also anzahl]
|
||||
{
|
||||
while(anzahlWoerter <= maxWordCount && fgets(zeile, sizeof(zeile), file)){
|
||||
char *wort[] = strtok(zeile, ",; \n");
|
||||
int anzahlWoerter = 0;
|
||||
|
||||
while(anzahlWoerter <= maxWordCount && fgets(zeile, sizeof(zeile), file)){ // eine zeile
|
||||
char *wort = strtok(zeile, ",; \n");
|
||||
|
||||
while(wort != NULL && anzahlWoerter <= maxWordCount){
|
||||
strncpy(words[anzahlWoerter], wort, anzahlWoerter -1);
|
||||
words[anzahlWoerter][MAX_WORD_LEN - 1]= '\0';
|
||||
anzahlWoerter++;
|
||||
*wort = strtok(NULL, ",; \n");
|
||||
|
||||
if(strlen(wort) == 0){
|
||||
wort = strtok(NULL, ",; \n");
|
||||
continue;
|
||||
}
|
||||
|
||||
strncpy(words[anzahlWoerter], wort, MAX_WORD_LEN -1);
|
||||
words[anzahlWoerter][MAX_WORD_LEN - 1]= '\0';
|
||||
|
||||
for(int i = 0; words[anzahlWoerter][i]; i++){
|
||||
words[anzahlWoerter][i] = toupper((unsigned char)words[anzahlWoerter][i]); //jedes wort das eingelesen wurde wird komplett gross geschrieben, unsigned damit toupper kein neg. arg bekommt (zb umlaute)
|
||||
}
|
||||
|
||||
anzahlWoerter++;
|
||||
wort = strtok(NULL, ",; \n");
|
||||
|
||||
}
|
||||
}
|
||||
return anzahlWoerter;
|
||||
}
|
||||
@@ -40,7 +40,13 @@ int main(int argc, char *argv[])
|
||||
// Check if all words were successfully placed
|
||||
// Start the game if successful
|
||||
// error message if some words couldn't be placed
|
||||
int windowWidth = 880;
|
||||
|
||||
if(placedWords == wordCount){
|
||||
startGame(wordSalad, SALAD_SIZE, words, wordCount, windowWidth);
|
||||
}else{
|
||||
printf("Fehler: Nicht alle Wörter konnten platziert werden.\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -13,6 +13,12 @@ unityfolder = ./unity
|
||||
wordsalad_initial:
|
||||
$(CC) -o wordsalad_initial $(BINARIES)/libwordsalad_complete.a $(BINARIES)/libraylib.a $(LDFLAGS)
|
||||
|
||||
# --------------------------
|
||||
# Eigene Version
|
||||
# --------------------------
|
||||
wordsalad_myversion: main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a
|
||||
$(CC) $(CFLAGS) -o wordsalad_myversion main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a $(LDFLAGS)
|
||||
|
||||
# --------------------------
|
||||
# Normales Spiel bauen
|
||||
# --------------------------
|
||||
|
||||
Executable
BIN
Binary file not shown.
Reference in New Issue
Block a user