1 Commits
Author SHA1 Message Date
hofmannjo99187 84de10d05b input neu geschrieben 2025-10-30 16:49:21 +01:00
9 changed files with 56 additions and 139 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,27 +91,26 @@ 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 -88
View File
@@ -2,76 +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
{
currentChar = fgetc(file);
if ((currentChar >= 'A') && (currentChar <= 'Z'))
{
if (!currentlyInWord)
{
currentlyInWord = 1;
}
words[word][wordChar] = currentChar;
wordChar++;
}
else if ((currentChar >= 'a') && (currentChar <= 'z'))
{
if (!currentlyInWord)
{
currentlyInWord = 1;
}
words[word][wordChar] = toupper(currentChar);
wordChar++;
}
else if (currentlyInWord)
{
words[word][wordChar] = '\0';
word++;
wordChar = 0;
currentlyInWord = 0;
}
} while (((currentChar != EOF) && (word <= maxWordCount)));
printf("wortzahl: %d\n", word);
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.
@@ -79,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;
} }
fscanf(file, "%10s", buffer);
while(fgets(buffer, MAX_LINE_LEN, file)) do
{ {
const char *wort = strtok(buffer, teiler);
while(wort != NULL && count < maxWordCount) if ((buffer[i] >= 'A') && (buffer[i] <= 'Z'))
{ {
strncpy(words[count], wort, MAX_WORD_LEN-1); if (!firstLetter)
words[count][MAX_WORD_LEN-1] = '\0'; {
count++; firstLetter = 1;
}
wort = strtok(NULL, teiler);
words[word][wordChar] = buffer[i];
wordChar++;
} }
} else if ((buffer[i] >= 'a') && (buffer[i] <= 'z'))
{
if (!firstLetter)
{
firstLetter = 1;
}
return count; 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.
Binary file not shown.