From b9c4545cc01e730f32e61bf8e74fba8cc5942e73 Mon Sep 17 00:00:00 2001 From: zidanmo99094 Date: Fri, 30 Oct 2026 15:08:56 +0100 Subject: [PATCH] tst1 --- Startcode/game.c | 40 ++++++++++------------------------------ 1 file changed, 10 insertions(+), 30 deletions(-) diff --git a/Startcode/game.c b/Startcode/game.c index 2072e5c..ac3c9b8 100644 --- a/Startcode/game.c +++ b/Startcode/game.c @@ -2,12 +2,12 @@ #include #include #include +#include -#define MAX_RAND_TRIES_PER_WORD 100 +#define MAX_RAND_TRIES_PER_WORD 200 #define EMPTY_CHAR 0 -#define TARGET_PER_DIRECTION 7 -// Enum zur sauberen Unterscheidung der Platzierungsrichtung (müssen verschiedene Werte haben!) +// Enum zur sauberen Unterscheidung der Platzierungsrichtung typedef enum { DIR_HORIZONTAL = 0, DIR_VERTICAL = 1 @@ -19,8 +19,6 @@ 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++) { @@ -31,22 +29,10 @@ 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; @@ -61,25 +47,19 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsi int canPlace = 1; for (unsigned int k = 0; k < len; k++) { char current = salad[row + k * dr][col + k * dc]; - if (current != EMPTY_CHAR && current != words[i][k]) { + char wordChar = (char)toupper((unsigned char)words[i][k]); + + if (current != EMPTY_CHAR && current != wordChar) { canPlace = 0; break; } } - // Wort eintragen, wenn der Platz gültig ist + // Wort in Großbuchstaben eintragen, wenn der Platz gültig ist if (canPlace) { for (unsigned int k = 0; k < len; k++) { - salad[row + k * dr][col + k * dc] = words[i][k]; + salad[row + k * dr][col + k * dc] = (char)toupper((unsigned char)words[i][k]); } - - // Zähler für die entsprechende Richtung erhöhen - if (dir == DIR_HORIZONTAL) { - placedHorizontal++; - } else { - placedVertical++; - } - placedWordsCount++; break; }