From ae2024266ac2c384ed3f94c44444bfd57977ea97 Mon Sep 17 00:00:00 2001 From: zidanmo99094 Date: Fri, 30 Oct 2026 15:02:56 +0100 Subject: [PATCH] txt3 --- Startcode/game.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/Startcode/game.c b/Startcode/game.c index 5a5cdf8..2072e5c 100644 --- a/Startcode/game.c +++ b/Startcode/game.c @@ -5,11 +5,12 @@ #define MAX_RAND_TRIES_PER_WORD 100 #define EMPTY_CHAR 0 +#define TARGET_PER_DIRECTION 7 -// Enum zur sauberen Unterscheidung der Platzierungsrichtung +// Enum zur sauberen Unterscheidung der Platzierungsrichtung (müssen verschiedene Werte haben!) typedef enum { - DIR_HORIZONTAL = 7, - DIR_VERTICAL = 7 + DIR_HORIZONTAL = 0, + DIR_VERTICAL = 1 } Direction; int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int wordCount, char words[][100], unsigned int gridSize) @@ -18,6 +19,8 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsi memset(salad, EMPTY_CHAR, MAX_SEARCH_FIELD_LEN * MAX_SEARCH_FIELD_LEN); int placedWordsCount = 0; + int placedHorizontal = 0; + int placedVertical = 0; // 2. Wörter im Spielfeld platzieren for (unsigned int i = 0; i < wordCount; i++) { @@ -28,10 +31,22 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsi continue; } + // Richtung bestimmen: Ziel sind genau 7 horizontale und 7 vertikale Wörter + Direction dir; + if (placedHorizontal < TARGET_PER_DIRECTION && placedVertical < TARGET_PER_DIRECTION) { + // Solange bei beiden Richtungen noch Platz ist, zufällig wählen + dir = (rand() % 2 == 0) ? DIR_HORIZONTAL : DIR_VERTICAL; + } else if (placedHorizontal < TARGET_PER_DIRECTION) { + dir = DIR_HORIZONTAL; + } else if (placedVertical < TARGET_PER_DIRECTION) { + dir = DIR_VERTICAL; + } else { + // Falls bereits 7 horizontal und 7 vertikal platziert wurden, restliche verteilen + dir = (rand() % 2 == 0) ? DIR_HORIZONTAL : DIR_VERTICAL; + } + // Versuche, eine freie und kollisionsfreie Position zu finden for (int attempt = 0; attempt < MAX_RAND_TRIES_PER_WORD; attempt++) { - Direction dir = (rand() % 2 == 0) ? DIR_HORIZONTAL : DIR_VERTICAL; - int dr = (dir == DIR_VERTICAL) ? 1 : 0; int dc = (dir == DIR_HORIZONTAL) ? 1 : 0; @@ -57,6 +72,14 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsi for (unsigned int k = 0; k < len; k++) { salad[row + k * dr][col + k * dc] = words[i][k]; } + + // Zähler für die entsprechende Richtung erhöhen + if (dir == DIR_HORIZONTAL) { + placedHorizontal++; + } else { + placedVertical++; + } + placedWordsCount++; break; }