Compare commits

..

No commits in common. "4ee5fd76482825346eea51e86299a5b07744b09d" and "7dc036df15ddf73e886535946bc92402278a0280" have entirely different histories.

14 changed files with 20 additions and 10179 deletions

View File

@ -10,182 +10,14 @@
/* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren
* restliche Felder mit zufälligen Buchstaben füllen */
// enum to make it more clear what de current orientation is
typedef enum
{
HORIZONTAL,
VERTIKAL
} orientation;
// new struct for handing over the entire wordPosition
// alignment is HORIZONTAL or VERTICAL
// rowOrColumn is the int of the colum or row the word is suposed to be placed in
// startingCell is the int of where in the row/colum the first leter of the word suposed to be placed
typedef struct
{
orientation alignment;
unsigned int rowOrColumn;
unsigned int startingCell;
} wordPosition;
// Choses a random Position for the current Word
wordPosition choserandomPosition(unsigned int searchFieldLen, unsigned int wordLength)
{
wordPosition position = {0, 0, 0};
srand(time(NULL));
position.alignment = rand()%(VERTIKAL - HORIZONTAL + 1) + HORIZONTAL;
position.rowOrColumn = rand()%(searchFieldLen);
position.startingCell = rand()%(searchFieldLen - wordLength);
return position;
}
// Checks if the current Position is free
// returns 1 if the Position is free
// returns 0 if the Position is occupied
int checkIfPositionIsFree(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], wordPosition position,unsigned int wordLength, unsigned int serchFieldLen)
{
int i = 0;
int letterFound = 0;
int positionfree = 0;
if (position.alignment == HORIZONTAL)
{
// checking to see if position is free
// by scanning each column in the given row
for (i = position.startingCell; (i < serchFieldLen) && !(letterFound); i++)
{
if ((salad[position.rowOrColumn][i] >= 'A') && (salad[position.rowOrColumn][i] <= 'z'))
{
letterFound = 1;
}
}
}
else if (position.alignment == VERTIKAL)
{
// checking to see if position is free
// by scanning each row in the given column
for (i = position.startingCell; (i < serchFieldLen) && !(letterFound); i++)
{
if ((salad[i][position.rowOrColumn] >= 'A') && (salad[i][position.rowOrColumn] <= 'z'))
{
letterFound = 1;
}
}
}
positionfree = !letterFound;
return positionfree;
}
// Places the current word into the
// selected position
// returns 1 if sucessfull
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;
if (position.alignment == HORIZONTAL)
{
for (i = position.startingCell; (i < serchFieldLen) && (i < currentWordLen); i++)
{
salad[position.rowOrColumn][i] = currentWord[i];
}
salad[position.rowOrColumn][i] = '\0';
}
else if (position.alignment == VERTIKAL)
{
for (i = position.startingCell; (i < serchFieldLen) && (i < currentWordLen); i++)
{
salad[i][position.rowOrColumn] = currentWord[i];
}
salad[i][position.rowOrColumn] = '\0';
}
return 1;
}
// Places random letters into the
// empty fields of the wordSalad
void placeRandomLetters(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen)
{
int i = 0;
int j = 0;
srand(time(NULL));
for (i = 0; i < searchFieldLen; i++)
{
for (j = 0; i < searchFieldLen; j++)
{
if ((salad[i][j] < 'A') && (salad[i][j] > 'z'))
{
salad[i][j] = rand()%('Z' - 'A' + 1) + 'A';
}
}
}
}
// Creates the word salad by placing words randomly and filling empty spaces
// returnes the number of sucessfully placed words
int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount)
{
int i = 0;
int j = 0;
int positionFound = 0;
int placedWords = 0;
char currentWord[MAX_WORD_LEN];
wordPosition currentWordPosition = {0,0,0};
for (i = 1; i <= wordCount; i++)
{
do
{
currentWordPosition = choserandomPosition(searchFieldLen, strlen(words[i]));
positionFound = checkIfPositionIsFree(salad, currentWordPosition, strlen(words[i]), searchFieldLen);
j++;
} while ((j < MAX_RAND_TRIES_PER_WORD) && !(positionFound));
if (positionFound)
{
strcpy(currentWord, words[i-1]);
placedWords += placeWord(salad, currentWordPosition, currentWord, strlen(currentWord), searchFieldLen);
}
}
placeRandomLetters(salad, searchFieldLen);
return placedWords;
}
// Prints the word salad to console
void showWordSalad(const 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; i < searchFieldLen; j++)
{
printf("%c", salad[i][j]);
}
printf("\n");
}
}

View File

@ -2,37 +2,11 @@
#include <string.h>
#include <ctype.h>
#define MAX_BUFFER_LEN 256
// TODO:
// eine Funktion implementieren, die ein einzelnes Wort aus einer Textdatei (words.txt) einliest und als C-String zurückgibt.
// Read words from file and store in 'words' array
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
{
char buffer[MAX_BUFFER_LEN];
int count = 0;
char *teiler = ".,; !?\n";
if(file == NULL)
{
printf("Fehler beim Öffnen von words.txt!\n");
return -1;
}
while(fgets(buffer, MAX_LINE_LEN, file))
{
const char *wort = strtok(buffer, teiler);
while(wort != NULL && count < maxWordCount)
{
strncpy(words[count], wort, MAX_WORD_LEN-1);
words[count][MAX_WORD_LEN-1] = '\0';
count++;
wort = strtok(NULL, teiler);
}
}
return count;
}

View File

@ -7,13 +7,6 @@
#define MAX_NUMBER_OF_WORDS 100
#define SALAD_SIZE 20
// selbstgeschriebene Definitionen:
// annahmen ist das windowWidth in pixeln gegeben
// werden muss, da auch andere funktionen wie
// createCharSquarePanel in Pixeln arbeiten
#define WINDOW_WIDTH 800
int main(int argc, char *argv[])
{
int exitCode = EXIT_SUCCESS;
@ -43,24 +36,10 @@ int main(int argc, char *argv[])
// Create the word salad by placing words into grid
placedWords = createWordSalad(wordSalad, SALAD_SIZE, words, wordCount);
// DONE:
// 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)
{
// selbe error message wird auch von wordsalad_inital.exe ausgegeben,
// wenn diese einen fehler produziert
printf("Could only place %d of %d words.", placedWords, wordCount);
printf(" Possible solution is to choose a larger search field ...\n");
}
else
{
// annahme: windowWidth wird in Pixeln gesucht,
// da auch andere funktionen, wie createCharSquarePanel
// in Pixeln arbeiten
startGame(wordSalad, SALAD_SIZE, words, placedWords, WINDOW_WIDTH);
}
}
else

View File

@ -1,29 +1,22 @@
CC = gcc
CFLAGS = -g -Wall
LDFLAGS = -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo
# Architektur automatisch erkennen (arm64 oder x86_64)
LDFLAGS = -framework OpenGL -framework CoreFoundation -framework CoreGraphics -framework IOKit -framework Cocoa -framework CoreVideo
ARCH := $(shell uname -m)
ifeq ($(ARCH),arm64)
BINARIES = ./macos-arm64
else
BINARIES = ./macos-x64
endif
BINARIES = ./macos-$(ARCH)
raylib_folder = ./raylib
unityfolder = ./unity
# --------------------------
# eigenes Spiel bauen
# initiales Spiel bauen
# --------------------------
wordsalad_myversion: main.o graphicalGame.o $(BINARIES)/libwordsalad.a $(BINARIES)/libraylib.a
$(CC) $(CFLAGS) -o wordsalad_myversion main.c graphicalGame.c $(BINARIES)/libwordsalad.a $(BINARIES)/libraylib.a $(LDFLAGS)
wordsalad_initial:
$(CC) -o wordsalad_initial $(BINARIES)/libwordsalad_complete.a $(BINARIES)/libraylib.a $(LDFLAGS)
# --------------------------
# Normales Spiel bauen
# --------------------------
all: main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a
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)
main.o: main.c
@ -36,18 +29,18 @@ game.o: game.c
$(CC) -c $(CFLAGS) game.c
graphicalGame.o: graphicalGame.c
$(CC) -I$(raylib_folder) -c $(CFLAGS) graphicalGame.c
$(CC) -I$(raylibfolder) -c $(CFLAGS) graphicalGame.c
# --------------------------
# Unit Tests
# --------------------------
TEST_BIN = runTests
test: input.o game.o unit_tests.c
$(CC) $(CFLAGS) -I$(unityfolder) -o $(TEST_BIN) input.o game.o unit_tests.c $(BINARIES)/libunity.a
test: input.o game.o unit_tests.c $(BINARIES)/libunity.a
$(CC) -Wall -I$(unityfolder) -o $(TEST_BIN) input.o game.o unit_tests.c $(BINARIES)/libunity.a
# --------------------------
# Clean
# --------------------------
clean:
rm -f *.o wordsalad wordsalad_myversion $(TEST_BIN)
rm -f *.o wordsalad

Binary file not shown.

View File

@ -2,37 +2,11 @@
#include <string.h>
#include <ctype.h>
#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.
// Read words from file and store in 'words' array
int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount)
{
char buffer[MAX_BUFFER_LEN];
int count = 0;
char *teiler = ".,; !?\n";
if(file == NULL)
{
printf("Fehler beim Öffnen von words.txt!\n");
return -1;
}
while(fgets(buffer, MAX_LINE_LEN, file))
{
const char *wort = strtok(buffer, teiler);
while(wort != NULL && count < maxWordCount)
{
strncpy(words[count], wort, MAX_WORD_LEN-1);
words[count][MAX_WORD_LEN-1] = '\0';
count++;
wort = strtok(NULL, teiler);
}
}
return count;
}

View File

@ -11,7 +11,7 @@
// annahmen ist das windowWidth in pixeln gegeben
// werden muss, da auch andere funktionen wie
// createCharSquarePanel in Pixeln arbeiten
#define WINDOW_WIDTH 800
#define WINDOW_WIDTH 540
int main(int argc, char *argv[])
@ -59,7 +59,7 @@ int main(int argc, char *argv[])
// annahme: windowWidth wird in Pixeln gesucht,
// da auch andere funktionen, wie createCharSquarePanel
// in Pixeln arbeiten
startGame(wordSalad, SALAD_SIZE, words, placedWords, WINDOW_WIDTH);
startGame(wordSalad, MAX_SEARCH_FIELD_LEN, words, placedWords, WINDOW_WIDTH);
}
}

Binary file not shown.

View File

@ -1,5 +1,5 @@
CC = gcc
CFLAGS = -g -Wall
CFLAGS = -g -Wall -I$(raylibfolder)
LDFLAGS = -lopengl32 -lgdi32 -lwinmm
BINARIES = ./windows
@ -9,15 +9,15 @@ unityfolder = ./unity
# --------------------------
# initiales Spiel bauen
# --------------------------
#wordsalad_initial:
# $(CC) -o wordsalad_initial $(BINARIES)/libwordsalad_complete.a $(BINARIES)/libraylib.a $(LDFLAGS)
wordsalad_initial:
$(CC) -o wordsalad_initial $(BINARIES)/libwordsalad_complete.a $(BINARIES)/libraylib.a $(LDFLAGS)
# --------------------------
# eigenes Spiel bauen
# --------------------------
wordsalad_myversion: main.o graphicalGame.o $(BINARIES)/libwordsalad.a $(BINARIES)/libraylib.a
$(CC) -o wordsalad_myvesion.exe main.c graphicalGame.c $(BINARIES)/libwordsalad.a $(BINARIES)/libraylib.a $(LDFLAGS)
wordsalad_myversion:
$(CC) -o $(CFLAGS) main.c $(BINARIES)/libwordsalad.a
# --------------------------

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.