1 Commits
Author SHA1 Message Date
hofmannjo99187 84de10d05b input neu geschrieben 2025-10-30 16:49:21 +01:00
13 changed files with 56 additions and 151 deletions
-1
View File
@@ -403,7 +403,6 @@ static int allWordsFound(SearchWordPanel searchWordPanel)
// Main game loop where game is run and updated // Main game loop where game is run and updated
static void gameLoop(const Vector2 screenSize, MouseSelection mouseSelection, CharSquarePanel squarePanel, SearchWordPanel searchWordPanel, const HelperMessage helperMsg, const WinMessage winMsg) static void gameLoop(const Vector2 screenSize, MouseSelection mouseSelection, CharSquarePanel squarePanel, SearchWordPanel searchWordPanel, const HelperMessage helperMsg, const WinMessage winMsg)
{ {
SetConfigFlags(FLAG_WINDOW_HIGHDPI);
InitWindow(screenSize.x, screenSize.y, "Word Salad"); // Initialize game window InitWindow(screenSize.x, screenSize.y, "Word Salad"); // Initialize game window
SetTargetFPS(60); SetTargetFPS(60);
+17 -47
View File
@@ -31,33 +31,16 @@ typedef struct
} wordPosition; } wordPosition;
void initializeWordsalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen)
{
int i = 0;
int j = 0;
for (i = 0; i < searchFieldLen; i++)
{
for (j = 0; j < searchFieldLen; j++)
{
salad[i][j] = '=';
}
}
}
// Choses a random Position for the current Word // Choses a random Position for the current Word
wordPosition choserandomPosition(unsigned int searchFieldLen, unsigned int wordLength) wordPosition choserandomPosition(unsigned int searchFieldLen, unsigned int wordLength)
{ {
wordPosition position = {0, 0, 0}; wordPosition position = {0, 0, 0};
srand(time(NULL));
position.alignment = rand()%(VERTIKAL - HORIZONTAL + 1) + HORIZONTAL; position.alignment = rand()%(VERTIKAL - HORIZONTAL + 1) + HORIZONTAL;
position.rowOrColumn = rand()%(searchFieldLen); position.rowOrColumn = rand()%(searchFieldLen);
position.startingCell = rand()%(searchFieldLen - wordLength); position.startingCell = rand()%(searchFieldLen - wordLength);
return position; return position;
} }
@@ -77,7 +60,7 @@ int checkIfPositionIsFree(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]
// by scanning each column in the given row // by scanning each column in the given row
for (i = position.startingCell; (i < serchFieldLen) && !(letterFound); i++) for (i = position.startingCell; (i < serchFieldLen) && !(letterFound); i++)
{ {
if (((salad[position.rowOrColumn][i] >= 'A') && (salad[position.rowOrColumn][i] <= 'Z')) || ((salad[position.rowOrColumn][i] >= 'a') && (salad[position.rowOrColumn][i] <= 'z'))) if ((salad[position.rowOrColumn][i] >= 'A') && (salad[position.rowOrColumn][i] <= 'z'))
{ {
letterFound = 1; letterFound = 1;
} }
@@ -89,7 +72,7 @@ int checkIfPositionIsFree(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]
// by scanning each row in the given column // by scanning each row in the given column
for (i = position.startingCell; (i < serchFieldLen) && !(letterFound); i++) for (i = position.startingCell; (i < serchFieldLen) && !(letterFound); i++)
{ {
if (((salad[i][position.rowOrColumn] >= 'A') && (salad[i][position.rowOrColumn] <= 'z')) || ((salad[i][position.rowOrColumn] >= 'a') && (salad[i][position.rowOrColumn] <= 'z'))) if ((salad[i][position.rowOrColumn] >= 'A') && (salad[i][position.rowOrColumn] <= 'z'))
{ {
letterFound = 1; letterFound = 1;
} }
@@ -108,28 +91,27 @@ int checkIfPositionIsFree(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]
int placeWord(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], wordPosition position, const char currentWord[], unsigned int currentWordLen, unsigned int serchFieldLen) int placeWord(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], wordPosition position, const char currentWord[], unsigned int currentWordLen, unsigned int serchFieldLen)
{ {
int i = 0; int i = 0;
int j = 0;
if (position.alignment == HORIZONTAL) if (position.alignment == HORIZONTAL)
{ {
for (i = position.startingCell; (i < serchFieldLen) && (currentWord[j] != '\0'); i++)
for (i = position.startingCell; (i < serchFieldLen) && (i < currentWordLen); i++)
{ {
salad[position.rowOrColumn][i] = currentWord[j]; salad[position.rowOrColumn][i] = currentWord[i];
j++;
} }
salad[position.rowOrColumn][i] = '\0'; salad[position.rowOrColumn][i] = '\0';
} }
else if (position.alignment == VERTIKAL) else if (position.alignment == VERTIKAL)
{ {
for (i = position.startingCell; (i < serchFieldLen) && (currentWord[j] != '\0'); i++) for (i = position.startingCell; (i < serchFieldLen) && (i < currentWordLen); i++)
{ {
salad[i][position.rowOrColumn] = currentWord[j]; salad[i][position.rowOrColumn] = currentWord[i];
j++;
} }
salad[i][position.rowOrColumn] = '\0'; salad[i][position.rowOrColumn] = '\0';
} }
return 1; return 1;
} }
@@ -141,11 +123,13 @@ void placeRandomLetters(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],
int j = 0; int j = 0;
srand(time(NULL));
for (i = 0; i < searchFieldLen; i++) for (i = 0; i < searchFieldLen; i++)
{ {
for (j = 0; j < searchFieldLen; j++) for (j = 0; i < searchFieldLen; j++)
{ {
if ((salad[i][j] < 'A') || (salad[i][j] > 'z') || ((salad[i][j] < 'a') && (salad[i][j] > 'Z'))) if ((salad[i][j] < 'A') && (salad[i][j] > 'z'))
{ {
salad[i][j] = rand()%('Z' - 'A' + 1) + 'A'; salad[i][j] = rand()%('Z' - 'A' + 1) + 'A';
} }
@@ -160,38 +144,24 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsi
{ {
int i = 0; int i = 0;
int j = 0; int j = 0;
int k = 0;
int positionFound = 0; int positionFound = 0;
int placedWords = 0; int placedWords = 0;
char nullWord[MAX_WORD_LEN];
char currentWord[MAX_WORD_LEN]; char currentWord[MAX_WORD_LEN];
wordPosition currentWordPosition = {0,0,0}; wordPosition currentWordPosition = {0,0,0};
for (k = 0; k < MAX_WORD_LEN; k++)
{
nullWord[k] = '\0';
}
srand(time(NULL));
initializeWordsalad(salad, searchFieldLen);
for (i = 1; i <= wordCount; i++) for (i = 1; i <= wordCount; i++)
{ {
j = 0;
strcpy(currentWord, nullWord);
strcpy(currentWord, words[i-1]);
do do
{ {
currentWordPosition = choserandomPosition(searchFieldLen, strlen(currentWord)); currentWordPosition = choserandomPosition(searchFieldLen, strlen(words[i]));
positionFound = checkIfPositionIsFree(salad, currentWordPosition, strlen(currentWord), searchFieldLen); positionFound = checkIfPositionIsFree(salad, currentWordPosition, strlen(words[i]), searchFieldLen);
j++; j++;
} while ((j < MAX_RAND_TRIES_PER_WORD) && !(positionFound)); } while ((j < MAX_RAND_TRIES_PER_WORD) && !(positionFound));
if (positionFound) if (positionFound)
{ {
strcpy(currentWord, words[i-1]);
placedWords += placeWord(salad, currentWordPosition, currentWord, strlen(currentWord), searchFieldLen); placedWords += placeWord(salad, currentWordPosition, currentWord, strlen(currentWord), searchFieldLen);
} }
} }
@@ -212,7 +182,7 @@ void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],
for (i = 0; i < searchFieldLen; i++) for (i = 0; i < searchFieldLen; i++)
{ {
for (j = 0; j < searchFieldLen; j++) for (j = 0; i < searchFieldLen; j++)
{ {
printf("%c", salad[i][j]); printf("%c", salad[i][j]);
} }
Binary file not shown.
+39 -96
View File
@@ -2,84 +2,7 @@
#include <string.h> #include <string.h>
#include <ctype.h> #include <ctype.h>
static char *buffer;
// TODO:
// eine Funktion implementieren, die ein einzelnes Wort aus einer Textdatei (words.txt) einliest und als C-String zurückgibt.
/*
char *readSingleWord(FILE *file)
{
if (file == NULL)
{
return 0;
}
fgets(singleWordBuffer, MAX_LINE_LEN, file);
}
*/
// Read words from file and store in 'words' array
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
{
int currentlyInWord = 0;
int word = 0;
int wordChar = 0;
char currentChar = 0;
do
{
// get the next char from the file
currentChar = fgetc(file);
// if current char is a capital letter
// write it into the words array
if ((currentChar >= 'A') && (currentChar <= 'Z'))
{
if (!currentlyInWord)
{
currentlyInWord = 1;
}
words[word][wordChar] = currentChar;
wordChar++;
}
// if the current char is a lowercase letter
// change it to its capital version
// and write it into the words array
else if ((currentChar >= 'a') && (currentChar <= 'z'))
{
if (!currentlyInWord)
{
currentlyInWord = 1;
}
words[word][wordChar] = toupper(currentChar);
wordChar++;
}
// if the current char is NOT a letter
// the end of a word has been reached
// skip chars untill a new letter is found
else if (currentlyInWord)
{
words[word][wordChar] = '\0';
word++;
wordChar = 0;
currentlyInWord = 0;
}
} while (((currentChar != EOF) && (word <= maxWordCount)));
return word;
}
/*
#define MAX_BUFFER_LEN 256
// TODO? // TODO?
// eine Funktion implementieren, die ein einzelnes Wort aus einer Textdatei (words.txt) einliest und als C-String zurückgibt. // eine Funktion implementieren, die ein einzelnes Wort aus einer Textdatei (words.txt) einliest und als C-String zurückgibt.
@@ -87,31 +10,51 @@ int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
// Read words from file and store in 'words' array // Read words from file and store in 'words' array
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount) int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
{ {
char buffer[MAX_BUFFER_LEN]; int i = 0;
int count = 0; int word = 0;
char *teiler = ".,; !?\n"; int wordChar = 0;
int firstLetter = 0;
if(file == NULL) if (file == NULL)
{ {
printf("Fehler beim Öffnen von words.txt!\n"); return 0;
return -1;
} }
while(fgets(buffer, MAX_LINE_LEN, file)) fscanf(file, "%10s", buffer);
{
const char *wort = strtok(buffer, teiler);
while(wort != NULL && count < maxWordCount) do
{ {
strncpy(words[count], wort, MAX_WORD_LEN-1);
words[count][MAX_WORD_LEN-1] = '\0';
count++;
wort = strtok(NULL, teiler); if ((buffer[i] >= 'A') && (buffer[i] <= 'Z'))
} {
if (!firstLetter)
{
firstLetter = 1;
} }
return count; words[word][wordChar] = buffer[i];
wordChar++;
}
else if ((buffer[i] >= 'a') && (buffer[i] <= 'z'))
{
if (!firstLetter)
{
firstLetter = 1;
}
words[word][wordChar] = toupper(buffer[i]);
wordChar++;
}
else if (firstLetter)
{
words[word][wordChar] = '\0';
word++;
wordChar = 0;
firstLetter = 0;
}
i++;
} while ((i < MAX_LINE_LEN) && (word < maxWordCount));
return word+1;
} }
*/
Binary file not shown.
-3
View File
@@ -43,8 +43,6 @@ int main(int argc, char *argv[])
// Create the word salad by placing words into grid // Create the word salad by placing words into grid
placedWords = createWordSalad(wordSalad, SALAD_SIZE, words, wordCount); placedWords = createWordSalad(wordSalad, SALAD_SIZE, words, wordCount);
printf("placed Words: %d\n", placedWords);
printf("wordCount = %d\n", wordCount);
// DONE: // DONE:
// Check if all words were successfully placed // Check if all words were successfully placed
// Start the game if successful // Start the game if successful
@@ -61,7 +59,6 @@ int main(int argc, char *argv[])
// annahme: windowWidth wird in Pixeln gesucht, // annahme: windowWidth wird in Pixeln gesucht,
// da auch andere funktionen, wie createCharSquarePanel // da auch andere funktionen, wie createCharSquarePanel
// in Pixeln arbeiten // in Pixeln arbeiten
showWordSalad(wordSalad, SALAD_SIZE);
startGame(wordSalad, SALAD_SIZE, words, placedWords, WINDOW_WIDTH); startGame(wordSalad, SALAD_SIZE, words, placedWords, WINDOW_WIDTH);
} }
Binary file not shown.
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
Hund,Katze; Maus
View File
-3
View File
@@ -1,3 +0,0 @@
Apfel
Banane
Kiwi
Binary file not shown.
Binary file not shown.