9 Commits
Author SHA1 Message Date
fischerch103508 1f5b8ad0a2 game.c implementiert 2026-10-17 17:58:42 +02:00
fischerch103508 7eaf6e2f1f main abgeaendert 2026-10-17 15:29:22 +02:00
fischerch103508 a5e963f2a6 game.c implementiert 2026-10-17 15:26:06 +02:00
fischerch103508 356bb5cb9e Makefile 2026-10-17 12:43:47 +02:00
fischerch103508 fd89a1e5f7 makefile angepasst 2026-10-15 21:13:42 +02:00
ChristophFischer b9fd1b3553 input.c mit makefile getestet 2026-10-14 15:35:51 +02:00
ChristophFischer 86bf0775f8 neue makefile 2026-10-14 14:58:10 +02:00
fischerch103508 30c53ce8b9 input.c errors behoben 2026-10-13 20:33:40 +02:00
fischerch103508 61c60ebffd input angepasst 2026-10-13 19:45:13 +02:00
5 changed files with 123 additions and 21 deletions

No files matched your search

+85
View File
@@ -13,5 +13,90 @@
// 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));
int x = 0;
int y = 0;
int placedWords = 0;
typedef enum {vertikal, horizontal} Platzierungsrichtung;
for(int i =0; i < MAX_SEARCH_FIELD_LEN; i++) //Array Salad mit 0 füllen um es nachher als vergleichsoperator zu nutzen
{
for( int j = 0; j < MAX_SEARCH_FIELD_LEN; j++)
{
salad[i][j] = '0';
}
}
for(int i = 0; i < wordCount; i++)
{
int platziert = 0;
int platzierversuche = 0;
while(platziert == 0 && platzierversuche < MAX_RAND_TRIES_PER_WORD )
{
platzierversuche++;
x = rand() % searchFieldLen;
y = rand() % searchFieldLen;
Platzierungsrichtung zufaellige_richtung = rand() % 2;
if(zufaellige_richtung == vertikal && strlen(words[i]) <= (searchFieldLen-y))
{
int check = 0;
for(int k = 0; k < strlen(words[i]); k++)
{
if(salad[y+k][x] == '0' || salad[y+k][x] == words[i][k])
{
check ++;
}
}
if(check == strlen(words[i]))
{
for(int j = 0; j < strlen(words[i]); j++)
{
salad[y+j][x] = words[i][j];
}
placedWords++;
platziert = 1;
}
}
else if( zufaellige_richtung == horizontal && strlen(words[i]) <= (searchFieldLen-x))
{
int check = 0;
for(int k = 0; k < strlen(words[i]); k++)
{
if(salad[y][x+k] == '0' || salad[y][x+k] == words[i][k])
{
check ++;
}
}
if(check == strlen(words[i]))
{
for(int j = 0; j < strlen(words[i]); j++)
{
salad[y][x+j] = words[i][j];
}
placedWords++;
platziert = 1;
}
}
}
}
for(int i =0; i < MAX_SEARCH_FIELD_LEN; i++)
{
for( int j = 0; j < MAX_SEARCH_FIELD_LEN; j++)
{
if(salad[i][j] == '0')
{
salad[i][j] = rand() % (90-65+1)+ 65;
}
}
}
return placedWords;
}
+21 -17
View File
@@ -1,7 +1,7 @@
#include "input.h"
#include <string.h>
#include <ctype.h>
// TODO:
// eine Funktion implementieren, die ein einzelnes Wort aus einer Textdatei (words.txt) einliest und als C-String zurückgibt.
@@ -9,26 +9,30 @@
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
{
char puffer[MAX_LINE_LEN];
char *teiler = " ,;\n";
char *teiler = "\n ,;";
char *token;
FILE *words_txt_speicherort; //Zeiger auf den Speicherort der word.txt Datei
unsigned int wordCount = 0;
words_txt_speicherort = fopen("words.txt","r"); //word.txt öffnen
if(words_txt_speicherort == NULL) //Abbruch falls words.txt nicht existieren würde
while(fgets(puffer, MAX_LINE_LEN, file) != NULL) //Liest die zeilenweise Wörter aus der file in einen Zwischenpuffer bis das Dateiende erreicht ist returnwert der file == NULL
{
return -1;
token = strtok(puffer, teiler); // Holt sich per Teilerbedingung das erste Wort aus dem puffer
while(token != NULL && wordCount < maxWordCount)
{
for(int i = 0; i < MAX_WORD_LEN; i++) //Verwandelt jeden Buchstaben in einen Großbuchstaben
{
token[i] = toupper(token[i]);
}
strncpy(words[wordCount], token, MAX_WORD_LEN -1); //speichert einzelnes Wort in das gegeben word array ab und holt sich das nächste im Puffer, bis array leer token == NULL
//words[wordCount][MAX_WORD_LEN - 1] = '\0';
wordCount++;
token = strtok(NULL, teiler);
}
}
fgets(puffer, MAX_LINE_LEN, words_txt_speicherort); //speichert alle Zeichen der words.txt datei in den speicher
token = strtok(puffer, teiler); //Trennt das erste Wort der Zeichenkette, abhängig von den Teilerbedingungen
while(token != NULL)
words = token; //speichert nur das einzelne Word in das words array; Problem: Laufindex der global gespeichert werden müsste; wie springe ich beim 2ten Funktionsaufruf zum nächsten Wort
int fclose(words_txt_speicherort);
return wordCount;
}
+1
View File
@@ -5,6 +5,7 @@
#define MAX_WORD_LEN 100
#define MAX_LINE_LEN 1024
#define MAX_LINE_NUMBER 100 //Selbst hinzugefügt
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount);
+9 -4
View File
@@ -36,11 +36,16 @@ int main(int argc, char *argv[])
// Create the word salad by placing words into grid
placedWords = createWordSalad(wordSalad, SALAD_SIZE, words, wordCount);
// TODO:
// Check if all words were successfully placed
// Start the game if successful
// error message if some words couldn't be placed
if(placedWords == wordCount)
{
startGame(wordSalad, SALAD_SIZE, words, wordCount, 800);
}
else
{
fprintf(stderr, "konnte nicht alle Woerter platzieren %d von %d \n", placedWords, wordCount);
exitCode = EXIT_FAILURE;
}
}
else
{
+7
View File
@@ -25,6 +25,13 @@ wordsalad_initial:
# --------------------------
# Normales Spiel bauen
# --------------------------
wordsalad_myversion: input.o $(BINARIES)/libwordsalad_complete.a $(BINARIES)/libraylib.a
$(CC) $(CFLAGS) -o wordsalad_myversion input.o $(BINARIES)/libwordsalad_complete.a $(BINARIES)/libraylib.a $(LDFLAGS)
wordsalad_final: main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a
$(CC) $(CFLAGS) -o wordsalad_final main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a $(LDFLAGS)
wordsalad: main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a
$(CC) $(CFLAGS) -o wordsalad main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a $(LDFLAGS)