generated from freudenreichan/info2Praktikum-Wortsalat
Compare commits
6
Commits
27dc4dd02b
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd75457f10 | ||
|
|
918d049e14 | ||
|
|
ceb9262589 | ||
|
|
6b30eb3145 | ||
|
|
9624270bc3 | ||
|
|
e2de303489 |
No files matched your search
+26
-125
@@ -8,24 +8,13 @@
|
||||
#define EMPTY_CHAR 0
|
||||
#define MAX_NUMBER_OF_WORDS 100
|
||||
|
||||
//TODO: Spiellogik implementieren:
|
||||
/* * Wörter aus der Wortliste zufällig horizontal oder vertikal platzieren
|
||||
* restliche Felder mit zufälligen Buchstaben füllen */
|
||||
|
||||
//words und salad sind char arrays --> laengstes wort sind 100 zeichen
|
||||
|
||||
// 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)
|
||||
{
|
||||
int placedWords = 0;
|
||||
srand(time(NULL));
|
||||
|
||||
int usedWords[MAX_NUMBER_OF_WORDS];
|
||||
for(int i=0; i< MAX_NUMBER_OF_WORDS; i++){
|
||||
usedWords[i] = -1;
|
||||
}
|
||||
|
||||
placedWords = fillSalad(salad, searchFieldLen, words, wordCount, usedWords);
|
||||
placedWords = fillSalad(salad, searchFieldLen, words, wordCount);
|
||||
showWordSalad(salad);
|
||||
printf("\nPlacedWords: %d\n", placedWords);
|
||||
return placedWords;
|
||||
@@ -65,10 +54,10 @@ int emptyPlaces(unsigned int wordCount)
|
||||
}
|
||||
|
||||
|
||||
// fills salad array with max. words from word array either horizontally or vertically
|
||||
int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS])
|
||||
int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount)
|
||||
{
|
||||
int addedWords = 0;
|
||||
int addedWords = 0;
|
||||
|
||||
// empties salad
|
||||
for(unsigned int i = 0; i < MAX_SEARCH_FIELD_LEN; i++) {
|
||||
for(unsigned int j = 0; j < MAX_SEARCH_FIELD_LEN; j++) {
|
||||
@@ -77,35 +66,30 @@ int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned i
|
||||
}
|
||||
|
||||
// inserts words
|
||||
for(unsigned int w = 0; w < wordCount; w++) {
|
||||
for(unsigned int w = 0; w < wordCount; w++) { //geht words array linear durch, damit jedes Wort ueberprueft wird
|
||||
int tries = 0;
|
||||
int placed = 0;
|
||||
|
||||
while(tries < MAX_RAND_TRIES_PER_WORD && !placed) {
|
||||
int numWord = whichWord(wordCount, usedWords);
|
||||
if(numWord == -5) {
|
||||
// found no unused word
|
||||
break;
|
||||
}
|
||||
|
||||
int horizontal = printHorizontal();
|
||||
while(tries < MAX_RAND_TRIES_PER_WORD && !placed) { //solange die max. Anzahl an Versuchen pro Wort nicht ueberschritten wird und das Wort nicht plaziert wurde:
|
||||
int horizontal = printHorizontal(); //horozontal oder vertikal?
|
||||
|
||||
if(horizontal) {
|
||||
int row = rand() % searchFieldLen;
|
||||
// checks if words fits
|
||||
unsigned int wordLen = strlen(words[numWord]);
|
||||
if(wordLen <= searchFieldLen) {
|
||||
int startCol = rand() % (searchFieldLen - wordLen + 1);
|
||||
int row = rand() % searchFieldLen; //sucht random row aus
|
||||
unsigned int wordLen = strlen(words[w]);
|
||||
if(wordLen <= searchFieldLen) { //wenn wort von der Laenge her in Zeile passt
|
||||
int startCol = rand() % (searchFieldLen - wordLen + 1); //bestimmt einen zufaelligen Startpunkt in der row zhwischen 0 und max. Index, damit das WOrt noch passt
|
||||
int canPlace = 1;
|
||||
for(unsigned int i = 0; i < wordLen; i++) { //checks if word fits
|
||||
for(unsigned int i = 0; i < wordLen; i++) { //schaut, ob der Platz in jeder Zelle in salad frei ist oder ob Ueberlappung zweier Woerter moeglich ist
|
||||
if(salad[row][startCol + i] != '\0') {
|
||||
canPlace = 0;
|
||||
break;
|
||||
if(salad[row][startCol + i] != words[w][i]) {
|
||||
canPlace = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(canPlace) { //word fits and is inserted
|
||||
if(canPlace) { //Wort kann plaziert werden -> fuellt Wort in random row ab random Zelle mit Wort und addiert erfolgreich plazierte Woerter
|
||||
for(unsigned int i = 0; i < wordLen; i++) {
|
||||
salad[row][startCol + i] = words[numWord][i];
|
||||
salad[row][startCol + i] = words[w][i];
|
||||
}
|
||||
placed = 1;
|
||||
addedWords++;
|
||||
@@ -114,19 +98,21 @@ int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned i
|
||||
} else {
|
||||
// vertically
|
||||
int col = rand() % searchFieldLen;
|
||||
unsigned int wordLen = strlen(words[numWord]);
|
||||
unsigned int wordLen = strlen(words[w]);
|
||||
if(wordLen <= searchFieldLen) {
|
||||
int startRow = rand() % (searchFieldLen - wordLen + 1);
|
||||
int canPlace = 1;
|
||||
for(unsigned int i = 0; i < wordLen; i++) {
|
||||
if(salad[startRow + i][col] != '\0') {
|
||||
canPlace = 0;
|
||||
break;
|
||||
if(salad[startRow + i][col] != words[w][i]) {
|
||||
canPlace = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(canPlace) {
|
||||
for(unsigned int i = 0; i < wordLen; i++) {
|
||||
salad[startRow + i][col] = words[numWord][i];
|
||||
salad[startRow + i][col] = words[w][i];
|
||||
}
|
||||
placed = 1;
|
||||
addedWords++;
|
||||
@@ -137,98 +123,12 @@ int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned i
|
||||
tries++;
|
||||
}
|
||||
}
|
||||
|
||||
fillRandom(salad);
|
||||
return addedWords;
|
||||
}
|
||||
|
||||
|
||||
int whichWord(unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS])
|
||||
{
|
||||
int tries = 0;
|
||||
|
||||
while(tries < MAX_RAND_TRIES_PER_WORD) {
|
||||
int numWord = rand() % wordCount; // 0..wordCount-1
|
||||
|
||||
int alreadyUsed = 0;
|
||||
for(int f = 0; f < MAX_NUMBER_OF_WORDS; f++){
|
||||
if(usedWords[f] == numWord){
|
||||
alreadyUsed = 1;
|
||||
break; // word already used
|
||||
}
|
||||
}
|
||||
|
||||
if(!alreadyUsed){
|
||||
// Eintragen in usedWords
|
||||
for(int f = 0; f < MAX_NUMBER_OF_WORDS; f++){
|
||||
if(usedWords[f] == -1){ // unused
|
||||
usedWords[f] = numWord;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return numWord; // unused row found
|
||||
}
|
||||
|
||||
tries++;
|
||||
}
|
||||
|
||||
return -5;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//Fills word in salad and deletes row of words of the used word
|
||||
void fillWordinRow(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN],unsigned int searchFieldLen,const char words[][MAX_WORD_LEN], int numWord,int row)
|
||||
{
|
||||
unsigned int wordLen = strlen(words[numWord]);
|
||||
|
||||
// Returns if word longer than game field
|
||||
if (wordLen > searchFieldLen || wordLen == 0)
|
||||
return;
|
||||
|
||||
// Determines random starting point in the row to place word
|
||||
int startCol = rand() % (searchFieldLen - wordLen + 1);
|
||||
|
||||
// Determines wether word fits
|
||||
for (unsigned int i = 0; i < wordLen; i++)
|
||||
{
|
||||
if (salad[row][startCol + i] != '\0')
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
for (unsigned int i = 0; i < wordLen; i++)
|
||||
{
|
||||
salad[row][startCol + i] = words[numWord][i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Fills word in salad and deletes row of words of the used word, vertical from top to bottom
|
||||
void fillWordinColumn(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], int numWord, int column)
|
||||
{
|
||||
unsigned int wordLen = strlen(words[numWord]);
|
||||
|
||||
if (wordLen > searchFieldLen || wordLen == 0)
|
||||
return;
|
||||
|
||||
int startRow = rand() % (searchFieldLen - wordLen + 1);
|
||||
|
||||
for (unsigned int i = 0; i < wordLen; i++)
|
||||
{
|
||||
if (salad[startRow + i][column] != '\0')
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < wordLen; i++)
|
||||
{
|
||||
salad[startRow + i][column] = words[numWord][i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// if emptyPlaces, fill these with random letters
|
||||
void fillRandom(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]) {
|
||||
for (int j = 0; j < MAX_SEARCH_FIELD_LEN; j++) {
|
||||
@@ -240,3 +140,4 @@ void fillRandom(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,10 +10,7 @@ int createWordSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsi
|
||||
void showWordSalad(const char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]);
|
||||
int printHorizontal();
|
||||
int emptyPlaces(unsigned int wordCount);
|
||||
int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]);
|
||||
int whichWord(unsigned int wordCount, int usedWords[MAX_NUMBER_OF_WORDS]);
|
||||
void fillWordinRow(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], int numWord, int row);
|
||||
void fillWordinColumn(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], int numWord, int column);
|
||||
int fillSalad(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN], unsigned int searchFieldLen, const char words[][MAX_WORD_LEN], unsigned int wordCount);
|
||||
void fillRandom(char salad[MAX_SEARCH_FIELD_LEN][MAX_SEARCH_FIELD_LEN]);
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
+9
-10
@@ -36,17 +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
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// Print error message if file couldn't be opened
|
||||
fprintf(stderr, "Could not open file %s for reading ...\n", argv[1]);
|
||||
exitCode = EXIT_FAILURE;
|
||||
if (placedWords != 0)
|
||||
{
|
||||
// Start the game if successful
|
||||
startGame(wordSalad, SALAD_SIZE, words, wordCount,800);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "Warning: Only %u out of %u words could be placed.\n", placedWords, wordCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+14
-16
@@ -1,18 +1,20 @@
|
||||
# --------------------------
|
||||
# Compiler und Flags
|
||||
# --------------------------
|
||||
CC = gcc
|
||||
CFLAGS = -g -Wall -I$(raylibfolder)
|
||||
LDFLAGS = -lopengl32 -lgdi32 -lwinmm
|
||||
BINARIES = ./windows
|
||||
|
||||
raylib_folder = ./raylib
|
||||
raylibfolder = ./raylib
|
||||
unityfolder = ./unity
|
||||
|
||||
# --------------------------
|
||||
# initiales Spiel bauen
|
||||
# Initiales Spiel bauen
|
||||
# --------------------------
|
||||
wordsalad_initial:
|
||||
$(CC) -o wordsalad_initial $(BINARIES)/libwordsalad_complete.a $(BINARIES)/libraylib.a $(LDFLAGS)
|
||||
|
||||
|
||||
# --------------------------
|
||||
# Normales Spiel bauen
|
||||
# --------------------------
|
||||
@@ -23,13 +25,19 @@ main.o: main.c
|
||||
$(CC) -c $(CFLAGS) main.c
|
||||
|
||||
input.o: input.c
|
||||
$(CC) -c $(CFLAGS)input.c
|
||||
$(CC) -c $(CFLAGS) input.c
|
||||
|
||||
game.o: game.c
|
||||
$(CC) -c $(CFLAGS) game.c
|
||||
|
||||
graphicalGame.o: graphicalGame.c
|
||||
$(CC) -I$(raylib_folder) -c $(CFLAGS) graphicalGame.c
|
||||
$(CC) $(CFLAGS) -c graphicalGame.c
|
||||
|
||||
# --------------------------
|
||||
# Eigene Version bauen
|
||||
# --------------------------
|
||||
wordsalad_myversion: main.c
|
||||
$(CC) $(CFLAGS) -o wordsalad_myversion main.c $(BINARIES)/libwordsalad.a $(LDFLAGS)
|
||||
|
||||
# --------------------------
|
||||
# Unit Tests
|
||||
@@ -39,18 +47,8 @@ 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
|
||||
|
||||
|
||||
|
||||
# --------------------------
|
||||
# Meine eigene Version
|
||||
# --------------------------
|
||||
wordsalad_myversion: main.c
|
||||
$(CC) $(CFLAGS) -o wordsalad_myversion main.c $(BINARIES)/libwordsalad.a $(LDFLAGS)
|
||||
|
||||
|
||||
|
||||
# --------------------------
|
||||
# Clean
|
||||
# --------------------------
|
||||
clean:
|
||||
del /f *.o *.exe
|
||||
del /f *.o *.exe
|
||||
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
Reference in new issue
Block a user