Start_Windows/game.c aktualisiert

This commit is contained in:
Simon Schuerer 2025-11-07 07:28:00 +00:00
parent 1a68c9389f
commit b26eb961c9

View File

@ -3,30 +3,31 @@
#include <stdlib.h> // Für Funktionen wie rand(), srand(), malloc() etc. #include <stdlib.h> // Für Funktionen wie rand(), srand(), malloc() etc.
#include <string.h> // Für Stringfunktionen wie strlen() #include <string.h> // Für Stringfunktionen wie strlen()
#define MAX_RAND_TRIES_PER_WORD 10 // Maximale Versuche pro Wort (nicht direkt verwendet im Code) #define MAX_RAND_TRIES_PER_WORD 10 // Maximale Versuche pro Wort
#define EMPTY_CHAR 0 // Definition eines leeren Zeichens (nicht direkt verwendet im Code) #define EMPTY_CHAR 0 // Definition eines leeren Zeichens
/* Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren /* Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren
* restliche Felder mit zufälligen Buchstaben füllen */ * restliche Felder mit zufälligen Buchstaben füllen */
// Aufzählungstyp zur Richtungsprüfung // Aufzählungstyp zur Richtungsprüfung
typedef enum { typedef enum { // DIR wegen Direktion - Richtung
DIR_DOWN, // Wort wird vertikal nach unten platziert DIR_DOWN, // Wort wird vertikal nach unten platziert
DIR_RIGHT, // Wort wird horizontal nach rechts platziert DIR_RIGHT, // Wort wird horizontal nach rechts platziert
DIR_FAILURE, // Platzierung nicht möglich DIR_FAILURE, // Platzierung nicht möglich
} check_dir_e; } check_dir_e; // Variable vom Typ der Aufzählung zu deklarieren
// Prüft, ob ein Wort an einer bestimmten Position und Richtung platziert werden kann // Prüft, ob ein Wort an einer bestimmten Position und Richtung platziert werden kann
static check_dir_e check_field(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], static check_dir_e check_field(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], //nur innerhalb der aktuellen Datei sichtbar ( static )
unsigned int searchFieldLen, const unsigned int word_len, unsigned int searchFieldLen, const unsigned int word_len,
const int pos_x, const int pos_y) const int pos_x, const int pos_y)
{ {
const int random_direction = rand() % 2; // Zufällige Richtung: 0 = unten, 1 = rechts const int random_direction = rand() % 2; // Zufällige Richtung: 0 = unten, 1 = rechts ( zufall für Wortplatzierung)
// Prüft welche Richtuung möglich ist
// Prüft, ob Richtung rechts möglich ist // Prüft, ob Richtung rechts möglich ist
if (random_direction == 1) { if (random_direction == 1) {
for (int i = 0; i < word_len; i++) { for (int i = 0; i < word_len; i++) { // Platziert die Buchstaben. Falls keine "0" ist wird abgebrochen und wort gelöscht
if (pos_x + i >= searchFieldLen || salad[pos_y][pos_x + i] != '\0') { if (pos_x + i >= searchFieldLen || salad[pos_y][pos_x + i] != '\0') { // Bedingung für die Pltzierung
break; // Abbruch, wenn außerhalb des Feldes oder Feld bereits belegt break; // Abbruch, wenn außerhalb des Feldes oder Feld bereits belegt
} }
if (i == word_len - 1) { if (i == word_len - 1) {
@ -71,7 +72,7 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],
// Schleife über alle Wörter // Schleife über alle Wörter
for (cnt = 0; cnt < wordCount; cnt++) { for (cnt = 0; cnt < wordCount; cnt++) {
check_dir_e direction = DIR_FAILURE; // Anfangszustand: keine Richtung möglich check_dir_e direction = DIR_FAILURE; // Anfangszustand: keine Richtung möglich
int tries = 0; int tries = 0; // fehlercounterzähler für nicht platzierte Wörter
// Versucht bis zu 1000-mal ein Wort zu platzieren // Versucht bis zu 1000-mal ein Wort zu platzieren
while (direction == DIR_FAILURE && tries < 1000) { while (direction == DIR_FAILURE && tries < 1000) {